У меня немного уникальная проблема.У меня есть веб-сайт, размещенный на сервере Apache, и мне нужны клиенты для связи с другим приложением через wss и https, вызовы этого второго приложения передаются через nginx.
Мой вызов apache proxy.conf примерно такой
RewriteEngine On
#SSL Proxy
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
#https
RewriteRule ^/https/api/(.*) https://nginx.mydomain.com/api/$1 [P]
ProxyPassReverse /https/api/ https://nginx.mydomain.com/api/
<IfModule mod_proxy_wstunnel.c>
ProxyPass /wss/socket/ wss://nginx.mydomain.com/socket/
ProxyPassReverse /wss/socket/ wss://nginx.mydomain.com/socket/
</IfModule>
И тогда у меня есть конфигурация nginx на nginx.mydomain.com
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /api {
return 302 /api/;
}
location /api/ {
proxy_pass http://127.0.0.1:4283/;
client_max_body_size 5m;
}
location /socket/ {
proxy_pass http://127.0.0.1:4284/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
add_header X-Frame-Options deny;
add_header "X-XSS-Protection" "1; mode=block";
add_header X-Content-Type-Options nosniff;
server_tokens off;
}
Допустим, я звоню на https://apache.mydomain.com/http/api/example
, затем вызов проксируется на https://nginx.mydomain.com/api/example
, как и ожидалось,Из моего браузера new Websocket("wss://nginx.mydomain.com/socket/");
отлично работает.однако при вызове wss://apache.mydomain.com/socket/
получается 503. Обратите внимание, я знаю, что http://*.mydomain.com
вернет 503, если к поддомену не приложено приложение.
Я также пробовал этот скрипт
curl --include \
--no-buffer \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--insecure \
https://nginx.mydomain.com/socket/
Что приводит к следующему сообщению от nginx
HTTP/1.1 404 WebSocket Upgrade Failure
Date: Wed, 27 Feb 2019 20:19:27 GMT
Content-Type: text/html
Content-Length: 77
Connection: close
Server: nginx
<html><head></head><body><h1>404 WebSocket Upgrade Failure</h1></body></html>
И все же из браузера, вызывающего wss://nginx.mydomain.com/socket/
, открывается сокет без проблем.Я понятия не имею, где проблема может лежать.Если nginx проксирует, запросы к nginx через Apache должны быть простыми.Кто-нибудь замечает некоторые проблемы с этой конфигурацией или подходом?