繁体   English   中英

将Ngnix配置为反向代理而不更改主机名

[英]Configure Ngnix as reverse proxy without changing hostname

由于某些奇怪的项目要求,我试图将Ngnix配置为反向代理,该代理使用传入请求中指定的相同主机名作为上游网关服务器。 之所以可行,是因为公用Internet DNS将指向给定主机名的Ngnix服务器,但是本地Ngnix服务器的resolve.conf会将相同的主机名解析为本地网络上的计算机。

这是我尝试过的:

worker_processes  1;

events {
   worker_connections  1024;
}


http {
   include           mime.types;
   default_type      application/octet-stream;
   sendfile          on;
   keepalive_timeout 65;

   server {
       listen       80;

       location / {
           resolver 127.0.0.1;
           proxy_pass http://$host;
       }
   }
}

尝试提出请求时,我在错误日志中看到以下内容:

* 1028无法解析example.test.com(3:未找到主机),客户端:XXX.XXX.XXX.XXX,服务器:,请求:“ GET / HTTP / 1.1”,主机:“ example.test.com ,引荐来源网址:“ http://foo.com/bar.htm

当我从运行Ngnix的计算机ping相同的主机名时,它可以正确解析并且可以访问。

我在这里想念什么?

我们发现问题出在我们的DNS解析器不支持ipv6。 我们在Ngnix配置文件中禁用了ipv6,它可以正常工作。 只需在DNS解析程序地址后添加“ ipv6 = off”。

最终配置文件:

worker_processes  1;

events {
   worker_connections  1024;
}


http {
   include           mime.types;
   default_type      application/octet-stream;
   sendfile          on;
   keepalive_timeout 65;

   server {
       listen       80;

       location / {
           resolver 127.0.0.1 ipv6=off;
           proxy_pass http://$host;
       }
   }
}

您可以这样做:

worker_processes  1;

events {
   worker_connections  1024;
}
http {
   include           mime.types;
   default_type      application/octet-stream;
   sendfile          on;
   keepalive_timeout 65;

   server {
       listen 80;
       server_name example.test.com;

       location / {
           proxy_pass http://192.168.x.x;
       }
   }

   server {
       listen       80;

       location / {
           proxy_set_header Host $host;
           proxy_pass http://127.0.0.1;
       }
   }
}

编辑
抱歉,我不知道您需要动态配置。 我认为它还需要在PROXY SERVER中进行一些配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM