我有一个Nginx的testing环境,我有2个服务器块。 首先是使用server_name .DomainA.; 第二个是使用server_name DomainB.com; 除此之外,我的客户机的hosts文件已经将www.DomainA.test设置为服务器的IP,而我的服务器的hosts文件将DomainB.com设置为127.0.0.1。
我在用:
curl www.DomainA.test/a_test
打我的初始位置:
location /a_test { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://DomainB.com/b_test; }
现在,我的DomainB.com服务器块,我有这个位置:
location /b_test { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; return 200 "<html><head><title>Test :)</title></head><body>You are speaking to $host (B server)<br/>You have found $host:$server_port $request_uri</body></html>\n"; }
有了这个configuration,对于上面的curl,我得到了404。我偶然发现,如果我为.DomainA添加一个/ b_test位置。 服务器,从那里的结果将返回,所以显然不是要解决DomainB.com。 为DomainB.com添加上游(仅指向127.0.0.1)不会改变结果。
这是一个Nginx的怪癖,当我proxy_pass到相同的IP地址时,它不会查看其他服务器块吗? 或者也许我错过了文档中的某些东西? 这是可以/应该重写或proxy_redirect处理? 我的目标是向www.DomainA.test / a_test发送一个请求,让Nginx将其转发到DomainB.com/b_test后台,所有这些转发对客户端不可见。
麻烦的是,我将主机设置为$ host在location / a_test中。 它需要被设置为“DomainB.com”。