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). Что может быть причиной этой проблемы и как ее решить?