【问题标题】:make nginx redirect to random port使 nginx 重定向到随机端口
【发布时间】:2018-09-11 21:30:08
【问题描述】:

我正在为我的网站设置负载平衡器。我想手动完成,以便完全控制请求的重新路由方式。我使用 AWS EBS 在 2 个 ec2 实例之间进行负载平衡,效果很好。每个 ec2 实例都使用 nginx 作为 nodejs 的反向代理。

目前,我在每台服务器上只运行 1 个节点应用程序,但理想情况下,我希望在每台服务器上运行 4 个节点应用程序(每个核心 1 个)。

我在想一个非常简单的管理方法是允许 nginx 在 8081 和 8084 之间选择一个随机端口并重定向到其中一个应用程序。从理论上讲,这样我会尽可能均匀地平衡负载。

目前这是我设置的 nginx 反向代理:

server {
    client_max_body_size 200M;
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    location / {
        client_max_body_size 200M;
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Real-User-Agent $http_user_agent;
        proxy_set_header Connection 'upgrade';
        proxy_set_header X-serv-ip 'my.server.ip';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
  }
}

基本上,我的问题归结为是否有某种方法可以创建像 $rand_port 这样的变量,并且每次发出请求时,$rand_port 都设置为 8081、8082、8083 或 8084,然后在我的 proxy_pass 中我可以做类似的事情:

proxy_pass http://localhost:{$rand_port} #not sure if the syntax is right.

有什么可以让我做这样的事情,或者有什么其他的解决方案吗?

【问题讨论】:

  • 你试过PM2。它可以启动与您拥有的核心数量相同数量的节点服务器(或者如果您愿意,可以更少)。这样,你的 nginx 只需要一个端口映射,其余的映射都由 PM2 完成。

标签: node.js amazon-web-services nginx load-balancing


【解决方案1】:

nginx load balancing 允许您确定算法...如果您只需要每个服务器均等负载,请使用此

    upstream myproject {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
        server 127.0.0.1:8084;
    }

    server {
        client_max_body_size 200M;
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;

        location / {
            client_max_body_size 200M;
            proxy_pass http://myproject;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Real-User-Agent $http_user_agent;
            proxy_set_header Connection 'upgrade';
            proxy_set_header X-serv-ip 'my.server.ip';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
      }
    }

【讨论】:

  • 您好,非常感谢您的回答。我尝试了这个并遇到了 2 个问题: 1. 我尝试将其放入我的 /etc/nginx/sites-available/default 文件中,但它给了我一个错误,即此处不允许使用 http 指令。 2. 然后我摆脱了 http 指令,并尝试了它,但我的网站没有响应。但是我给了它大约一分钟,然后再次尝试,它似乎有效。我认为可能是重新启动 nginx 后需要几秒钟来配置上游服务器?无论如何,它工作得很好,谢谢!
  • 它应该在/etc/nginx/sites-enabled/default 文件中,因为它没有符号链接。
猜你喜欢
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多