WebSocket 通过 Apache 反向代理连接到 Docker 容器问题

问题描述 投票:0回答:1

我在通过 Apache 反向代理与 Docker 容器内运行的 WebSocket 服务器建立 WebSocket 连接时遇到困难。这是场景:

  • WebSocket 服务器:WebSocket 服务器托管在 Docker 容器内。
  • Docker 容器配置:Docker 容器中的 WebSocket 服务器被配置为侦听特定路径上的 WebSocket 连接,例如
    /ws/chat/1694406657943/
  • Apache反向代理:我已将Apache配置为反向代理,将WebSocket请求转发到Docker容器内的WebSocket服务器。 问题: 当尝试连接到 ws://abc.com/ws/chat/1694406657943/ 时,我遇到错误消息“WebSocket 连接失败。”

我已经尝试过:

  • 确认 Docker 容器内的 WebSocket 服务器正在运行并正确配置为处理指定路径上的 WebSocket 连接。
  • 检查了Apache错误日志,但找不到任何相关的错误或警告。
  • 确保Docker容器的端口正确暴露给主机。
  • 验证直接在主机上访问时 WebSocket 服务器是否正常工作

我正在寻找有关如何通过 Apache 反向代理排除和解决此 WebSocket 连接问题的指导。

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com


        ServerName abc.com
        ServerAdmin [email protected]

     ProxyRequests Off

     <Proxy *>
        Require all granted
        Allow from all
     </Proxy>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/


    ProxyPass /ws ws://127.0.0.1:8000/
    ProxyPassReverse /ws ws://127.0.0.1:8000/
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/abc.com.error.log
        CustomLog ${APACHE_LOG_DIR}/abc.com.access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

docker apache websocket reverse-proxy
1个回答
0
投票

检查了 Docker 日志和 Apache 日志后,我通过根据 Web URL 请求更改 Apache WebSocket 配置来修复它

ProxyPass /ws ws://127.0.0.1:8000/ws
ProxyPassReverse /ws ws://127.0.0.1:8000/ws
© www.soinside.com 2019 - 2024. All rights reserved.