Какова правильная конфигурация Apache для Python Socket.IO с socket.io-client? Сервер излучает клиентам. Обратный прокси?

Стек приложений:

  • AWS Elastic Beanstalk (Amazon Linux 2)
  • Питон 3.8
  • Flask-SocketIO 5.2.0
  • Procfile с web:gunicorn --worker-class eventlet -w 1 squiggy:application(«squiggy» — это название приложения)
  • Внешний интерфейс: Vue.js v2.6, socket.io-client v4.5.1
  • Апачи

Ошибка, которую я вижу в консоли клиента:

      err: Error: websocket error
 at h.onError (https://app3-dev.ets-berkeley-suitec.net/static/js/chunk-vendors.9d4cbd19.js:95:119454) 
 at WebSocket.ws.onerror (https://app3-dev.ets-berkeley-suitec.net/static/js/chunk-vendors.9d4cbd19.js:53:3346)
    context: undefined
    description: Event
    isTrusted: true
    bubbles: false
    cancelBubble: false
    cancelable: false
    composed: false
    currentTarget: WebSocket {url: 'wss://app3-dev.ets-berkeley-suitec.net/socket.io/?whiteboardId=355&EIO=4&transport=websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
    defaultPrevented: false
    eventPhase: 2
    path: []
    returnValue: true
    srcElement: WebSocket {url: 'wss://app3-dev.ets-berkeley-suitec.net/socket.io/?whiteboardId=355&EIO=4&transport=websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
    target: WebSocket {url: 'wss://app3-dev.ets-berkeley-suitec.net/socket.io/?whiteboardId=355&EIO=4&transport=websocket', readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, …}
    timeStamp: 559404.1000000015
    type: "error"
Event
type: "TransportError"
message: "websocket error"
stack: "Error: websocket error
    at h.onError (https://app3-dev.ets-berkeley-suitec.net/static/js/chunk-vendors.9d4cbd19.js:95:119454)
    at WebSocket.ws.onerror (https://app3-dev.ets-berkeley-suitec.net/static/js/chunk-vendors.9d4cbd19.js:53:3346)"

Пример из Apache access_log:

       "GET /socket.io/?whiteboardId=355&EIO=4&transport=websocket HTTP/1.1" 400 27 "-" 
 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) 
 Chrome/101.0.0.0 Safari/537.36"

Ошибка Python на стороне сервера:

      Invalid websocket upgrade [in /var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/engineio/server.py:747]

Соответствующий фрагмент конфигурации Apache:

        <VirtualHost *:443>
    <IfModule !proxy_module>
      LoadModule proxy_module /etc/httpd/modules/mod_proxy.so
    </IfModule>
    <IfModule !proxy_wstunnel_module>
      LoadModule proxy_wstunnel_module /etc/httpd/modules/mod_proxy_wstunnel.so
    </IfModule>

    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>

    Header set Access-Control-Allow-Origin "*"

    # Required for socket.io's polling transport
    RewriteEngine on
    RewriteCond %{QUERY_STRING}        transport=websocket
    RewriteRule /(.*)$                 ws://localhost:8000/$1 [P]

    # Proxy websocket connections
    ProxyPass         /socket.io/   ws://localhost:8000/socket.io/dist/
    ProxyPassReverse  /socket.io/   ws://localhost:8000/socket.io/dist/

    ProxyPass / http://localhost:80/ retry=0
    ProxyPassReverse / http://localhost:80/
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto "https" early
  </VirtualHost>

Что не так с конфигурацией Apache? Нужна ли мне другая настройка ProxyPassReverse? Как мне учитывать протокол «wss»?

Благодарю вас!

0 ответов

Другие вопросы по тегам