这篇文章主要介绍了简介Nginx服务器的Websockets配置方法,是使用Nginx服务器的网管的必备知识XD~需要的朋友可以参考下

Nginx 1.3.13 已经发布了,该版本支持 Connection: upgrade 和 Upgrade 头,这就意味着支持WebSocket代理了.很多人都在等这个新特性以至于 “Nginx 支持 websockets 吗?” 成为了 freenode上的#nginx频道最常问的问题. 有了这种方式,让我们来看看Nginx的WebSocket实现。
Nginx新添加的Websockets配置指令

文档中提到的配置如下:

复制代码 代码如下:

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }

这配置的确是相当简单连配置HTTP的版本都是以前版本就支持的. 我们还可以稍微优化一下配置,通过创建一个链接的变量把proxy_set_headers放到一个公共的包含文件中,以此来提高通用性.

复制代码 代码如下:

    map $http_connection $upgrade_requested {
    default upgrade;
    '' close;
    }

这样使得变量 $upgrade_requested 可以在 proxy_set_header Connection 里面使用,而且如果没有 upgrade 的链接请求,则Conection这个头会被设置为"",这样就不会干扰普通的请求了.这样做的好处是,如果你只使用HTTP/1.1代理,那么你不需要再另外配置一个location来专门处理WebSockets.

链接升级似乎没有往后移植到稳定的版本中,因此如果你想要使用链接升级功能,你必须使用开发版本。感激的是nginx的开发版本并不意味着它不是运行稳定版,只是意味着API会变,在这种情况下只会影响模块的编写者。不要害怕安装开发版本来尝试这个新特征。

局限性:

到目前为止,在websocket的执行部署中有一些局限性:

客户端必须制定链接升级

客户端必须请求链接升级,否则nginx将会失败。当前这个要求在代码里列为要做的部分,因此我需要说它是怎么失败的,但是我可以肯定的是它最后也会被执行,因此我不需要依赖它。这个约束对任何人来说不是个问题,只会在当模块的编写者或许想要应用连接升级到后端且本身处理响应的情况下才会是问题。

WebSockets 超时
WebSockets 仍然受到缺省为60秒的proxy_read_timeout 的影响。这意味着,如果你有一个程序使用了 WebSockets,但又可能超过60秒不发送任何数据的话,那你要么需要增加超时时间,要么实现一个 ping 的消息以保持联系。使用 ping 的解决方法有额外的好处,可以发现连接是否被意外关闭。

Keep-Alive & WebSockets
Keep-alive pings 对上述超时问题无效,因为它们只是在 TCP 级别上发送空包。它们不向应用程序报告,所以应用程序也不响应它们,因此 proxy_read_timeout 仍然会触发。

WebSockets支持SSL
由于WebSockets绑定在正常的代理模块中,所以SSL照常的工作运行。

代理缓存
WebSockets利用两个内存缓冲区来实现代理缓存配置(proxy_buffer_size)的大小,一个用于上行数据,另一个用于下行数据。WebSockets和普通的代理请求所不同的是,WebSockets不会将数据缓存到磁盘。

大小写敏感的Upgrade头部
有一些后端程序对Upgrade头做大小写检查,同时支持“upgrade”和“Upgrade”两种写法,否则的话,只有“upgrade”写法能正常工作。如果配置看上去都正确,就是不能正常工作,就要尝试修改头部的大小写了。

转载自:http://phpstudy.php.cn/jishu-php-3252.html

Nginx服务器的Websockets配置方法的更多相关文章

  1. nginx服务器搭建以及配置

    2019年第一篇博客,在新的一年祝大家新年快乐,技术更上一层楼. 今天在公司搞了好长时间的nginx服务器搭建,以及遇到的问题,总结一下,方便查询 这里使用的是百度云的服务器,CentOS7系统的 N ...

  2. Linux下安装PHP并在nginx服务器中进行配置的详细方法

    先介绍一下使用的环境:centos 7.4, PHP 7.0 , nginx 1.12 Linux系统版本可以通过命令:lsb_release -a 查看. 现在开始步入正题了! 1.  首先查看一下 ...

  3. 一台nginx服务器多域名配置 (转)

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 下面我就来说说server_name的使用吧: s ...

  4. 【nginx】一台nginx服务器多域名配置

    Nginx 多域名配置 nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里.一. ...

  5. nginx多域名的配置方法

    方法一:多个.conf方法 1. 到/usr/local/nginx/ 新建一个目录 vhosts  并创建两个conf文件,如:wodejj.com.conf ,xiaobing.com.conf. ...

  6. 关于 ThinkPHP 在 Nginx 服务器上 使用U方法跳转问题

    这个问题已多次遇到,关于tp 框架 使用U 方法跳转, 在Nginx 服务器上可能会遇到路由跳转不过去前面带点(如:./xx) 解决这个问题,可以在tp的入口文件 index.php 里定义个常量 d ...

  7. nginx服务器的基本配置

    nginx作为反向代理搭建服务器的优点. 处理响应请求很快:单次请求会得到更快的响应.在高峰期,Nginx 可以比其它的 Web 服务器更快的响应请求 高并发连接:理论上,Nginx 支持的并发连接上 ...

  8. nginx实现防盗链配置方法介绍

    有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等. 防盗链配置 假设网站域名是 www.php100.com. 编辑 ...

  9. Linux_CentOS 7下Nginx服务器的安装配置

    1.安装 1.1 配置epel yum 源 wget http://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm ...

随机推荐

  1. SQL查询当天、本周、本月记录详解

    --查询当天: select * from info where DateDiff(dd,datetime,getdate())=0 --查询24小时内的: select * from info wh ...

  2. CenOS 7 安装Redis

    1.Redis介绍 Redis是一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2 ...

  3. 502 BAD GATEWAY-k8s的cgroup限制了apache的可用内存

    1.release的组件逻辑图 2.表象:按F12,总是报502 BAD GATEWAY 3.nginx日志 [error] #: * upstream prematurely closed conn ...

  4. 1024多人激情在线聊天室---select函数的使用

    效果展示 step1.服务器启动!端口号3006 step2.1号客户端启动!jack加入了群聊 step3.2号客户端启动!kelly加入了群聊 step4.3号客户端启动!zwj加入了群聊 ste ...

  5. 【leetcode算法-中等】3. 无重复字符的最长字串

    [题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...

  6. CDH6.2的fair-scheduler.xml

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><alloc ...

  7. Win7 JavaEE 安装

    新建四个目录 D:\ApacheServer\eclipse 存放eclipse D:\ApacheServer\jdk jdk安装目录 D:\ApacheServer\apache-tomcat 存 ...

  8. mq 探究

    一 mq简介(message queue) 消息队列技术是分布式应用间交互信息的一种技术. 消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走 通过消息队列,应用程序可独立地执行-它们不 ...

  9. vm启动时通过U盘安装的方法

    vm启动时通过U盘安装的方法         增加一个以U盘为硬盘的方法,通过boot中设置该硬盘启动后重新ghost或者安装win10X64位. 在虚拟机中增加一个硬盘,第二部设置为物理硬盘,选在对 ...

  10. python学习-21 集合 2

    集合的其他方法 1.交差补集 math = {'xm','xh','xg','xx'} english ={'xm','xh','dm','john'} print(math.symmetric_di ...