Обратный прокси-сервер Nginx PM2 NodeJS с SSL дает HTTP 504

Однажды хорошее время, у меня был хороший конфиг для трех NodeJs , socket.io API, работающий на том же сервере Ubuntu 16.4 LTS VPS с PM2 для управления процессами и Nginx для обратного прокси для трех разных поддомены.

Я успешно установил сертификат SSL от . Давайте зашифруем , и все поддомены принадлежат одному домену (скажем, instance.com) и должны быть перенаправлены на https .

Как только я попытался добавить четвертый поддомен для приложения, отличного от NodeJs (PHP / laravel), обратный прокси-сервер больше не передается, и, к сожалению, у меня нет резервной копии моей старой конфигурации Nginx.

Теперь я пытаюсь вернуть свой VPS в гармонию с тремя старыми приложениями NodeJs, но это дает мне 504 тайм-аута шлюза от Nginx .

Вот это моя конфигурация, как мне кажется, такая же старая:

Эта конфигурация отлично работает в Chrome, но я пытаюсь получить доступ к своим API из мобильных и настольных приложений.

  # HTTP — redirect all traffic to HTTPS
  server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;
    return 301 https://$host$request_uri;
  }

  # App1 from port 3000 to sub1.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub1.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub1.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub1.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:3000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
  }
  }

  # App2 from port 4000 to sub2.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub2.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub2.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub2.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:4000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }

  # App2 from port 5000 to sub3.exemple.com
  server {
    # Enable HTTP/2
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub3.exemple.com;

    # Use the Let’s Encrypt certificates
    ssl_certificate
    /etc/letsencrypt/live/sub3.exemple.com/fullchain.pem;
    ssl_certificate_key
    /etc/letsencrypt/live/sub3.exemple.com/privkey.pem;

    # Include the SSL configuration from cipherli.st
    include snippets/ssl-params.conf;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;
      proxy_ssl_session_reuse off;
      proxy_set_header Host $http_host;
      proxy_cache_bypass $http_upgrade;

      proxy_pass http://localhost:5000/;
      proxy_redirect off;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }

Обновить для получения дополнительной информации

Nginx, NodeJs и PM2 не выдают ошибок. журналы чистые. Вот что я получаю при проверке запросов.

Успешно выполняется при запросе сокета: (Оба wss: // и https: // )

WSS succeed

Не удается, когда другие запрашивают :

HTTP/S fail

Я также хочу отметить, что SSL хорошо установлен для каждого подчиненного сервера, а приложения стабильны и работают на локальном сервере без каких-либо проблем.

0
задан 11 December 2018 в 19:30
2 ответа

Я выяснил проблему, и ее не было в не в Nginx , не в PM2 , не в Nodejs ни в SSL , все это в приложениях, которые я развернул. Проблема в процессе Mongodb заставила его не запускаться автоматически . Итак, приложение принимает первый запрос, потому что ему не требуется вмешательство в базу данных, и отклоняет запрос входа в систему после тайм-аута, потому что приложение уже аварийно завершено, но PM2 перезапускает его, а Nginx сохраняет поддомен открытым для запросов.

FF: Так что, если вы пройдете здесь, вам, вероятно, придется проверить свое приложение env. пример: SGBD, разрешение на чтение / запись, API ...

Надеюсь, это поможет любому, у кого есть подобная проблема.

0
ответ дан 4 December 2019 в 15:48

Попробуйте добавить proxy_set_header X-Forwarded-Proto $scheme; . внутренний блок

1
ответ дан 4 December 2019 в 15:48

Теги

Похожие вопросы