Обратный прокси Nginx + перезапись URL + веб-сокеты

Я видел этот вопрос, но, похоже, у меня он не работает.

Текущая (рабочая) ситуация:

server {
    listen 443 ssl;

    server_name updates.example.com;
    ssl_certificate     fullchain.pem;
    ssl_certificate_key privkey.pem;

    location /update {
        proxy_pass              "http://localhost:5000";

        proxy_connect_timeout   60;
        proxy_read_timeout      60;
        proxy_send_timeout      60;
        proxy_intercept_errors  off;
        proxy_http_version      1.1;
        proxy_set_header        Host               $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  $scheme;
        proxy_set_header        X-Client-Subject   $ssl_client_s_dn;
        proxy_set_header        X-Client-Cert      $ssl_client_cert;
    }

    location / {
        proxy_pass              "http://localhost:5001";

        proxy_connect_timeout   60;
        proxy_read_timeout      60;
        proxy_send_timeout      60;
        proxy_intercept_errors  off;
        proxy_http_version      1.1;
        proxy_set_header        Host               $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  $scheme;
        proxy_set_header        Upgrade            $http_upgrade;
        proxy_set_header        Connection         "upgrade";
    }

}

Теперь я хотел добавить префикс местоположения в nginx перенаправляет, оставляя бэкэнд нетронутым.

Следуя приведенным выше ответам на вопрос, я попробовал что-то вроде строк:

    location /manage {
        proxy_pass              "http://localhost:5001/";

        proxy_connect_timeout   60;
        proxy_read_timeout      60;
        proxy_send_timeout      60;
        proxy_intercept_errors  off;
        proxy_http_version      1.1;
        proxy_set_header        Host               $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  $scheme;
        proxy_set_header        Upgrade            $http_upgrade;
        proxy_set_header        Connection         "upgrade";
    }

или:

    location /manage {
        rewrite                 /manage/(.*) /$1  break;
        proxy_pass              "http://localhost:5001";
        proxy_redirect          off;

        proxy_connect_timeout   60;
        proxy_read_timeout      60;
        proxy_send_timeout      60;
        proxy_intercept_errors  off;
        proxy_http_version      1.1;
        proxy_set_header        Host               $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  $scheme;
        proxy_set_header        Upgrade            $http_upgrade;
        proxy_set_header        Connection         "upgrade";
    }

На самом деле оба этих "типа" работают, поскольку отображается правильная страница, но оба не работают обновите его через websocket. Я не вижу ошибок в приложении, но все, что я делаю на странице, ничего не запускает в бэкэнд-приложении (приложение python RemI). Очевидно, соединение через веб-сокет не переносится правильно.

Что мне не хватает?

1
задан 28 September 2020 в 13:41
1 ответ

Эта форма работала у меня с веб-сокетами (без кавычек):

location /alternate/primus/ {
    proxy_pass                  http://servername/primus/;
    proxy_http_version          1.1;
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";
}
0
ответ дан 7 October 2020 в 21:09

Теги

Похожие вопросы