[英]Websocket returns 200 instead of 101 by Apache Server
我正在嘗試使用mod_proxy和mod_proxy_wstunnel模塊將流量從Apache重定向到CentOs服務器上的Tomcat。 HTTP流量可以順利重定向,但是到目前為止,我無法使用任何配置成功重定向Websocket流量。 它給我200個響應代碼,而不是101個。
我已經閱讀了很多類似的問題,但是還沒有找到任何解決方案。 這些有類似的問題。 問題1 , 問題2
我正在使用Apache Server 2.4.6-> Apache Tomcat 7.0.92->具有Spring和javax套接字實現的Java應用程序。
這是我的模塊:
這是我的httpd配置:
<VirtualHost *:80>
ServerName domain.com
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"$
CustomLog /var/log/httpd/log_access.log combined
ErrorLog /var/log/httpd/log_error.log
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
RewriteEngine On
#RewriteCond %{HTTP:Connection} Upgrade [NC]
#RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /app-api/chat/user/(.*) ws://127.0.0.1:8080/app-api/chat/user/$1 [P,L]
ProxyPass /app-api http://127.0.0.1:8080/ retry=1 acquire=3000
ProxyPassReverse /app-api http://127.0.0.1:8080/
DocumentRoot /var/www/html
如果我直接在本地計算機上使用connect to Apache Tomcat-一切都很好,它將返回101,但不在遠程。
為什么我得到200條回復? 這個配置有什么問題?
我已經嘗試了很多實現,但是仍然可以從服務器獲得200響應,而不是升級到101。
最后,我做到了。
就我而言,無需放置RewriteConds和RewriteRules。 所需要的只是通過添加到httpd.conf中來將請求代理到實際后端(Apache Tomcat)
ProxyPass /api/chat/user/ ws://127.0.0.1:8080/chat/user/
ProxyPassReverse /api/chat/user/ ws://127.0.0.1:8080/chat/user/
另外,必須啟用mod_proxy_wstunnel。
僅從官方文檔獲得此配置。 以防萬一: mod_proxy_wstunnel
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.