我在Vagrant虚拟机中在家中使用mattermost。通过我的DSL路由器上的端口转发,我使用固定IP在WAN vHost上的子域上映射Web前端。
<VirtualHost *:80>
ServerName chat.domain.tld
ServerSignature Off
ProxyPreserveHost On
<Location />
Order deny,allow
Allow from all
ProxyPassReverse http://chat.domain.tld/
</Location>
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule .* http://mappedsubdomain.somedyndns.tld:8090%{REQUEST_URI} [P,QSA]
DocumentRoot /somewhere/on/my/disk
</VirtualHost>
这很好用!在这种情况下,我将Web端口从端口8090映射到vHost子域上的端口80。并且Web-Frontend可以访问。
但是
mattermost正在使用另一个端口通过Websockets与Web-Frontend进行通信。为此,我还从我的本地机器转发了Websocket端口。如果我正在访问动态DNS主机URL:http://mappedsubdomain.somedyndns.tld:8090
,Web-Fontend与第二个打开的Websockets端口配合良好。 Mattermost可在动态DNS主机URL上使用。
由于默认的Mattermost使用端口80作为Websockets。但就我而言,我在Mattermost中使用端口890作为Websockets。它在本地,局域网内和动态DNS主机上运行。
现在,我想用Websocket协议制作一个ProxyReverse。
WAN-Host是Apache2.2和加载的mod_proxy_wstunnel
模块的Debian。
起初,我试图只是映射第二个端口:
Listen 890
<VirtualHost *:890>
ServerName chat.domain.tld
ServerSignature off
ProxyRequests off
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://mappedsubdomain.somedyndns.tld:890/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://mappedsubdomain.somedyndns.tld:890/$1 [P,L]
<Location />
Order deny,allow
Allow from all
ProxyPassReverse http://mappedsubdomain.somedyndns.tld:890/
ProxyPassReverse ws://mappedsubdomain.somedyndns.tld:890/
</Location>
DocumentRoot /somewhere/on/my/disk
</VirtualHost>
但没有。 Websockets无法正常工作。
然后我在运行NodeJS Websocket隧道的WAN vHost上尝试了它:
https://www.npmjs.com/package/wstunnel
通过此电话:
wstunnel -t 8091 ws://mappedsubdomain.somedyndns.tld:890/
并更改了虚拟主机配置:
RewriteRule /(.*) ws://localhost:8091/$1
RewriteRule /(.*) http://localhost:8091/$1 [P,L]
ProxyPassReverse ws://localhost:8091/
ProxyPassReverse http://localhost:8091/
当wstunnel
正在运行时,chat.domain.tld:890
上的http请求以超时结束。没有wstunnel
,我就得到了503。
有人给我一个有用的暗示吗?
答案 0 :(得分:0)