本文使用 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")

以上。

Apache 配置 WebSocket 协议的更多相关文章

  1. 在linux下的apache配置https协议,开启ssl连接

    环境:linux 配置https协议,需要2大步骤: 一.生成服务器证书 1.安装openssl软件 yum install -y openssl mod_ssl 2.生成服务器私匙,生成server ...

  2. apache配置https协议

    安装openssl有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.下面对两种方式均进行详细描述. 一.下载和安装openss 方法一:直接使用openssl安装包 W ...

  3. Apache 配置HTTPS协议搭载SSL配置

    在设置Apache + SSL之前, 需要做:     安装Apache, 请参见: Windows环境下Apache的安装与虚拟目录的配置, 下载安装Apache时请下载带有ssl版本的Apache ...

  4. Apache配置HTTPS协议搭载SSl配置全过程

    1.首先要开启相应的扩展和辅助的dll(ssleay32.dll,libeay32.dll)到system32下 2.生成服务器证书 安装好在bin目录下有一个openssl.exe文件,用来生成证书 ...

  5. Apache配置WebSocket代理

    引入mod_proxy_wstunnel.so模块,使其可以解析ws.wss协议 LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel ...

  6. WebSocket 协议

    1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用到 HTTP 轮询的方式.围绕轮询产生了 “短轮询” 和 “长轮询”. 短轮询 浏览器赋予了脚本网络通信的编程 ...

  7. websocket + TP5.1 + apache 配置步骤

    websocket + TP5.1 + apache 配置步骤 1. https ssl配置好 2. 检查php环境是否满足Workerman要求 curl -Ss http://www.worker ...

  8. apache+djnago+websocket 部署配置

    部署Apache服务器 1.apache服务的安装这里不做赘述,因为网上一大堆. 链接:https://blog.csdn.net/qq_24394093/article/details/905501 ...

  9. WebSocket协议

    websocket 简介 (2013-04-09 15:39:28) 转载▼   分类: websocket 一 WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例 ...

随机推荐

  1. NC57银行档案和客商银行账号为建行04 UPDATE

    第二步 银行档案 update bd_bankdoc set bankdoccode='04N'|| bankdoccode , pk_banktype='0001ZZ1000000001OCUD' ...

  2. APP常见崩溃原因和测试方法整理

    测试过APP的人都应该发现,app崩溃是一类非常常见的问题,很多时候还是致命性的,这就要求我们测试人员要尽最大可能去找出软件当中的缺陷,减少app崩溃出现的概率,这里我将收集到的关于针对APP崩溃测试 ...

  3. 关于NGINX的502的装逼打怪之路

    写日志之前先copy一段nginx502的原因,从某网看到如下,然而这并不是重点,最重要还是看博主手敲的东西. 一.NGINX 502错误排查 NGINX 502 Bad Gateway错误是Fast ...

  4. 初探jquery之强大丰富的选择器

    ---恢复内容开始--- 1.基本选择器 常用的有id选择器:#id,   类选择器:.class , 元素选择器. 2.层次选择器 $(ancestor descendant):选取ancestor ...

  5. CRM 2016 子表单中N:1关系 字段要求与新建时的关系

    父表单在新建子表单项时弹出的窗口和 子表单的N:1关系是有关系的.说白了就是子表单窗体上的父表单字段是不是必填项. 关系如下: 1 非必填项 点击子表单的"+"号时,会出现look ...

  6. 基于WebDriver&TestNG 实现自己的Annotation @TakeScreenshotOnFailure

    相信用过Selenium WebDriver 的朋友都应该知道如何使用WebDriver API实现Take Screenshot的功能. 在这篇文章里,我主要来介绍对failed tests实现 t ...

  7. LeetCode 396. Rotate Function

    Given an array of integers A and let n to be its length. Assume Bk to be an array obtained by rotati ...

  8. JavaScript学习基础篇【第1篇】: JavaScript 入门

    JavaScript 快速入门 JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中,由<script>...< ...

  9. 【HOW】如何手工编辑InfoPath文件

    因为直接打开InfoPath的配置文件进行编辑会有些无从下手,所以下面以修改“节”的Margin为例来说明手工编辑InfoPath文件的过程. 1. 新建一个“节”,并在此节中创建一个数字类型字段“n ...

  10. 尚学堂Spring视频教程(六):AOP Annotation

    此处省略N个字.... 直接看下面 推荐链接: Spring Aop实例之AspectJ注解配置