У меня на компьютере установлено два прокси-сервера nginx: один для развертывания SSL, а другой для проксирования для конкретного приложения (только второй контролируется версией). Когда у меня был только один прокси-сервер, я мог успешно подключаться к веб-сокетам, но после перехода на два все запросы на обновление веб-сокетов отвечают ошибкой 502 Bad Gateway. Я могу подтвердить, что обычные запросы http/https работают с моей настройкой двойного прокси. Вот мой текущий конфиг.
Прокси 1
сервер {
# конфигурация SSL
#
# слушать 443 ssl default_server;
# слушать [::]:443 ssl default_server;
#
# Примечание. Вы должны отключить gzip для трафика SSL.
# См.: https://bugs.debian.org/773332
#
# Прочтите ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
# См.: https://bugs.debian.org/765782
#
# Самоподписанные сертификаты, созданные пакетом ssl-cert
# Не используйте их на рабочем сервере!
#
# включить фрагменты/snakeoil.conf;
имя_сервера staging.ambitx.io;
место расположения / {
прокси_пасс http://127.0.0.1:81;
включить proxy_params;
}
слушать [::]:443 ssl ipv6only=on; # под управлением Certbot
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/staging.ambitx.io/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/staging.ambitx.io/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
сервер {
если ($ host = staging.ambitx.io) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80 default_server;
слушать [::]:80 default_server;
имя_сервера staging.ambitx.io;
вернуть 404; # под управлением Certbot
}
proxy_params
proxy_set_header Хост $http_host;
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 $ схема;
Прокси 2
(работает на докере с портом 81 на хост-компьютере, привязанным к порту 80 в контейнере)
резолвер 127.0.0.11 ipv6=выкл.;
сервер {
слушать 80;
слушать [::]:80;
место расположения / {
корень /var/www/staticfiles;
индекс index.html index.htm;
try_files $uri /index.html =404;
}
местоположение / ws {
доступ_лог выключен;
прокси_пароль http://wsserver;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
}
расположение /API {
прокси_пасс http://apserver;
}
}
Первоначально у меня были утверждения ниже в местоположение /ws
блок конфигурации Proxy 2...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Хост $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
но я удалил их, потому что они будут перезаписывать заголовки, установленные прокси-сервером 1.
Любые идеи? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.