【问题标题】:Using nginx map directive to dynamically set proxy upstream使用 nginx map 指令动态设置代理上游
【发布时间】:2018-10-11 18:53:37
【问题描述】:

我正试图让我的 Nginx 更干一点,因为它充当了近 20 台服务器的反向代理。这就是我想要做的,所有的主机名和东西都被改变了/例子:

map $http_host $backend {
    baz.mydomain.com       hostname1:8080;
    foo.mydomain.com       192.168.1.10:8081;
    bar.mydomain.com       hostname2:1234;
    ham.mydomain.com       hostname2:5678;
}

server {
    listen                      443 ssl http2;
    server_name                 .mydomain.com;

    ssl_certificate             /usr/share/nginx/certs/mydomain.com.pem;
    ssl_certificate_key         /usr/share/nginx/certs/mydomain.com.key;

    location / {
        proxy_redirect          http:// https://;
        proxy_pass              http://$backend;
    }
}

问题是无论如何,这总是会产生一个糟糕的网关错误。我已经尝试了一些变体并移动了一些东西,有和没有通配符 server_name,使用 $host 而不是 $http_host 但到目前为止我无法让它工作。我是否以正确的方式去做这件事?我真的不希望我的配置中有近 20 个单独的虚拟服务器条目。

在 nginx 文档中没有很多关于使用这样的地图的帮助,网上也没有很多帮助,除了一篇非常古老的帖子在这里简要提到了类似的东西:https://serverfault.com/questions/342309/how-to-write-a-dry-modular-nginx-conf-reverse-proxy-with-named-locations

【问题讨论】:

    标签: nginx nginx-location nginx-reverse-proxy


    【解决方案1】:

    我明白了。问题是它不喜欢在列表中包含主机名。需要主机名,因为所有这些地址都是动态分配的。上游指令解决了这个问题,如下所示:

    upstream bazhost {server hostname1:8080;}
    upstream foohost {server 192.168.1.10:8081;}
    upstream barhost {server hostname2:1234;}
    upstream hamhost {server hostname2:5678;}
    
    map $http_host $backend {
        baz.mydomain.com       bazhost;
        foo.mydomain.com       foohost;
        bar.mydomain.com       barhost;
        ham.mydomain.com       hamhost;
    }
    
    server {
        listen                      443 ssl http2;
        server_name                 .mydomain.com;
    
        ssl_certificate             /usr/share/nginx/certs/mydomain.com.pem;
        ssl_certificate_key         /usr/share/nginx/certs/mydomain.com.key;
    
        location / {
            proxy_redirect          http:// https://;
            proxy_pass              http://$backend;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2021-08-06
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多