为什么要使用Nginx作为websocket代理?

The*_*AAN 7 javascript nginx node.js

因此,我一直在阅读整个服务器设置,其中Nginx在nodejs之前用作反向代理,以便它在提供静态内容的同时允许节点执行动态工作。我的问题是,为什么有人要使用Nginx前端来反向代理Websocket?如果nginx提供静态内容(HTML,CSS,JS,媒体等),则提供的JS文件不能简单地使用ip地址和websocket在nodejs中侦听的端口直接连接到服务器服务器?为什么要通过nginx连接到服务器上的Websocket?还是我不清楚这种情况?谢谢!

Par*_*dav 7

WebSocket 应用程序在客户端和服务器之间保持长时间运行的连接,从而促进实时应用程序的开发。用于将连接从 HTTP 升级到 WebSocket 的 HTTP 升级机制使用 Upgrade 和 Connection 标头。反向代理服务器在支持 WebSocket 方面面临一些挑战。一个是 WebSocket 是一种逐跳协议,因此当代理服务器拦截来自客户端的升级请求时,它需要向后端服务器发送自己的升级请求,包括相应的标头。此外,由于 WebSocket 连接是长期存在的,与 HTTP 使用的典型的短期连接相反,反向代理需要允许这些连接保持打开状态,而不是因为它们似乎空闲而关闭它们。

NGINX 通过允许在客户端和后端服务器之间建立隧道来支持 WebSocket。为了让 NGINX 将升级请求从客户端发送到后端服务器,升级和连接标头必须明确设置,如下例所示:

location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
Run Code Online (Sandbox Code Playgroud)

完成后,NGINX 将其作为 WebSocket 连接处理。

更多详情请访问:- https://www.nginx.com/blog/websocket-nginx/ https://blog.martinfjordvald.com/2013/02/websockets-in-nginx/

希望这会有所帮助!

  • 您已经解释了“如何”,但我想知道“为什么”。当你可以直接引用nodejs服务器的IP地址和端口而不必通过Nginx时,你为什么要使用Nginx作为反向代理?因此,当您的静态内容(例如 js 文件)需要与节点通信时,您将使用 Nginx btu 提供所有静态内容,它只需直接设置一个 websocket 连接到它。你明白我的意思吗? (6认同)