zoukankan      html  css  js  c++  java
  • Apache 配置 WebSocket 协议

    本文使用 http proxy 方式 实现 apache 支持  WebSocket 请求(JK 使用的 ajp 协议不能支持websocket)

    通过 apache 访问 后端 tomcat上的 websocket 服务,需要使用 mod_proxy.so 和 mod_proxy_wstunnel.so两个库文件(在apache2.4 安装目录下已存在,放开httpd.conf文件中的注释即可使用),如果应用中需要通过http协议访问某些页面(如index页面)则需要添加使用 mod_proxy_http.so,如下:

        LoadModule proxy_module modules/mod_proxy.so  
          
        LoadModule proxy_http_module modules/mod_proxy_http.so  (可选)
          
        LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so  
        最后面添加:  
        ProxyPass /web/websocket/ ws://tommcatIP:8080/web/websocket/  
        ProxyPass / http://127.0.0.1:8080/  (可选)

    我的apache端口使用的是 80,所以访问 http://127.0.0.1:80/web/ 就出现了 index.html首页(此次访问不是websocket,所以需要开启mod_proxy_http.so,如果不需要可以关闭加载mod_proxy_http.so) (可选)

    我的应用中配置的 websocket服务都在  web/websocket/ 下面,所以配置了映射,对于其它所有映射如 “/” 需要配置到 web/websocket/ 映射的后面,否则 web/websocket/ 的映射会被当做http协议处理。


    注意: WebSocket 负载均衡 没有 亲和/非亲和 概念!!!

    另外一种实现方式:

    前写的即时通信部分上传到服务器上之后,发现 WebSocket 连接不上了。

    妈蛋。

    于是百度了半天,看到一个方法是配置 Apache,增加 mod_python、mod_pywebsocket 扩展巴拉巴拉。

    mod_python 在我最开始配置 Apache 支持 PHP 和 Pyhton 的时候就发现好像不太好用,所以就没有用。

    这次简单地尝试了一下还是有问题,所以就算了。

    可能因为我是通过 apache 代理,将域名解析到指定端口来实现 tornado 应用的上线,而 WebSocket 在握手的时候请求直接发送到 apache。apache 代理的时候没法将 WebSocket 握手请求传递给 tornado 应用,结果就是握手失败

    解决方案:

    将 html 文件里的 ws 服务器地址修改为服务器 IP 地址,越过 apache 代理的部分,直接跟 tornado 应用握手。

    就是这样:

    《xxx.html》
    ws = new WebSocket("ws://xxx.xxx.xx.xxx:8008/soc")

    ws = new WebSocket("ws://www.mysite.com/soc")

    以上。

  • 相关阅读:
    Spring事务的传播行为案例详细分析
    面试官:InnoDB一棵B +树可以存放多少行数据?
    Java面试题——数组求和统计
    Java算法题——牛牛消消乐
    Jenkins集成GitLab
    Kafka+ZooKeeper高可用集群部署
    Linux运维不会这些,别做工程师
    Linux系统通过Squid配置实现代理上网
    使用Openresty实现WAF防火墙功能
    谷歌浏览器插件(下载百度云盘)
  • 原文地址:https://www.cnblogs.com/sos-blue/p/6119216.html
Copyright © 2011-2022 走看看