У меня есть цифровая океаническая капля, работающая под управлением Ubuntu 18.04, а внутри находится контейнер lx c. У меня есть два приложения в этом контейнере.
Первое приложение (клиент) находится на /var/www/html
, а второе - NodeJS приложение на /var/www/my-site/
. Приложение Node внутри контейнера управляется pm2, и до сих пор все работает нормально, потому что, когда я набираю curl http://localhost:3000
на терминале контейнера, я получаю желаемый результат.
Внутри основной капли ( не контейнер) под /etc/nginx/sites-available
, у меня есть следующие два серверных блока - default
и my-site
.
Первое приложение работает нормально, когда я пытаюсь получить к нему доступ через браузер через мой домен, но NodeJS приложение возвращает 502 Bad Gateway
, когда я пытаюсь получить к нему доступ через sub.mydomain.com
. pm2 start
внутри контейнера говорит мне, что статус приложения узла - online
.
Вот мой default
файл блока сервера. Это работает. Когда я захожу на mydomain.com, мой сайт отображается нормально.
# HTTP — redirect all traffic to HTTPS
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}
server {
# Enable HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mydomain.com;
# Use the Let’s Encrypt certificates
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
# Include the SSL configuration from cipherli.st
include snippets/ssl-params.conf;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://container_ip_address /;
}
}
Теперь вот другой блок сервера - my-site
.
# Upstream config
upstream site_upstream {
server 127.0.0.1:3000;
keepalive 64;
}
server {
# Enable HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name sub.mydomain.com www.sub.mydomain.com;
root /var/www/my-site;
# Use the Let’s Encrypt certificates
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.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-NginX-Proxy true;
proxy_pass http://site_upstream;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
Я установил запись A для мой поддомен в настройках DNS моего домена, на IP-адрес моей дроплеты, и я также создал символическую c ссылку на /etc/nginx/sites-enabled
для my-site
блока сервера.
Я искал inte rnet для решения этой проблемы, но, похоже, ничего не работает. Чего мне не хватает?
Ваша помощь будет принята с благодарностью. Спасибо.