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,正向代理
本文介绍了Nginx作为HTTPS正向代理的两种方案:HTTP CONNECT隧道(7层)和NGINX stream(4层)。HTTP CONNECT隧道需要客户端手动配置代理,通过CONNECT请求建立隧道;而NGINX stream则更适合透明代理,利用SNI字段实现流量转发。文章详细讲解了两者的原理、环境搭建、使用场景及常见问题,并提供了配置示例和最佳实践建议。内容转载自阿里云开发者社区@怀知的文章,推荐读者参阅原文获取更多信息。感谢您的阅读!
329 80
Nginx,正向代理
|
8天前
|
应用服务中间件 nginx
Nginx进程配置指令详解
Nginx进程配置指令主要包括:`worker_processes`设置工作进程数;`worker_cpu_affinity`绑定CPU核心;`worker_rlimit_nofile`设置最大文件描述符数量;`worker_priority`设置进程优先级;`worker_connections`设置最大连接数;`daemon`控制守护进程模式;`master_process`启用主进程模式;`pid`设置PID文件路径;`user`指定用户和组;`error_log`配置错误日志。这些指令在`nginx.conf`中配置,用于优化和控制Nginx的运行行为。
31 10
|
2月前
|
存储 应用服务中间件 Linux
nginx配置证书和私钥进行SSL通信验证
nginx配置证书和私钥进行SSL通信验证
82 4
|
4月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
279 61
|
4月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
285 60
|
4月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
375 60
|
3月前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
229 11
|
3月前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
151 5
|
4月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
3月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
244 3