各位大佬看下我这个 Nginx 的泛解析反代咋处理?

2017-11-25 15:02:51 +08:00
 jowan

现公司有一台测试服务器,带公网 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  ~^(?<subdomain>.+)\.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.comb.dev.test.com 得到的访问结果都是 a.dev.test.net:90,注释这一行配置就正常,加这个设置的目的是想获取用户端真实的请求网址,但是注释掉的话,应用获取到的请求域名是代理的域名,也就是.net 那个网址,请问如何处理?

3169 次点击
所在节点    NGINX
5 条回复
kaneg
2017-11-25 16:21:20 +08:00
你可以试试把 $host 换成 $http_host
jowan
2017-11-25 16:36:04 +08:00
@kaneg 不行 只要开启了那段或者改成$http_host 都是一样,不管任意子域名得到的访问结果都是 ip:90,也就是说域名在这个时候不起作用了
Kokororin
2017-11-25 19:38:36 +08:00
试试 /t/308140
kaneg
2017-11-25 19:47:10 +08:00
@jowan

很可能你后端的*.dev.test.net 也用的虚拟主机,在这种情况下,要把前端的 server name 也配置到后端的 server alias 中去
jowan
2017-11-27 08:06:17 +08:00
@kaneg 确实是这个原因,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX