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

nginx proxy_pass два порта во вложенные папки

Итак, у меня была исправлена ​​моя последняя проблема с «обратным прокси» относительно «сопоставления» порта с подпапкой. Еще раз спасибо этому замечательному сообществу.

Некоторое время мне удавалось работать с этим решением, но теперь я столкнулся с новой проблемой. Ситуация такая:

Существует настройка веб-страницы (с использованием nginx) с этим URL-адресом http://test.domain.com:8042/view.html. Мне нужно было по разным причинам, чтобы этот порт превратился в подпапку, и я добился этого (с помощью) и получил http://test.domain.com/view/view.html.

Proxy_pass для этого:

location ~/view(.*)$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_pass http://test.domain.com:8042$1;

Это прекрасно работает. Я могу получить доступ к странице http://test.domain.com/view/view.html. На этой странице есть несколько веб-сокетов, у одного также есть порт 8042. Этот отлично работает. Однако у других веб-сокетов разные порты, например 8159. Я добавил соответствующий proxy_pass в конфигурацию nginx:

location ~/cantrace(.*)$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_pass http://test.domain.com:8159$1;

Из Javascript этот веб-сокет вызывается через

my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws');

но это не работает. Также не делает

my_websocket = new WebSocket('ws://test.domain.com/view/cantrace/ws');

Что действительно работает, так это

http://test.domain.com:8042/view.html

а затем загружает другие веб-узлы на view.html с помощью

my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws');

который раньше не работал.

Итак, очевидно, что двойной proxy_pass с / view и / cantrace является здесь проблемой. Есть ли способ обойти это с помощью nginx?

Большое спасибо!

Патрик

У меня была такая настройка для доступа к двум серверам за обратным прокси, я считаю, что вы proxy_passs в директиве отсутствует завершающий /, это была моя установка:

       location /server1 {
               proxy_pass http://server1:8081/;
               proxy_buffering off;
       }
       location /server2 {
               proxy_pass http://server2:8082/;
               proxy_buffering off;
       }

В вашем случае это будет означать:

proxy_pass http://test.domain.com:8042/$1;