如何在 nginx Nodejs 服务器上配置“ws”websocket?

Vin*_*itz 6 nginx websocket node.js

我目前正在尝试在 nginx debian 远程服务器上部署我的 NODEJS 应用程序。它在本地主机中运行得很好。但是我在让 websocket 在远程 nginx 服务器上工作时遇到一些困难。我使用“ws”nodejs 模块。

这就是我声明我的 websocket 服务器端的方式:

var WebSocket_ = require('ws');
var wss = new WebSocket_.Server({port: 40510});
Run Code Online (Sandbox Code Playgroud)

这就是我打开 websocket 客户端的方式:

var ws = new WebSocket('ws://localhost:40510');
Run Code Online (Sandbox Code Playgroud)

我知道我必须在我的 Nginx VPS 上配置 /etc/nginx/sites-available/default :

我是否需要添加 websocket 块位置并定义特定的 proxipass ?如果是的话怎么办?

我是否必须替换 var "ws = new WebSocket('ws://localhost:40510');" 通过我的客户端代码中的另一条指令?

预先感谢您的答复!

Mar*_*tos 7

如果您已经有一个服务器块,请将其放入其中(通常位于可用站点或 nginx.conf 内):

location /ws {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://localhost:40510;
}
Run Code Online (Sandbox Code Playgroud)

现在,根据您的 Nginx 侦听端口,您将配置客户端 IP/端口(默认情况下,Nginx 侦听端口 80)

var ws = new WebSocket('ws://localhost:80/ws');
Run Code Online (Sandbox Code Playgroud)

完整配置文件(示例):

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    fastcgi_buffers 64 4K;

    server {
        listen       localhost:80 default_server;
        server_name  localhost;

        # Logs
        access_log /var/log/nginx/main.access.log;
        error_log /var/log/nginx/main.error.log;

        # Websocket
        location /ws {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_pass http://localhost:40510;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)