WebSocket возвращает 200 вместо 101 с Apache2: как правильно настроить прокси для работы с WebSocket?

Я пытаюсь настроить Apache2 на проксирование WebSocket-трафика для своего приложения, но сталкиваюсь с проблемой, когда WebSocket-соединение возвращает статус 200 вместо ожидаемого кода состояния 101. У меня следующая конфигурация в файле default-ssl.conf для SSL и WebSocket proxy:

ServerName <domain>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
    DocumentRoot /home/root/app

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    
    # WebSocket upgrade headers
    SetEnvIf Request_URI "^/ws" upgrade_connection
    RequestHeader set Connection "Upgrade" env=upgrade_connection
    RequestHeader set Upgrade "websocket" env=upgrade_connection

    # Proxy to WebSocket server
    ProxyPreserveHost On
    ProxyPass /wss/ wss://127.0.0.1:8080/
    ProxyPassReverse /wss/ wss://127.0.0.1:8080/

    # Proxy WebSocket traffic to Daphne (ASGI)
    RewriteEngine On
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://127.0.0.1:8080%{REQUEST_URI} [P,QSA,L]

    # Proxy settings
    ProxyRequests on
    ProxyPass / http://<ip>:8000/
    ProxyPassReverse / http://<ip>:8000/
</VirtualHost>

Несмотря на эту конфигурацию, соединение WebSocket возвращает статус HTTP 200 вместо ожидаемого рукопожатия WebSocket (101). Что может быть причиной этой проблемы и как ее решить?

Вернуться на верх