nginx proxy_pass到动态网址

时间:2018-08-30 18:08:10

标签: nginx reverse-proxy proxypass

我有多个后端服务器,我想使用一个nginx服务器实例代理所有服务器。每当添加新的后端服务器时,我都不想更改nginx.conf。

例如:服务器1:192.168.10.1:8080,服务器2:192.168.10.2:8080等 Nginx在example.com上运行。我想使用example.com?ip=192.168.10.1example.com?ip=192.168.10.2等访问Server1

我尝试了这种配置,但是它给出了500错误页面。

location / {
   proxy_pass http://$arg_ip:8080;
   proxy_set_header Host      $host;
   proxy_set_header X-Real-IP $remote_addr;
}

我缺少什么吗?还有其他方法可以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

server {
    server_name dynamic_host;
    listern 8080;

    #resolver 8.8.8.8;
    #seems you don't need resolver because you use ip address

    location / {
        if ( $arg_address != "" ) {
            proxy_pass $arg_address;

            #proxy_pass $arg_address$uri
            #proxy_pass $arg_address$request_uri
        }

    }
}

三个proxy_pass之间的区别

  1. $ proxy_address
    example.com?address=http://192.168.10.2:8080/转到 http://192.168.10.2:8080/

  2. $ proxy_address $ uri
    example.com/test/path?address=http://192.168.10.2:8080/转到
    http://192.168.10.2:8080/test/path

  3. $ proxy_address $ request_uri
    example.com/test/path?address=http://192.168.10.2:8080/&param=value转到
    http://192.168.10.2:8080/test/path?address=http://192.168.10.2:8080/&param=value

您可以将参数address更改为ip,在这种情况下,请不要忘记将$arg_address更改为$arg_ip
参考:
http://nginx.org/en/docs/http/ngx_http_core_module.html#variables