Итак, у меня была исправлена моя последняя проблема с "обратным прокси", связанная с "отображением" порта во вложенную папку. Еще раз спасибо этому замечательному сообществу.
Некоторое время я работал с этим решением, но теперь я столкнулся с новой проблемой. Ситуация такова:
Настроена веб-страница (с использованием 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;