当前位置: 首页 > 编程笔记 >

简介Nginx服务器的Websockets配置方法

蒙墨竹
2023-03-14
本文向大家介绍简介Nginx服务器的Websockets配置方法,包括了简介Nginx服务器的Websockets配置方法的使用技巧和注意事项,需要的朋友参考一下

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

文档中提到的配置如下:(译者注:原文中的链接其实不是文档的链接.现在nginx的官方文档中已经有websocket的说明了http://nginx.org/en/docs/http/websocket.html)
 


    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”写法能正常工作。如果配置看上去都正确,就是不能正常工作,就要尝试修改头部的大小写了。

 类似资料:
  • 我在将nginx配置为代理WebSockets时遇到了一些麻烦。我有一个Node.js应用程序,它使用Socket.io V0.9.16侦听端口9090上的连接,使用nginx V1.6.2侦听端口9000上的连接,并且(应该)配置为将请求代理到我的Node.js应用程序。nginx配置如下所示: 这可能是安全问题吗?浏览器是否以某种方式“知道”Socket.io在端口9090上运行,并拒绝通过9

  • 主要内容:1. 设置虚拟服务器,2. 配置位置,3. 使用变量,4. 返回特定状态码,重写URI请求,5. 重写HTTP响应本文介绍如何将NGINX配置作为Web服务器,并包括以下部分: 设置虚拟服务器 配置位置 使用变量 返回特定状态码 重写请求中的URI 重写HTTP响应 处理错误 在高层次上,将NGINX配置作为Web服务器有一些问题需要了解,定义它处理哪些URL以及如何处理这些URL上的资源的HTTP请求。 在较低层次上,配置定义了一组控制对特定域或IP地址的请求的处理的虚拟服务器。 用

  • 本文向大家介绍配置Nginx服务器防止Flood攻击的方法,包括了配置Nginx服务器防止Flood攻击的方法的使用技巧和注意事项,需要的朋友参考一下  测试 我会简单的告诉你如何配置Nginx的限制请求模块并且它是如何保护你的网站,防止你被攻击与DDOS或是其他基于HTTP的拒绝服务攻击。 这个测试中,我将样本页在保存在Blitz.io(现在是免费服务)命名为about.html,用于测试lim

  • 本文向大家介绍一台nginx服务器多域名配置的方法,包括了一台nginx服务器多域名配置的方法的使用技巧和注意事项,需要的朋友参考一下 Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了。 下面我就来说说server_name的使用吧: server_name的匹配顺序 Nginx中的server_na

  • 本文向大家介绍在Nginx服务器中启用SSL的配置方法,包括了在Nginx服务器中启用SSL的配置方法的使用技巧和注意事项,需要的朋友参考一下 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: 创建服务器私钥,命令会让你输入一个口令: 创建签名请求的证书(CSR): 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: 启用一个 SSL 虚拟主机

  • 本文向大家介绍Windows系统下Nginx服务器的基本安装和配置方法介绍,包括了Windows系统下Nginx服务器的基本安装和配置方法介绍的使用技巧和注意事项,需要的朋友参考一下 下载地址:http://nginx.org/download/nginx-1.2.4.zip 下载后直接解压到你的硬盘上,我的是d:\nginx 启动nginx 查看任务任务管理器里面会有nginx的进程 在浏览器输