APACHE 反向代理中的 Web 套接字
Posted
技术标签:
【中文标题】APACHE 反向代理中的 Web 套接字【英文标题】:Web Socket in APACHE Reverse Proxy 【发布时间】:2020-08-05 15:12:51 【问题描述】:我在后面运行两台服务器和 AEBS 基站。 Server1 运行 10.12.6 和 Server 5.3.1 并使用 webapps 执行反向代理,如前体.ca 教程中所述。 这使我只有一个外部 IP 地址,其中 server1.mydomain 和 server2.mydomain 在内部进行分发。 这工作正常.. 但在 server2 上我运行 Filemaker Webdirect,它使用 Web 套接字。所以我在浏览器中得到一个 wss:// 错误。 我写的网络应用程序;
来自http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
RewriteEngine On
RewriteCond %HTTPS =off
RewriteRule . - [E=protocol:http,E=port:80]
RewriteCond %HTTPS =on
RewriteRule . - [E=protocol:https,E=port:443]
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPreserveHost On
ProxyPassReverse / http://1.2.3.4:443/
ProxyPass / http://1.2.3.4:443/
ServerName filemaker.precursor.ca
显然把我自己的server2的IP地址和它的名字..
但是 web 套接字 wss://server2.mydomain 不起作用.. 并且 web 直接失败。
我可以登录,但是一旦我打开一个 wss 连接,它就不再工作了。 .这是一个apache mod_proxy错误..
在我阅读的 apache 错误日志中 [Sun Apr 19 21:58:04.846046 2020] [proxy_http:error] [pid 598] (70008)部分结果有效但处理不完整:[client 189.62.112.162:49213] AH01110: error reading response
在我阅读的浏览器中
WebSocket connection to 'wss://fmserver.embatek.com.br/fmi/webd/PUSH?v-uiId=1&v-pushId=341172cf-5d45-454d-972e-3029de5807fa&X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=2.3.2.vaadin1-javascript&X-Atmosphere-Transport=websocket&X-Atmosphere-TrackMessageSize=true&Content-Type=application/json;%20charset=UTF-8&X-atmo-protocol=true' failed: Unexpected response code: 500
关于在哪里摆弄的任何提示。 你的 皮埃尔
【问题讨论】:
【参考方案1】:时间久了,可能已经解决了。
我刚刚遇到了同样的问题。我在我的环境中使用了 nginx,但是通过将以下值传递给服务器来解决它。
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
nginx中的最终代码如下
upstream filemakerserver-webdirect-upstream
server xxxxxx.xxx:443;
server
listen 80;
server_name yyyyyy.yyy;
if ($host = yyyyyy.yyy)
return 301 https://$host$request_uri;
return 404;
server
listen 443 http2 ssl;
server_name yyyyyy.yyy;
location /
try_files $uri @filemakerserver-webdirect-upstream;
location @filemakerserver-webdirect-upstream
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
proxy_pass https://branch-office;
ssl_certificate /etc/letsencrypt/live/yyyyyy.yyy/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yyyyyy.yyy/privkey.pem;
以下是我用日语写的一篇文章。
https://qiita.com/Hi_Noguchi/items/82bc17913b646bd6583f
我希望这对 apache 环境有所帮助。
【讨论】:
【参考方案2】:我使用的是 apache,并且安全连接在代理处停止,所以我想如果您的 FileMaker 服务器使用的是安全连接。 10.1.2.3 是 FileMaker 服务器的内部地址。这里可能有一些多余的东西,但它有效
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName my.external.server.name
RewriteEngine on
RewriteCond $HTTP:Upgrade websocket [NC]
RewriteCond $HTTP:Connection upgrade [NC]
RewriteRule /(.*) "ws://10.1.2.3:80/$1" [P,L]
# <Location />
ProxyPreserveHost On
ProxyPass "/fmi/webd/PUSH" "ws://10.1.2.3:80/fmi/webd/PUSH"
ProxyPassReverse "/fmi/webd/PUSH" "ws://10.1.2.3:80/fmi/webd/PUSH"
ProxyPass / http://10.1.2.3:80/
ProxyPassReverse / http://10.1.2.3:80/
# Order allow,deny
# Allow from all
# </Location>
SSLCertificateFile /etc/letsencrypt/live/my.external.server.name/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.external.server.name/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/my.external.server.name/chain.pem
</VirtualHost>
</IfModule>
【讨论】:
以上是关于APACHE 反向代理中的 Web 套接字的主要内容,如果未能解决你的问题,请参考以下文章