Я пытаюсь подключить прокси. Первый для SSL, следующий - для отправки на серверы.
Первый (secure-gateway-nginx
) просто разворачивает SSL и передает gateway-nginx
:
server {
listen 443 ssl;
server_name secure-gateway-nginx;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass http://gateway-nginx.default.svc.cluster.local/;
}
}
Второй (gateway-nginx
) отправляет в central-broker-mqtt
и app
серверы:
server {
listen 80;
server_name gateway-nginx;
location /mqtt {
proxy_pass http://central-broker-mqtt.default.svc.cluster.local/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1;
}
location /app {
proxy_pass http://app.default.svc.cluster.local/;
}
}
Проблема в том, что веб-сокеты для mqtt не работают. В proxy_set_header Upgrade $http_upgrade;
строка бессмысленна, так как $http_upgrade
получается пустой например.
Прямая отправка от завершения SSL к mqtt работает нормально:
server {
listen 443 ssl;
server_name secure-gateway-nginx;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location /mqtt {
proxy_pass http://central-broker-mqtt.default.svc.cluster.local/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1;
}
location / {
proxy_pass http://gateway-nginx.default.svc.cluster.local/;
}
}
Но я бы хотел сохранить nginx, который поддерживает SSL только для SSL. Как это сделать?
РЕДАКТИРОВАТЬ:
Кажется, это работает:
server {
listen 443 ssl;
server_name secure-gateway-nginx;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
proxy_pass http://gateway-nginx.default.svc.cluster.local/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1;
}
}
Будут ли у него побочные эффекты?