簡體   English   中英

HTTP 404 與 Nodejs 應用程序在 ubuntu 18.04 AWS 服務器運行 Nginx 反向代理

[英]HTTP 404 with Nodejs app on ubuntu 18.04 AWS server running Nginx reverse proxy

經過全面測試后,我已將我的 Nodejs (10.16) 應用程序移動到運行 Nginx (17.4) 反向代理的 AWS ubuntu 18.04。 我遇到的問題是前端 React Native 請求有 http 404。 這是我前端的日志 output:

[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 服務器上啟動應用程序后的日志 output :

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

此處服務器正在偵聽端口3000 ,並且已成功建立數據庫連接。

這是/etc/nginx/sites-available/ default的 nginx 代理配置文件:

$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;
    }
}

這是db.js應用程序中的 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;
    }
}

事實證明,在/etc/nginx/nginx.conf中,缺少一個include /etc/nginx/sites-available/* 反向代理配置必須首先包含在 nginx.conf 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM