我知道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将上游服务器视为代理本身。但是,我在网上搜索后无法找到如何做到这一点。
答案 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{