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

Posted

技术标签:

【中文标题】将 Nginx 配置为反向代理而不更改主机名【英文标题】:Configure Ngnix as reverse proxy without changing hostname 【发布时间】:2015-10-12 13:25:46 【问题描述】:

由于一些奇怪的项目要求,我正在尝试将 Ngnix 配置为反向代理,它使用传入请求中指定的相同主机名作为上游网关服务器。这应该可行的原因是,公共互联网 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 相同的主机名时,它被正确解析并且可以访问。

我在这里错过了什么?

【问题讨论】:

也许这会对你有所帮助:nginx.org/en/docs/http/ngx_http_core_module.html#resolver 【参考方案1】:

我们发现问题与我们的 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;
       
   

【讨论】:

在解析器后添加 ipv6=off 对我不起作用。还有什么原因?【参考方案2】:

你可以这样做:

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 中进行一些配置。

【讨论】:

他希望它是动态的而不是静态的。

以上是关于将 Nginx 配置为反向代理而不更改主机名的主要内容,如果未能解决你的问题,请参考以下文章

Nginx反向代理常用配置

Nginx实现多级反向代理客户端IP透传

nginx反向代理

全面介绍 Nginx 的反向代理 负载均衡 虚拟主机配置

如何使用 Nginx 反向代理将 Express-Gateway “主机”配置属性绑定到 localhost?

nginx反向代理负载均衡