【问题标题】:How to configure nginx to act as a load balancer for proxies?如何将 nginx 配置为代理的负载均衡器?
【发布时间】:2016-12-29 20:24:59
【问题描述】:

我知道 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 请求时:

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

它会忽略 url,如果我像这样直接向其中一个代理服务器发送请求,我会得到类似于我所期望的响应:

curl localhost:9999

当然,我真的没想到它会起作用,因为必须有一些选项告诉 nginx 将上游服务器本身视为代理。但是,我在网上搜索后无法找到如何执行此操作。

【问题讨论】:

  • 我不确定你的问题,你的问题是什么,你在说什么代理——因为这里你的 nginx 负载均衡也是一个反向代理——?你的问题是你没有主机头吗?尝试在 proxy_pass 指令之后添加proxy_set_header Host $host;
  • 我正在尝试使用 nginx 在我设置的多个代理之间进行轮换。换句话说,我希望能够作为代理连接到 nginx 主机和端口(即 localhost:8080),并且它将在我设置的代理之间轮换
  • 好的,你试过主机吗?因为反向代理几乎是透明的,所以 nobdy 关心被代理的后端是最终服务器还是某个代理,但您需要知道您实际转发到代理的域。
  • 试过了,但由于某种原因似乎不起作用...顺便说一句,我能够在 AWS 上使用弹性负载均衡器和 EC2 实例集群设置相同的东西,但我必须为负载均衡器而不是 HTTP 设置 TCP 规则才能使其工作。不确定这里是否也是这种情况?
  • 知道HAProxy是否包含?我想使用您链接到的方法,但将代理列表保存在单独的文件中。

标签: curl nginx proxy


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您需要为加权或其他代理配置负载平衡规则

    类似 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{
    

    【讨论】:

    • 你能在这里提供完整的例子吗?
    【解决方案3】:

    正如您在 haproxy post 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?

    【讨论】:

    • HaProxy 不允许您在配置中包含文件。我想管理一个导入的 proxies.list 文件。 Nginx 确实有包含,但显然你不能将请求转发到 http 代理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2023-04-09
    • 1970-01-01
    • 2010-09-16
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多