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