Nginx proxy_pass 代理到同一台服务器

Nginx proxy_pass 代理到同一台服务器

我设置了一个 Nginx 测试环境,其中有 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";
}

使用此配置,对于上述 curl,我得到 404。我偶然发现,如果我为 .DomainA. 服务器添加 /b_test 位置,则将返回来自那里的结果,因此它显然不是在寻找解析 DomainB.com。为 DomainB.com 添加上游(仅指向 127.0.0.1)不会改变结果。

这是 Nginx 的一个怪癖吗?当我将 proxy_pass 发送到同一个 IP 地址时,它不会查看其他服务器块?或者我可能错过了文档中的某些内容?这是否可以/应该使用 rewrite 或 proxy_redirect 来处理?我的目标是仅向 www.DomainA.test/a_test 发送请求,并让 Nginx 在后台将其转发到 DomainB.com/b_test,而所有这些转发对于客户端来说都是不可见的。

答案1

问题是我将主机设置为位置 /a_test 中的 $host。它需要设置为“DomainB.com”。

答案2

你错过了“/”在最后

https://dev.to/danielkun/nginx-everything-about-proxypass-2ona

location /a_test/ {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://DomainB.com/b_test/;
}

相关内容