配置Nginx的websocket代理
方法一
在nginx.conf配置一下,就可以提供不同类型的服务。本文简单描述下如何转发(反向代理)一个socket服务。
将要配置一个如上图示的转发服务。
1、 首先是需要安装Nginx。一般Linux环境Nginx依赖pcre,OpenSSL-fips ,zlib 。所以在安装Nginx之前需要安装这几个。
./configure --with-stream
Nginx的时候需要加上参数 –with-stream才能开启socket的转发。默认是没有的。
后面的make都是一样的。
2、在nginx.conf文件,与events平行的级别,配置一个stream
1 | #evnets是配置文件已有内容 |
像上面配置好后,保存,启动nginx服务,socket client就可以通过访问172.10.10.11 16001来访问socket server,效果与直接访问172.10.10.10 6001一样。
这个简单的例子,如同很多示例一样,看起来是把简单的东西变复杂,只是为了描述一个转发功能如何配置。
方法二
在nginx配置文件的service节点中添加如下配置
1 | location /api/ |
解释一下参数
- /api这个是代理前缀,告诉Nginx要代理的url,现在我的设置为api,当我访问的我的服务器
https://abc.com/api
时,Nginx会把我的请求映射到本机的8301端口。 - proxy_pass 要代理到的url,我的代理到本机的8888端口。
- proxy_http_version 代理时使用的 http版本。
重点来了:
代理webSocket的关键参数
- proxy_set_header Upgrade 把代理时http请求头的Upgrade 设置为原来http请求的请求头,wss协议的请求头为websocket
- proxy_set_header Connection 因为代理的wss协议,所以http请求头的Connection设置为Upgrade
- proxy_set_header X-Real-IP 给代理设置原http请求的ip,填写$remote_addr 即可
至于websocket协议的response的参数,在反向代理的时候不用管。
到这里,Nginx反向代理webSocket的配置就完成了,重启Nginx,用websocket连接试试,在原来wss地址的地方填写wss://abc.com/api
。如果websocket成功连接,说明Nginx反向代理websocket已经成功了。