最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

运行Nginx反向代理的ubuntu 18.04 AWS服务器上的带Nodejs应用程序的HTTP 404

运维笔记admin9浏览0评论

运行Nginx反向代理的ubuntu 18.04 AWS服务器上的带Nodejs应用程序的HTTP 404

运行Nginx反向代理的ubuntu 18.04 AWS服务器上的带Nodejs应用程序的HTTP 404

我已将我的Nodejs(10.16)应用程序从开发中移至运行Nginx(17.4)反向代理的AWS ubuntu 18.04,经过全面测试。我的问题是,有HTTP 404到前端React Native请求。这是我前端的日志输出:

[12:50:39] I | ReactNativeJS ▶︎ 'response in signup: ', { type: 'default',
                             │ status: 404,  //<<<=== Server Not Found
                             │ ok: false,
                             │ statusText: undefined,
                             │ headers:
                             │ { map:
                             │ { connection: 'keep-alive',
                             │ 'content-length': '153',
                             │ 'content-type': 'text/html',
                             │ date: 'Wed, 09 Oct 2019 19:50:40 GMT',
                             │ server: 'nginx/1.17.4' } },  //<<<=== Nginx 
                             │ url: 'http://my-aws-public-ip/api/users/signup', //<<<=== request URL

这里是使用node index.js在ubuntu服务器上启动应用后的日志输出:

Listening on port 3000...
Executing (default): SELECT 1+1 AS result
DB connection has been established successfully.

这里服务器正在侦听端口3000,并且数据库连接已成功建立。

这里是default下的nginx代理配置文件/etc/nginx/sites-available/

$cat /etc/nginx/sites-available/default
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这是nodejs应用程序中的db.js

const Sql = require("sequelize");
const db = new Sql('emps', 'postgres', `${process.env.DB_PASSWORD}`, {
    host: 'localhost',
    dialect: 'postgres',
    port:5432,
} );

db
    .authenticate()
    .then(() => {
        console.log('DB connection has been established successfully.');

    })
    .catch(err => {
        console.error('Unable to connect to the database:', err);
    });

module.exports = db;

这里是index.js的结尾:

server.listen(port, () => {  //port=3000
  //logger('info', `Listening on port ${port}...`);
  console.log(`env var: ${process.env.jwtPrivateKey}`)
  console.log(`Listening on port ${port}...`);

});

这里是routes.js

module.exports = function(app, io) {
    app.use(helmet());
    app.use(compression());
    app.use(express.json());
    app.use('/api/events', events);
    app.use('/api/messages', messages);
    app.use('/api/users', users);
    app.use('/api/groups', groups);
    app.use('/api/contacts', contacts);
    app.use('/api/groupmembers', groupmembers);
    app.use('/api/sms', smsverif);
    app.use(error);
}

在AWS安全组上,为所有流量打开了入站TCP port 80, 22, 443 and 3000。配置中缺少什么导致HTTP 404?

回答如下:

为nginx尝试此配置

server {
    listen 80;
    server_name localhost your-aws-public-ip default_server;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
发布评论

评论列表(0)

  1. 暂无评论