Назад | Перейти на главную страницу

Обратные прокси nginx с отдельным завершением SSL и веб-сокетами

Я пытаюсь подключить прокси. Первый для 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;
    }
}

Будут ли у него побочные эффекты?