代理服务器获取流量的方式Nginx代理方法Nginx如何支持WebSocketNginx配置WebSocket方法1.代理服务器获取流量客户端通常直接与Web服务器通信。那么当代理服务器作为客户端和服务器之间的“中介”时,代理服务器获取流量的方式有四种:修改客户端:配置客户端使用代理服务器,则客户端直接HTTP请求被有意发送到代理服务器。修改网络:网络基础设施设备可以使用多种技术手段拦截网络流量,并在客户端不知情或不参与的情况下将其导入代理。该代理称为拦截代理。修改DNS命名空间:代理服务器放在web服务器之前,替身,会直接伪装成web服务器的名称和IP地址修改web服务器:配置web服务器向客户端发送HTTP重定向命令,并将客户端的请求重定向到代理服务器。2、Nginx代理模式客户端与代理服务器建立连接,发送请求。代理服务器收到客户端的请求后,与特定的服务器建立连接,将请求分发给服务器进行处理,最后将服务器的响应结果反馈给客户端。3、Nginx如何支持WebSocketWebSocket和HTTP虽然是不同的协议,但是两者的“握手”方式是兼容的。通过HTTP升级机制,可以使用HTTPUpgrade和Connection协议头将连接从HTTP升级到WebSocket。如下图,Http升级为WebSocket,因为WebSocket协议是逐跳协议(这种header字段只对单次转发有效,会失效,因为转发到缓存/代理服务器),以便Nginx代理服务器可以将升级请求从客户端发送到后端服务器要求必须显式设置升级和连接标头。这个问题可以通过修改Nginx的配置文件来解决,如下所述。代理服务器分别与客户端和服务器建立连接。由于WebSocket连接要保持很长时间,所以代理服务器需要允许这些连接打开,而不是像HTTP使用的短连接那样关闭它们。4、Nginx通过修改nginx.conf配置来配置Websocket,如下图1.根据client请求中$http_upgrade的值构造map改变$connection_upgrade的值,即根据变量$http_upgrade的值和{}中的规则创建一个新变量$connection_upgrade并为其赋值。2、HTTP的Upgrade协议头机制,用于将连接从HTTP连接升级为WebSocket连接。Upgrade机制使用Upgrade协议头和Connection协议头;为了让Nginx将客户端的升级请求发送到后端服务器,必须显式设置升级和连接头信息。如上代码中第三个红圈所示。五、总结Http通过Http升级机制升级为WebSocket。Nginx代理服务器通过修改配置解决了WebSocket属于逐跳协议的问题,通过保持与客户端和服务端的连接始终打开来实现对WebSocket的代理。
