使nginx重定向到随机端口

时间:2018-04-02 16:38:10

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

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

目前,我每个服务器上只运行一个节点应用程序,但理想情况下,我希望每台服务器上有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.

是否有任何东西可以让我做这样的事情,或者其他什么解决方案呢?

1 个答案:

答案 0 :(得分:0)

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;
      }
    }