将 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 配置为反向代理而不更改主机名的主要内容,如果未能解决你的问题,请参考以下文章