技术解析

各位大佬看下我这个 Nginx 的泛解析反代咋处理?
0
2021-05-21 02:45:15
idczone

现公司有一台测试服务器,带公网 ip 的,但运营商没开 80 因为微信 web 应用必须要 80 才可以,也就无法直接在微信里面跑

因为我们测试的服务器要上线 N 多个测试项目,之前有 80 端口的时候直接将域名泛解析到服务器,然后服务器端绑各自子域名就可以用了

现在的方案: 将*.dev.test.com 泛解析到阿里云的开 80 的公网服务器, 将*.dev.test.net 泛解析到测试服务器,测试服务器每个项目绑定各自子域名 访问任意的 .dev.test.com ,阿里云的 nginx 都将自动反代带.dev.test.net:90

现做了如下配置,

server {
   listen       80;
   server_name  ~^(?.+)\.dev\.test\.com$;
   location / {
      抗投诉服务器resolver 114.114.114.114;
      proxy_pass http://$subdomain.dev.test.net:90;
      proxy_set_header   Host    $host;
      proxy_set_header   X-Real-IP   $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

但是只要设置了请求域名如下配置

proxy_set_header   Host    $host;

泛解析就起不到作用,不管访问什么,比如 a.dev.test.com 或 b.dev.test.com 得到的访问结果都是 a.dev.test.net:90,注释这一行配置就正常,加这个设置的目的是想获取用户端真实的请求网址,但是注释掉的话,应用获取到的请求域名是代理的域名,也就是.net 那个网址,请问如何处理?


你可以试试把 $host 换成 $http_host

不行 只要开启了那段或者改成$http_host 都是一样,不管任意子域名得到的访问结果都是 ip:90,也就是说域名在这个时候不起作用了

试试 /t/308140


很可能你后端的*.dev.test.net 也用的虚拟主机,在这种情况下,要把前端的 server name 也配置到后端的 server alias 中去

确实是这个原因,感谢!

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服