提供Discuz ,ECShop ,PHPCMS ,帝国CMS ,CSS教程 ,PHP教程 ,DedeCMS ,WordPress ,HTML教程等cms问题查询.
当前位置: 运维 > Linux > nginx反向代办webSocket设置【Linux】,nginx,webSocket

近来在做项目的时刻用到了webSocket协定,而且是在微信小顺序顶用到了webSocket,微信小顺序中运用wss协定的时刻不能设置端口,只能运用默许的443端口。我的https已监听了443端口,webSocket再去监听443,一定不可啊。要想方法处置惩罚。因而想到了两种方法处置惩罚。一种处置惩罚方法是把webSocket布置到另一台服务器上,如许本钱也太高了。另一种方法,就是运用nginx反向代办。

由于webSocket协定是基于http协定升级的(见下图),所以能够运用nginx反向代办webSocket.

从这张图片上能够看出,webSocket衔接的竖立是在http协定的基础上。

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

熟习HTTP的童鞋能够发现了,这段相似HTTP协定的握手要求中,只是多了几个东西。

Upgrade: websocket
Connection: Upgrade

这个就是Websocket的中心了,通知Apache、Nginx等服务器:我提议的是Websocket协定。

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

起首,Sec-WebSocket-Key 是一个Base64 encode的值,这个是浏览器随机生成的,通知服务器:泥煤,不要忽悠窝,我要考证尼是否是真的是Websocket助理。

末了,Sec-WebSocket-Version 是通知服务器所运用的Websocket Draft(协定版本),在最初的时刻,Websocket协定还在 Draft 阶段,种种奇奇怪怪的协定都有,而且另有很多期奇奇怪怪差别的东西,什么Firefox和Chrome用的不是一个版本之类的,当初Websocket协定太多但是一个大困难。。不过如今还好,已定下来啦人人都运用的一个东西

然后服务器会返回以下东西,示意已接受到要求, 胜利竖立Websocket啦!

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

这里最先就是HTTP末了担任的地区了,通知客户,我已胜利切换协定啦~

Upgrade: websocket
Connection: Upgrade

依然是牢固的,通知客户端行将升级的是Websocket协定。至此,HTTP已完成它所有工作了,接下来就是完整根据Websocket协定进行了。

邃晓协定的原理了就能够下一步了

起首nginx先设置好https的证书

服务器的证书是老大设置好的,我就直接用了。须要的自身查一下吧0.0

在nginx设置文件的service节点中增加以下设置

location /wss
        {
                 proxy_pass http://127.0.0.1:8888;
                 proxy_http_version 1.1;
                 proxy_set_header Upgrade $http_upgrade;
                 proxy_set_header Connection "Upgrade";
                proxy_set_header X-Real-IP $remote_addr;
         }

诠释一下参数

/wss这个是随意起的,通知Nginx要代办的url,如今我的设置为wss,当我接见的我的服务器https://abc.com/wss时,Nginx会把我的要求映射到本机的8888端口。

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/wss。假如websocket胜利衔接,申明Nginx反向代办websocket已胜利了。

总结

如今的设置只是反向代办到本机时的设置,假如要反向代办到别的主机,在代办时能够会跨域题目,须要在Nginx的反向代办中做跨域的设置。

思索

在Nginx的设置文件中能看到这一段

location ~ .php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
}

这是Nginx中php的设置文件,我擦,怎样这么眼熟,这个设置清单跟适才的websocket的反向代办这么像。经由过程上网查资料才晓得,本来Nginx在处置惩罚php范例的要求时,把要求发fastcgi治理历程处置惩罚,fascgi治理历程挑选cgi子历程处置惩罚效果并返回被nginx,而php-fpm是一个PHP FastCGI治理器,nginx自身不能处置惩罚PHP,它只是个web服务器,当接收到要求后,假如是php要求,则发给php诠释器处置惩罚,并把效果返回给客户端。所以说Nginx在处置惩罚php范例的要求时,本质上也是经由过程反向代办功用完成的。

我们能够把头脑睁开,用Nginx反向代办能够完成更多的功用,比方代办Tomcat

location /Tomcat
        {
                 proxy_pass http://127.0.0.1:8080;
                 proxy_http_version 1.1;
                proxy_set_header X-Real-IP $remote_addr;
         }

固然,也能够用Nginx反向代办完成负载平衡,这个我还没有试过,等今后用到了,再来补充。

以上就是nginx反向代办webSocket设置的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"nginx反向代办webSocket设置【Linux】,nginx,webSocket"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线