nginx代理websocket配置

简介:

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

    配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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模块。(这里通过官网程序包实现)

1
2
3
4
5
[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服务监听程序:

1
2
3
4
5
6
7
8
9
10
11
[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服务端:

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

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

1
2
3
4
5
[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 ...
>

      查看服务端:

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

     至此,websocket环境搭建完成。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[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配置:

1
[root@192_168_1_131 ~] # service nginx reload

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


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

1
2
3
4
5
[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...
>

     查看服务端:

1
2
3
4
[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也能正常接收到客户端的请求信息。










本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1839566,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
缓存 负载均衡 应用服务中间件
nginx配置详解
配置详解
46 24
nginx配置详解
|
3天前
|
缓存 负载均衡 应用服务中间件
nginx配置
nginx配置详解
24 2
nginx配置
|
14天前
|
负载均衡 应用服务中间件 API
深入理解 Nginx 与 Kong 的配置与实践
在微服务架构中,Nginx 用于配置负载均衡,如示例所示,定义上游`pay-service`包含不同权重的服务节点。Kong API 网关则通过service和route进行服务管理和路由,与Nginx的upstream和location类似。通过Kong的命令行接口,可以创建upstream、target、service和route,实现对后端服务的负载均衡和请求管理。Nginx和Kong协同工作,提供高效、灵活的API管理和流量控制。
15 1
深入理解 Nginx 与 Kong 的配置与实践
|
3天前
|
缓存 负载均衡 应用服务中间件
nginx配置详解
nginx配置详解
28 0
|
19天前
|
应用服务中间件 nginx
Nginx命令配置到系统环境变量
Nginx命令配置到系统环境变量
|
19天前
|
应用服务中间件 开发工具 nginx
Nginx基础配置实例需求分析
Nginx基础配置实例需求分析
|
19天前
|
应用服务中间件 Linux nginx
CentOS 7 上配置 Nginx 作为反向代理
在CentOS 7上设置Nginx反向代理的步骤:安装Nginx;启动Nginx服务编辑`/etc/nginx/nginx.conf`;添加`proxy_pass http://app_server_address;将请求转发至应用服务器;重启Nginx`sudo systemctl restart nginx`;验证配置是否成功
|
19天前
|
网络协议 应用服务中间件 nginx
Nginx的http块sendfile,keepalive_timeout的配置指令说明
Nginx的http块sendfile,keepalive_timeout的配置指令说明
|
21天前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
|
19天前
|
应用服务中间件 nginx
Ngnix07---通过yum安装Ngnix下 whereis ngnix可以查看Ngnix相关的一些目录,使用./nginx -y可以查看Ngnix版本及相关配置信息,使用 more CHANGES
Ngnix07---通过yum安装Ngnix下 whereis ngnix可以查看Ngnix相关的一些目录,使用./nginx -y可以查看Ngnix版本及相关配置信息,使用 more CHANGES