如何为Websockets SSL(wss)正确配置Apache2?

epggiuax  于 2023-01-17  发布在  Apache
关注(0)|答案(1)|浏览(333)

我有一个应用程序和soketi.appWeb服务器托管在AWS中。应用程序在负载平衡器后面提供服务。我可以很好地访问应用程序(443流量被转发到端口8788上的示例)。我通过WSS(SSL)协议与soketi服务器通信时遇到问题,错误为:无法连接到网站mydomain.com/6001/app/blahblah
我的目标是将Apache配置为WebSocket代理,而不是在浏览器和websocket服务器之间建立SSL连接。
Apache 2000-默认.conf(已安装并启用必要的apache mods):

<VirtualHost *:8788>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/public/
       <Directory />
           Options FollowSymLinks
           AllowOverride None
       </Directory>
       <Directory /var/www/public/>
            Options All
            AllowOverride All
            order allow,deny
            allow from all
        </Directory>
       ErrorLog /var/log/apache2/error.log

       LogLevel warn
</VirtualHost>

<VirtualHost *:6001>
ProxyPass /app ws://127.0.0.1:6001/app
ProxyPassReverse /app ws://127.0.0.1:6001/app
</VirtualHost>

安全配置json

{
    "debug": true,
    "appManager.array.apps": [
        {
            "id": "blah",
            "key": "blah",
            "secret": "blah"
        }
    ]
}
mo49yndu

mo49yndu1#

解决方案归结为两件事:

  • 我在云中托管的WebSocket服务器(soketi.app)默认使用端口6001,这个端口实际上被另一个名为X11的应用程序使用(相当长的一段时间),简单地更改端口是配置的问题。
  • 基本思想是不直接在浏览器和WebSocket服务器之间建立SSL连接,而是使用Apache作为代理。这也可以用nginx完成,但我使用的是apache。

我的应用程序在云中由两个容器组成,它们位于负载平衡器后面。应用程序容器使用端口8788。Websockets容器使用端口56112。

端口配置文件

Listen 8788
Listen 56112

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

000-默认.conf文件

将WebSocket(wss)请求代理到端口56113上本地运行的websocket服务器(ws)

<VirtualHost *:8788>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/public/
       <Directory />
           Options FollowSymLinks
           AllowOverride None
       </Directory>
       <Directory /var/www/public/>
            Options All
            AllowOverride All
            order allow,deny
            allow from all
        </Directory>
       ErrorLog /var/log/apache2/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       # CustomLog /var/log/apache2/rest-api.log combined
</VirtualHost>

<VirtualHost *:56112>
  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /etc/ssl/certs/blah.crt
  SSLCertificateKeyFile /etc/ssl/certs/blah.key
  SSLCertificateChainFile /etc/ssl/certs/chain.crt

  ProxyRequests on
  RequestHeader set X-Forwarded-Proto "http"
  ProxyPass /app http://localhost:56112/
  ProxyPassReverse /app http://localhost:56112/

  RewriteEngine on
  RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
  RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
  RewriteRule .* ws://localhost:56113%{REQUEST_URI} [P]
</VirtualHost>

相关问题