招投标网站,建美食网站有哪些原因,广州建设信息网官网,网站的设计方案一、官方文档
WebSocket proxying 为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket#xff0c;使用了HTTP/1.1中可用的协议切换机制#xff08;RFC 2616: Hypertext Transfer Protocol – HTTP/1.1#xff09;。 然而#xff0c;这里有一个微妙之处:由于“升级”…一、官方文档
WebSocket proxying 为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket使用了HTTP/1.1中可用的协议切换机制RFC 2616: Hypertext Transfer Protocol – HTTP/1.1。 然而这里有一个微妙之处:由于“升级”是逐跳报头hop-by-hop因此它不会从客户端传递到代理服务器。使用正向代理客户端可以使用CONNECT方法来规避此问题。但是这不适用于反向代理因为客户端不知道任何代理服务器并且需要在代理服务器上进行特殊处理。 从1.3.13版本开始nginx实现了特殊的操作模式允许在客户端和代理服务器之间建立一个隧道如果代理服务器返回一个带有代码101(切换协议)的响应并且客户端通过请求中的“升级”头请求协议切换。 二、基础配置 只能处理websocket协议
如上所述包括“升级”和“连接”在内的逐跳报头不会从客户端传递到代理服务器因此为了让代理服务器知道客户端将协议切换到WebSocket的意图这些报头必须显式传递:
location /chat/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;
}简单来说是如果想要nginx支持websocket 需要配置
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;三、复杂配置 可以同时处理websocket和http协议
http {map $http_upgrade $connection_upgrade {default upgrade; close;}server {...location /chat/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}}map语法解释
当Upgrade是 ‘’ 的时候设置Connection 为close,其他默认设置成upgrade这样配置后nginx就可以同时处理websockt和http请求了。
总结
通过Http升级机制将Http升级为WebSocket。Nginx代理服务器通过修改配置的方式解决了WebSocket属于hop-by-hop协议的问题、并通过保持分别与客户端和服务端的连接一直处于打开状态从而实现WebSokcet的代理。