ws 协议和 apache mod_proxy_wstunnel 配置:错误 500

ws 协议和 apache mod_proxy_wstunnel 配置:错误 500

当我尝试通过 Apache2 服务器访问 ws://localhost:8080/ 时,出现了错误 500。此服务器运行 OpenSuse Leap 42.1 和 Apache 2.4.16。

这些 Apache2 模块已启用:mod_proxy、mod_proxy_http、mod_proxy_wstunnel。

当从本地网络调用请求时,一切正常。URL 示例:http://<myhost-ip-address>/api/ws/<some-url>。它返回状态 101 和响应:Upgrade: websocket。没问题。

来自外部网络的同类请求失败。URL 示例:ws://www.mysite.com/api/ws/<some-url>。它返回错误 500。

Apache 访问日志包含:GET /api/ws/<some-url> HTTP/1.1" 500 ...

Apache 错误日志包含:[proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

我的httpd.conf:

<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/api/ws/(.*)           [NC]
RewriteCond %{QUERY_STRING} transport=websocket     [NC]
RewriteRule /(.*)           ws://localhost:8080/$1  [P,L]
# Proxy pass
ProxyPass           /api/ws/            ws://localhost:8080/api/ws/
ProxyPassReverse    /api/ws/            ws://localhost:8080/api/ws/
# DocumentRoot
DocumentRoot /srv/www/vhosts/mysite.com
<Directory "/srv/www/vhosts/mysite.com">
    Options Indexes SymLinksIfOwnerMatch
    AllowOverride None
    ...
</Directory>
# URL as parameter
AllowEncodedSlashes NoDecode

我遵循了这些先前的答案(感谢这一点):网络套接字节点.jssocket-io,但没有运气。

我的配置一定有问题。有什么想法吗?

答案1

看起来您缺少 Websockets 支持所需的 mod_proxy_wstunnel 模块。

它应该像下面一样在您的 httpd.conf 中启用

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

安装模块然后它就应该正常工作。

相关内容