Невозможно получить и т. Д. С обратным прокси-сервером Nginx + Node + PM2 - PullRequest
1 голос
/ 09 ноября 2019

При настройке обратного прокси-сервера Nginx как для приложения React, так и для веб-сервера Node, похоже, он сломал Express на бэкэнде, хотя я могу сказать, что получаю доступ к нему в браузере, получив «Cannot GET XX»сообщения после добавления второго блока местоположения, который вскоре последует ниже (ранее браузер был просто белым при посещении конечных точек API, потому что React Router пытался их захватить).

Вот как выглядит конфигурация, где находится порт 3000мое приложение React и 4000 - это мой сервер Express, оба управляются с помощью pm2:

server {
        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;
         server_name www.mywebsite.com; # managed by Certbot


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

        location /api/ {
                proxy_pass http://127.0.0.1:4000/;
                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;
        }

}

Простой маршрут Express, который не будет работать ("Cannot GET /"):

app.get('/', (req, res) => {
        res.send('Hello, world!');
});

Есть некоторые дополнительные вещи для certbot, которые были сгенерированы для SSL, но я не уверен, что это актуально. Приложение React работает отлично, но независимо от того, как я называю свои маршруты в Express, независимо от того, как они работали раньше, независимо от того, как я называю свои маршруты в Express, независимо от того, как они называются - «location / api /» против «location / api», они все не могут. Заранее благодарен за любые рекомендации!

РЕДАКТИРОВАТЬ: я изменил conf сервера на как минимум map / api / для корня моего сервера с обратной косой чертой, поэтому мне не нужно добавлять / api к каждому обработчику маршрута,но проблема все еще остается ("Cannot GET /").

1 Ответ

1 голос
/ 11 ноября 2019

Почему вы используете следующие заголовки?

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';

Вероятно, не требуется, если вы используете TLS / https, и это может вызвать проблемы с Express, если существует заголовок обновления. Попробуйте удалить это.

Эти заголовки обычно используются для WebSockets. См. документацию nginx для получения более подробной информации.

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