Прокси-соединение через WebSocket (wss) с использованием apache для дальнейшего прокси nginx - PullRequest
0 голосов
/ 27 февраля 2019

У меня немного уникальная проблема.У меня есть веб-сайт, размещенный на сервере 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 должны быть простыми.Кто-нибудь замечает некоторые проблемы с этой конфигурацией или подходом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...