nginx代理websocket配置

nginx正常只能代理http请求,如果想实现代理websocket的需求,需在请求中加入"Upgrade"字段,使请求从http升级为websocket。

    配置如下:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
 
    server {
        ...
 
        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            #以下配置添加代理头部:
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }


实验案例:

    配置websockeet服务器,客户端通过代理连接服务器端。环境如下:

    websocket服务端:192.168.1.110:8010

    nginx                   :192.168.1.131:8081

 

1:利用nodejs实现一个websocket服务端,监听8010端口,等待websocket链接。

      安装nodejs与npm,并安装ws模块。(这里通过官网程序包实现)

[root@192_168_1_110 ~]# tar -zxvf node-v6.2.0-linux-x64.tar.gz
[root@192_168_1_110 ~]# ln -s /root/node-v6.2.0-linux-x64/bin/node /usr/local/bin/node
[root@192_168_1_110 ~]# ln -s /root/node-v6.2.0-linux-x64/bin/node /usr/local/bin/node
[root@192_168_1_110 ~]# npm install -g ws
[root@192_168_1_110 ~]# npm install -g wscat

     编写websocket服务监听程序:

[root@192_168_1_110 ~]# vim server.js
console.log("Server started");
var Msg = '';
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({port: 8010});
wss.on('connection', function(ws) {
ws.on('message', function(message) {
console.log('Received from client: %s', message);
ws.send('Server received from client: ' + message);
});
});

     启动websocket服务端:

[root@192_168_1_110 ~]# node server.js
Server started

     重新开启一个终端,使用wscat程序测试程序连接:

[root@192_168_1_110 ~]# /root/node-v6.2.0-linux-x64/lib/node_modules/wscat/bin/wscat --connect ws://192.168.1.110:8010
connected (press CTRL+C to quit)
> This is a websocket test...
< Server received from client: This is a websocket test...
>

      查看服务端:

[root@192_168_1_110 ~]#node server.js
Server started
Received from client: This is a websocket test...          ----从客户端接收到的信息

     至此,websocket环境搭建完成。


2:配置nginx,代理110上的websocket链接。

[root@192_168_1_131 ~]# vim /opt/conf/nginx/nginx.conf
......
http {
......
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
.......
include vhost/*.conf;
 
 
[root@192_168_1_131 ~]# vim /opt/conf/nginx/vhost/nodejs.conf
upstream nodejs{
server 192.168.1.110:8010;
}
server {
listen 8010;
access_log /opt/logs/nginx/nodejs.log main;
location / {
proxy_pass http://nodejs;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

     重新加载nginx配置:

[root@192_168_1_131 ~]# service nginx reload

   这样配置过后,在nginx服务器上访问8010端口的请求,将会全部发送到后端192.168.1.110的8081端口上。


3:验证websocket请求代理:(把ws地址指向192.168.1.131:8010)

[root@192_168_1_110 ~]# /root/node-v6.2.0-linux-x64/lib/node_modules/wscat/bin/wscat --connect ws://192.168.1.131:8010
connected (press CTRL+C to quit)
> This is a websocket test through nginx proxying...
< Server received from client: This is a websocket test through nginx proxying...
>

     查看服务端:

[root@192_168_1_110 ~]#node server.js
Server started
Received from client: This is a websocket test...
Received from client: This is a websocket test through nginx proxying...

    可以看到通过代理,websocket也能正常接收到客户端的请求信息。

本文出自 “扮演上帝的小丑” 博客,转载请与作者联系!

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
一、搭建要求 LVS+KEEPALIVED+NGINX( 反向代理)+WEB01(NGINX)+WEB02(APACHE) # 以下以keepalived的端口形式配置LVS(keepalived双实例双主模式),而不用手工配置。 # 以下机器忽略安装apache和nginx,只提供主要配置,当更新博客时会在这加上apache和nginx的安装与配置的博客地址。 #nginx 安装版本为nginx-1.6.3.tar.gz,apache安装版本为httpd-2.2.31.tar.gz。 二、前提条件 2
Linux下用于查看系统当前登录用户信息的4种方法 作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。 1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括: ?用户名称 ?用户的机器名称或tty号 ?远程主机地址 ?用户登录系统的时间 ?空

Nagios 监控 SNMP 温度计 - 2016-08-22 14:08:41

老板给机房新买了个温度,湿度的感应器,问我能不能整合到Nagios里面。我的回答是No Problem. 首先看看他自带的界面 监控SNMP,首先得知道他的OID是啥,这个界面我可以直接下载MIB文件和对应的EXCEL文档。 下载以后,重命名MIB为txt文件,然后拷贝到我的nagios服务器的/usr/share/snmp/mibs 目录下,然后记得添加到配置文件中 [root@sydnagiosmibs]#pwd/usr/share/snmp/mibs[root@sydnagiosmibs]#lsg*

docker1.12版本的swarm集群特性 - 2016-08-22 14:08:37

docker1.12版本之后集成了swarm模块,直接使用dokcer-engin就能很方便地创建一个docker集群,不用再像以前那样第三方配置。 环境: manager/node1 : swarm_node1 node2 : swarm_node2 1:首先在各节点上安装最新版dokcer #curl-fsSLhttps://test.docker.com/|sh#docker-vDockerversion1.12.0-rc4,builde4a0dbc 2:在node1上初始化一个swarm集群 sw
什么是心脏出血漏洞? CVE-2014-0160,心脏出血漏洞,是一个非常严重的 OpenSSL 漏洞。这个漏洞使得攻击者可以从存在漏洞的服务器上读取64KB大小的内存信息。这些信息中可能包含非常敏感的信息,包括用户请求、密码甚至证书的私钥。 据称,已经有攻击者在某宝上尝试使用漏洞读取数据,在读取200次后,获取了40多个用户名和7个密码。 使用如下的命令查看服务器上的当前版本: openssl version [root@master ~]# openssl version OpenSSL 1.0.1e

Apache运维架构之Apache+PHP - 2016-08-22 14:08:37

当前互联网主流web服务器说明 1、IIS 微软的web服务器 2、apache 中小web服务器主流,web服务器中的老大哥 3、nginx 新兴的web服务器主流 4、tomcat 中小企业动态服务器,互联网java容器主流 5、resin 大型企业动态服务器,互联网java容器主流 apache的特点及应用场合 特点:功能强大,配置简单,速度快,应用广泛,性能稳定可靠,并可做代理服务器和负载均衡 应用场合: 1、使用apache来运行静态html网页,图片,处理静态小文件能力不及nginx 2、使用
shyis最近微软中国Azure更新速度似乎已经超越任何时期了,前两天刚刚更新的Azure云助理,让众多Azure用户实现在移动端灵活的管理Azure资源,相信对于云服务来讲这也是未来不可或缺的管理方式之一。说到管理方式,不得不说微软中国Azure近期更新的另一大神器预览版门户。 说到Azure预览版门户,其实已经不是什么新玩意,毕竟在国际版Azure中已经预览了非常之久了。但对于中国版Azure来说毕竟是一个非常重要的更新,今天给大家带来的就是中国版Azure的预览版介绍以及通过配置固定公网IP作为实例
首先到Github上下载Pyenv相应的一键安装脚本, $curl-Lhttps://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer|bash 安装完毕,设置环境变量,设置环境变量,可以添加到个人家目录的.bashrc或.bash_profile及系统的全 局的/etc/profile, #Loadpyenvautomaticallybyadding#thefollowingto~/.bash_profil
nginx网站被持续攻击1个月后最终防攻策略 上上个月架构全部迁移上云以后,总的来说比较稳定,业务量也上来,可爱的坏人也来了,7X24小时不停恶意攻击我的网站, 第一次收到报警是网站流入流量1分钟以内连续3次超过1000000bps,换算下1M/s秒 ,平时没那么大流量的啊,当时刚好在朋友家玩,于赶紧开本本连vpn检查,发现全是访问同一个页面的请求,而且是正常访问http 200,应该是被恶意攻击了。 发现问题 : 发现问题第一反应,赶紧将请求地址截图发给开发们看看,问问这个具体是什么? 最后得知是为短信
这章介绍如何在之前单台后端数据库的基础上建立镜像数据库 Lync Server 后端就是SQL Server 数据库,后端高可用在跟Lync集成后跟以往的高可用配置有所不同, 高可用是一种架构,高可用的架构中,硬件或软件出现故障的情况下继续能够对外提供服务, 高可用分为两种,第一种是故障转移群集(Failover Cluster),主服务器宕机后,切换备用服务器 第二种是网络负载均衡(NLB),NLB最常见的案例就是Web服务器,多台服务器同时分摊用户访问流量 首先说明一下部署条件,我们之前已经介绍过SQ