首页 文章

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

提问于
浏览
0

由于一些奇怪的项目要求,我试图将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相同的主机名时,它被正确解析并且可以访问 .

我在这里错过了什么?

2 回答

  • 3

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

    你可以这样做:

    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;
           }
       }
    }
    

    EDIT
    对不起,我不知道你需要动态配置 . 但我认为它还需要在PROXY SERVER中进行一些配置 .

相关问题