Давным-давно у меня был хороший конфиг на троих NodeJs, socket.io API работает на том же Ubuntu 16.4 LTS VPS сервер с PM2 для управления процессами и Nginx для обратного прокси на три разных поддомена.
Я успешно установил SSL свидетельство от Давайте зашифровать и все поддомены из одного домена (скажем, example.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://
)
Он терпит неудачу, когда другие запрашивают:
Я также хочу отметить, что SSL хорошо установлен для каждого суб, а приложения стабильны и работают на локальном сервере без каких-либо проблем.
Попробуй добавить proxy_set_header X-Forwarded-Proto $scheme;
блок внутренней локации
Я понял проблему, и ее не было в не Nginx, не PM2, не Nodejs ни в SSL, это все в развернутых мною приложениях. Проблема в Mongodb обработать сделать его не запускается автоматически. Итак, приложение принимает первый запрос, потому что ему не требуется вмешательство в базу данных, и отклоняет запрос на вход после тайм-аута, потому что приложение уже аварийно завершено, но PM2 перезапускает его, а Nginx сохраняет поддомен открытым для запросов.
FF: Так что, если вы пройдете здесь, вам, вероятно, нужно проверить свое приложение env. например: SGBD, разрешение на чтение / запись, API ...
Надеюсь, это поможет кому-нибудь с подобной проблемой.