У меня есть браузер и сервер на ip-адресе a.b.c.d. Теперь у меня есть 2 возможных URL-адреса для сервера:
Через Nginx из браузера
browser -> https://a.b.c.d/ -> server
Через WSS из javascript
browser -> wss://a.b.c.d:10062 -> server
Итак, список серверов на 443 (nginx) и некоторых других приложений на 10062. Я хочу изменить второе соединение на тот же порт (443):
browser -> wss://a.b.c.d/someurl -> server
Итак, возможно ли прокси в nginx на a.b.c.d: 10062, примерно так:
server {
listen 80;
listen 443 ssl;
ssl_certificate /path/to/crt/for/https;
ssl_certificate_key /path/to/key/for/https;
server_name a.b.c.d;
location /someurl {
-->> What to write here to create redirect for wss://a.b.c.d:10062 ? << --
}
# the other locations here ('/', etc)
# ...
# ...
}
Я попробовал следующее:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location /someurl {
proxy_pass http://127.0.0.1:10062;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Но когда идти в https: //a.b.c.d/someurl для теста это показывает
2015/12/14 16:12:51 [error] 371#0: *113 connect() failed (111: Connection refused)
while connecting to upstream, client: my_ip, server: a.b.c.d, request: "GET /someurl HTTP/1.1",
upstream: "http://127.0.0.1:10062/someurl", host: "a.b.c.d"
НО !: Netstat показывает это:
sudo netstat -tnlp | grep :10062
tcp 0 0 a.b.c.d:10062 0.0.0.0:* LISTEN 5702/webrtc2sip
Кажется, мне нужно указать a.b.c.d вместо 127.0.0.1, поэтому я попробовал
location /someurl {
proxy_pass http://a.b.c.d:10062;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Результат:
2015/12/14 16:54:11 [error] 13189#0: *123 recv() failed (104: Connection reset by peer)
while reading response header from upstream,
client: my_ip, server: a.b.c.d, request: "GET /someurl HTTP/1.1", upstream: "http://a.b.c.d:10062/someurl", host: "a.b.c.d"
Хорошо. Я транслировал someurl при переходе на прокси:
location = /someurl {
return 302 /someurl/;
}
location /someurl/ {
proxy_pass http://a.b.c.d:10062/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Теперь, когда я иду в https: //a.b.c.d/someurl или https: //a.b.c.d/someurl/, это показывает:
2015/12/14 17:14:45 [error] 15836#0: *70 recv() failed (104: Connection reset by peer)
while reading response header from upstream, client: my_ip, server: a.b.c.d, request: "GET /someurl/ HTTP/1.1", upstream: "http://a.b.c.d:10062/", host: "a.b.c.d"
Почему это отображается в апстриме: "http: //a.b.c.d: 10062 /"? Разве не должно отображаться" wss: //a.b.c.d: 10062 / "?
Чтобы ответить на ваш вопрос:
"Почему это отображается вверх по течению:"http: //a.b.c.d: 10062 /"? Разве не должно отображаться" wss: //a.b.c.d: 10062 / "?"
Nginx отображает URI таким образом, потому что именно так он указан в конфигурации:
proxy_pass http://a.b.c.d:10062;
Я не думаю, что эта деталь является индикатором вашей проблемы, поскольку кажется, что вы следовали рекомендуемый синтаксис для использования Nginx в качестве прокси WebSocket.