这篇文章主要介绍了简介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. nginx rewrite 规则

    rewrite功能:使用nginx提供的全局变量或自设定的变量,结合正则表达式和标志位实现url重写以及重定向. 配置域:server,localtion. flag标志位     last : 相当 ...

  2. ftp操作命令

    原文:https://www.cnblogs.com/tssc/p/9593614.html 1.登陆ftp服务器 ftp [IP] [PORT] # 登陆ftp服务器,本机登陆可以不写IP实例演示: ...

  3. [tensorflow] 入门day1-数据整理与展示

    tensorflow真是一个我绕不开的坑(苍天饶过谁.jpg) 其实tensorflow1和2的差别挺大的,暂时从1入坑,2的话之后简单过一下. tf2中更改的函数(供参考):https://docs ...

  4. PAT甲级 进制转换题_C++题解

    进制转换题 PAT (Advanced Level) Practice 进制转换题 目录 <算法笔记> 重点摘要 1015 Reversible Primes (20) 1019 Gene ...

  5. WUSTOJ 1291: 2n皇后问题(Java)

    题目:

  6. scratch少儿编程第一季——02、scratch界面介绍

    各位小伙伴大家好: 上期我们简单的介绍了Scratch的一些基本信息,和scratch软件的下载. 今天我们一起来了解一下Scratch的编程界面的介绍. 关于版本我考虑之后还是决定基于Scratch ...

  7. springboot项目在IDEA根据不同的开发人员读取不同的配置文件

    IDEA启动项目打开项目的配置文件,修改Program argument为--spring.profiles.active=developerName启动项目,即可 命令行方式启动项目 java -j ...

  8. [eclipse]UML之AmaterasUML 插件

    软件体系结构分析软件设计模式要求给出相应设计模式源码对应的UML类图,在此之前我安装过一种UML插件,可以自动生成一个源码包对应的UML类图,但是重装过系统,所以软件包括eclipse都重新下载了新的 ...

  9. elasticsearch 集群详解

    ES为什么要实现集群 在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等. 如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理 ...

  10. (错误)启动ActiveMQ报错:Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: stomp://0.0.0.0:61613?

    一.错误报告 很明显,端口被占用 二.解决方法 1. 在cmd中输入 netstat -ano 查看61613端口被占用情况,如果有其他进程使用,则使用 taskkill /f /pid 进程PID  ...