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?

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

Патрик

3
задан 6 August 2016 в 23:04
1 ответ

У меня была такая настройка для доступа к двум серверам за обратным прокси, я полагаю, ваша директива 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;
0
ответ дан 3 December 2019 в 08:01

Теги

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