关于javascript:为什么使用nginx作为websocket代理?

Why use nginx as websocket proxy?

所以我一直在阅读整个服务器设置,其中nginx在nodejs前面用作反向代理,这样它就可以在允许节点执行动态操作的同时提供静态内容。我的问题是,为什么有人要使用nginx前端来反向代理WebSocket?如果nginx提供静态内容(html、css、js、media等),那么所提供的js文件就不能直接通过nodejs服务器中websocket监听的IP地址和端口连接到服务器吗?为什么要通过nginx连接到服务器上的websocket?还是我不清楚这种情况?谢谢您!


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

nginx通过允许在客户端和后端服务器之间设置隧道来支持websocket。为了让nginx从客户端向后端服务器发送升级请求,必须显式设置升级和连接头,如本例所示:

1
2
3
4
5
6
location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection"upgrade";
}

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

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

希望这能有所帮助!