小编kbo*_*ino的帖子

未解析的上游服务器地址是否有 nginx 变量?

当使用 nginx 作为上游块中一组服务器的反向代理时,是否有一个变量与未解析的服务器名称相对应?例如,考虑以下配置:

http {
    upstream foo {
        server foo1.example.com:8080;
        server foo1.example.com:8081;
        server foo2.example.com:8080;
        server foo2.example.com:8081;
    }
    server {
        server_name foo.example.com;
        location / {
            proxy_pass http://foo;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

foo.example.comfoo1.example.com、 和foo2.example.com分别为解析为 192.0.2.1、192.0.2.2 和 192.0.2.3 的定义名称。

假设有一个请求进来foo.example.com,nginx决定选择foo2.example.com8080端口作为上游服务器,请求成功。然后,据我所知,这些将是一些相关变量的值:

  • $host = foo.example.com
  • $proxy_host = foo
  • $upstream_addr = 192.0.2.3:8080(*)

但是,这些值都不与上游服务器配置中给定的值匹配。foo2.example.com:8080因此,更具体地说,我的问题是:在这种情况下哪个变量(如果有)的值为?

为了避免 XY 问题,这些是我试图完成的事情:

  1. 通过主机名而不是 IP 地址记录上游服务器,因为解析的 IP 地址可能是临时的或可能不支持 1:1 反向查找
  2. map上游服务器到另一条更有用的信息,也用于日志记录目的
  3. 当服务器不共享相同的证书时,为上游 SSL配置主机名验证(例如,via proxy_ssl_name)(这可能会产生一个自己的问题,但这不是唯一的用例)

(*) = 该变量$upstream_addr …

nginx

5
推荐指数
1
解决办法
3072
查看次数

标签 统计

nginx ×1