HTTP 404 с приложением Nodejs на Ubuntu 18.04 AWS-сервер, на котором работает обратный прокси-сервер Nginx - PullRequest
0 голосов
/ 09 октября 2019

Я переместил свое приложение Nodejs (10.16) в AWS ubuntu 18.04 с запущенным обратным прокси-сервером Nginx (17.4) из разработки после полного тестирования. У меня проблема в том, что для внешнего запроса React Native есть http 404. Вот вывод журнала на моем внешнем интерфейсе:

[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

Вот вывод журнала после запуска приложения на сервере Ubuntu с node index.js:

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

Здесь сервер прослушиваетчерез порт 3000 и соединение с базой данных было успешно установлено.

Вот файл конфигурации прокси nginx default в /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;
    }
}

Здесь db.js вПриложение nodejs:

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?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

попробуйте этот конфиг для 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 голосов
/ 19 октября 2019

Оказывается, что в /etc/nginx/nginx.conf отсутствует include /etc/nginx/sites-available/*. Конфигурация обратного прокси-сервера должна быть сначала включена в nginx.conf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...