最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

WebSocket NGINXNODEJS粘性问题

IT培训 admin 3浏览 0评论

WebSocket NGINX / NODEJS粘性问题

我正在编写Web套接字项目,一切都像预期的那样(本地),我使用:

  1. NGINX作为WebSockets代理
  2. NODEJS作为后端服务器
  3. WS作为websocket模块:ws

NGINX配置:

map $http_upgrade $connection_upgrade {
     default upgrade;
     ''      close;
}
upstream backend_cluster {
    server 127.0.0.1:5050;
}

# Only retry if there was a communication error, not a timeout.
proxy_next_upstream error;
server {
    access_log /code/logs/access.log;
    error_log /code/logs/error.log  info;
    listen    80;
    listen    443 ssl;
    server_name  mydomain;
    root html;

    ssl_certificate         /code/certs/sslCert.crt;
    ssl_certificate_key     /code/certs/sslKey.key;
    ssl_protocols           SSLv3 TLSv1 TLSv1.1 TLSv1.2; # basically same as apache [all -SSLv2]
    ssl_ciphers             HIGH:MEDIUM:!aNULL:!MD5;

    location /websocket/ws {
    proxy_pass http://backend_cluster;
    proxy_http_version 1.1;
    proxy_redirect off ;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    }
}    

就像我提到的那样,在本地和在开发环境中的一台机器上工作得很好,我担心的问题是当我们要进入生产时,在生产环境中将有更多的那个nodejs服务器。在生产中,nginx的配置将类似于:

upstream backend_cluster {
    server domain1:5050;
    server domain2:5050;
}

所以我不知道NGINX如何解决粘性问题,这意味着我怎么知道在一台服务器上完成'HANDSHAKE /升级'后,如何知道继续使用同一台服务器,有没有办法告诉NGINX坚持使用同一台服务器?

我希望我能清楚自己。提前致谢

回答如下:

使用此配置:

upstream backend_cluster {
    ip_hash;                    
    server domain1:5050;
    server domain2:5050;
}

WebSocket NGINX / NODEJS粘性问题

我正在编写Web套接字项目,一切都像预期的那样(本地),我使用:

  1. NGINX作为WebSockets代理
  2. NODEJS作为后端服务器
  3. WS作为websocket模块:ws

NGINX配置:

map $http_upgrade $connection_upgrade {
     default upgrade;
     ''      close;
}
upstream backend_cluster {
    server 127.0.0.1:5050;
}

# Only retry if there was a communication error, not a timeout.
proxy_next_upstream error;
server {
    access_log /code/logs/access.log;
    error_log /code/logs/error.log  info;
    listen    80;
    listen    443 ssl;
    server_name  mydomain;
    root html;

    ssl_certificate         /code/certs/sslCert.crt;
    ssl_certificate_key     /code/certs/sslKey.key;
    ssl_protocols           SSLv3 TLSv1 TLSv1.1 TLSv1.2; # basically same as apache [all -SSLv2]
    ssl_ciphers             HIGH:MEDIUM:!aNULL:!MD5;

    location /websocket/ws {
    proxy_pass http://backend_cluster;
    proxy_http_version 1.1;
    proxy_redirect off ;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    }
}    

就像我提到的那样,在本地和在开发环境中的一台机器上工作得很好,我担心的问题是当我们要进入生产时,在生产环境中将有更多的那个nodejs服务器。在生产中,nginx的配置将类似于:

upstream backend_cluster {
    server domain1:5050;
    server domain2:5050;
}

所以我不知道NGINX如何解决粘性问题,这意味着我怎么知道在一台服务器上完成'HANDSHAKE /升级'后,如何知道继续使用同一台服务器,有没有办法告诉NGINX坚持使用同一台服务器?

我希望我能清楚自己。提前致谢

回答如下:

使用此配置:

upstream backend_cluster {
    ip_hash;                    
    server domain1:5050;
    server domain2:5050;
}

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论