Des*_*ond 2 apache node.js socket.io
我正在尝试在 Apache 后面运行 NodeJS,但到目前为止我遇到了 Socket.io 问题。
\n\n我直接访问应用程序没有问题,但每当我通过我的域访问时,我都会从 socket.io 抛出此错误:
\n\nFirefox can\xe2\x80\x99t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB.\n
Run Code Online (Sandbox Code Playgroud)\n\n我的Apache配置如下:
\n\n <VirtualHost _default_:443>\n ServerName example.com\n\n ErrorLog ${APACHE_LOG_DIR}/error.log\n CustomLog ${APACHE_LOG_DIR}/access.log combined\n\n SSLEngine on\n\n SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt\n SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key\n\n\n ProxyRequests off\n ProxyVia on\n\n RewriteEngine On\n RewriteCond %{REQUEST_URI} ^/socket.io [NC]\n RewriteCond %{QUERY_STRING} transport=websocket [NC]\n RewriteRule /(.*) ws://localhost:8080/$1 [P,L]\n\n ProxyPass /socket.io http://localhost:8080/socket.io\n ProxyPassReverse /socket.io http://localhost:8080/socket.io\n\n <Location />\n ProxyPass http://127.0.0.1:8080/\n ProxyPassReverse http://127.0.0.1:8080/\n </Location>\n #ProxyPass / http://localhost:8080/\n #ProxyPassReverse / http://localhost:8080/\n\n # BrowserMatch "MSIE [2-6]" \\\n # nokeepalive ssl-unclean-shutdown \\\n # downgrade-1.0 force-response-1.0\n\n BrowserMatch "MSIE [2-6]" \\\n nokeepalive ssl-unclean-shutdown \\\n downgrade-1.0 force-response-1.0\n\n </VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n\n我也尝试过更改RewriteRule /(.*)
为wss://localhost:8080/$1 [P,L]
但仍然抛出相同的错误。似乎找不到任何其他答案来解决这个问题。
我相信我正在使用 socket.io 2.0,并且在客户端它是这样连接的:
\n\nvar socket = io();\n
Run Code Online (Sandbox Code Playgroud)\n\n这就是让我烦恼的地方
\n\n\n\n似乎有些连接正在建立,但有一个却没有。
\n小智 9
考虑在 Apache 中设置连接升级。这就是我配置 nginx 所需要的。此外,这些 http 请求可能是为客户端文件提供服务的 socketio。
另请参阅:http://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
编辑:
通过传递 ws/wss 代理解决了该问题,如 mod_proxy_wstunnel 中所述。apache 虚拟主机配置应该有这样的:
ProxyPass /socket.io/ ws://localhost:8080/socket.io
ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io
Run Code Online (Sandbox Code Playgroud)
而不是这个:
ProxyPass /socket.io http://localhost:8080/socket.io
ProxyPassReverse /socket.io http://localhost:8080/socket.io
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14407 次 |
最近记录: |