Url rewriting 当使用proxy_pass时,是否可以使用/etc/hosts来解析域名,而不是使用";分解器;?

Url rewriting 当使用proxy_pass时,是否可以使用/etc/hosts来解析域名,而不是使用";分解器;?,url-rewriting,nginx,reverse-proxy,Url Rewriting,Nginx,Reverse Proxy,使用代理传递时是否可以使用/etc/hosts代替解析器 我需要向同一台nginx机器执行代理传递。是否有方法使用计算机的/etc/hosts文件解析域,而不是通过“resolver”属性指定DNS服务器 这将为我节省到达同一服务器所需的额外跳数。我已尝试在/etc/hosts文件中设置映射到DNS的内部IP,但nginx仍在从解析器属性中设置的DNS服务器读取。或者有一种方法可以让HtpPosiver模块考虑/ETC/HOST文件设置? 谢谢你给我的建议 这是我在nginx论坛上发布的同一个问

使用代理传递时是否可以使用/etc/hosts代替解析器

我需要向同一台nginx机器执行代理传递。是否有方法使用计算机的/etc/hosts文件解析域,而不是通过“resolver”属性指定DNS服务器

这将为我节省到达同一服务器所需的额外跳数。我已尝试在/etc/hosts文件中设置映射到DNS的内部IP,但nginx仍在从解析器属性中设置的DNS服务器读取。或者有一种方法可以让HtpPosiver模块考虑/ETC/HOST文件设置?

谢谢你给我的建议

这是我在nginx论坛上发布的同一个问题:

您可以通过安装
dnsmasq
并将解析器设置为
127.0.0.1
来解决此问题。基本上,它使用您的本地DNS作为解析程序,但它只解析它所知道的内容(其中包括您的
/etc/hosts
),并将其余内容转发到您的默认DNS。

一个解决方法是使用Nginx映射,以便复制
/etc/hosts
内容

map $wanted_host $wanted_host_ip
{
    default 127.0.0.1;
    b.dev.local X.X.X.X;
    a.dev.local X.X.X.X;
}

server
{
    listen              80;
    server_name         ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_host>.+?)\.HOSTNAME$;

    location /
    {
        proxy_pass http://$wanted_host_ip:$wanted_port;

    }
}
映射$wanted\u主机$wanted\u主机\u ip
{
默认127.0.0.1;
b、 dev.local X.X.X.X;
a、 dev.local X.X.X.X;
}
服务器
{
听80;
服务器名称^(?P[0-9]+?)-(?P.+?)\.HOSTNAME$;
位置/
{
代理传递http://$wanted\u主机\u ip:$wanted\u端口;
}
}

这将像解析程序一样将
wanted\u host
映射到
wanted\u host\u ip

但遗憾的是
dnsmasq
不会自动检测到
hosts
文件中的更改。您必须发送
HUP
。您能否提供有关如何设置dnsmasq以使我们的nginx正确解析其他容器dns名称的更多详细信息?仅安装dnsmasq并向我的docker-compose.yml配置中添加额外的\u主机:-“container\u name:127.0.0.1”并没有解决此问题。如果您使用docker,我认为DNS的工作方式有点不同,尤其是在进行容器到容器的通信时。查看以了解更多信息。奇怪的是,如果您使用上游(主机解析),这是可行的。上游也适用于我,这是一点额外的代码,但它似乎比下面列出的其他一些方法更干净。如果使用带systemd的服务器,也可以解决与systemd有关的问题。看到这个答案了吗?如果有多个(子)域,其中只有一个IP不足以知道要命中哪个虚拟服务器,那么这个问题是否可行?当然,如果解决了这个问题,您可以将域用作X.X.X.X。