2016-08-23 61 views
9

我知道,nginx可以配置为充当负载均衡器,但我想知道是否有可能在代理之间进行负载平衡?比方说,我有多个在本地主机上运行的代理,并且我想使用nginx提供单个连接点,以便我可以在代理之间轮换。我正在尝试实现类似于here的后续操作,该操作使用HAProxy而不是nginx。我有以下nginx.conf如何配置nginx充当代理的负载均衡器?

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的治疗UPS tream服务器作为代理本身。但是,在线搜索后,我无法找到如何做到这一点。

+0

我不确定你的问题,你的问题是什么,你叫什么叫代理 - 因为你在这里你的nginx负载均衡也是一个反向代理 - ?你的问题是你有没有主机头?尝试在proxy_pass指令之后添加'proxy_set_header Host $ host;'。 – regilero

+0

我正在尝试使用nginx在我设置的多个代理之间轮换。换句话说,我希望能够作为代理连接到nginx主机和端口(即localhost:8080),并且它将在我设置的代理之间旋转 –

+0

好了,您是否尝试过主机的东西?因为反向代理几乎是透明的,所以nobdy会关心被代理的后端是最终服务器还是一些代理,但是您需要知道您正在动态转发到代理的域是什么。 – regilero

回答

1

,你可以在你的HAProxy的后HAProxy的AKT看到作为转发代理

选项HTTP_PROXY

什么这个选项的意思是在手动https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http_proxy

描述

它有时会发生人们需要一个纯粹的HTTP代理,其中 可以理解基本代理请求而无需缓存,也不需要任何花哨的 功能。在这种情况下,可能需要使用“选项http_proxy”设置HAProxy实例 。在这种模式下,没有服务器被宣布, 和连接转发到IP地址和端口 的URL发现后的“http://”方案。

不进行主机地址解析,所以当纯 IP地址通过这仅适用。由于此选项的使用范围相当有限,因此只能由专家知道他们完全需要 。这与HTTP隧道模式不兼容。

就我所知,nginx没有这个功能。

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

为什么你不能使用链接文章中描述的haproxy?

+0

HaProxy不允许您在配置中包含文件。我想管理一个导入的proxies.list文件。 Nginx是否包含,但显然你不能转发请求到一个HTTP代理? – chovy

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{ 
+0

你能提供完整的例子吗? – chovy