如何配置nginx作为代理的负载均衡器?

时间:2016-08-23 06:31:07

标签: curl nginx proxy

我知道nginx可以配置为充当负载均衡器,但我想知道是否可以在代理之间进行负载均衡?假设我有多个代理在localhost上运行,我想使用nginx提供单点连接,以便我可以在代理之间轮换。我试图实现类似于帖子here的东西,它使用的是HAProxy而不是nginx。我有以下nginx.conf

events {  }

http {
    upstream proxies {
        server localhost:9998;
        server localhost:9999;
        server localhost:10000;
    }
    server {
        listen 8080;

        location / {
            proxy_pass http://proxies;
        }
    }
}

但是,当我发送像这样的卷曲请求时:

curl http://icanhazip.com -x localhost:8080

它忽略了网址,如果我直接向其中一个代理服务器发送请求,我会得到类似于我预期的响应:

curl localhost:9999

当然,我并不认为它能够正常工作,因为必须有一些选项可以告诉nginx将上游服务器视为代理本身。但是,我在网上搜索后无法找到如何做到这一点。

3 个答案:

答案 0 :(得分:4)

nginx文档说上游是使用循环方法分发的。

  

默认情况下,使用a在服务器之间分配请求   加权循环平衡法

https://nginx.org/en/docs/http/ngx_http_upstream_module.html

答案 1 :(得分:1)

正如您在haproxy帖子中看到的haproxy akt作为转发代理

  

选项http_proxy

手册https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http_proxy

中描述了此选项的含义
  

有时人们需要一个纯HTTP代理   理解没有缓存的基本代理请求,也不了解任何幻想   特征。在这种情况下,可能值得设置HAProxy实例   设置“选项http_proxy”。在此模式下,没有声明服务器,   并将连接转发到找到的IP地址和端口   “http://”方案之后的URL。

     

不执行主机地址解析,因此仅在纯时才有效   传递IP地址。由于此选项的使用周长是相当的   有限的,它可能只会由知道他们需要的专家使用   确切地说。这与HTTP隧道模式不兼容。

据我所知,nginx没有此功能。

这是一个类似的问题。 https://superuser.com/questions/604352/nginx-as-forward-proxy-for-https

为什么不能使用链接帖子中描述的haproxy?

答案 2 :(得分:0)

您需要为加权或其他

的代理配置负载平衡规则

类似于max_fails = 1 fail_timeout = 10s;

        Can you put max_fails =1 and fail_timeout=10s; after the proxies

    server localhost:9998 max_fails =1 and fail_timeout=10s;
    server localhost:9999 max_fails =1 and fail_timeout=10s;
    server localhost:10000 max_fails =1 and fail_timeout=10s;


  change location /{ 
       to location @proxy{