是否有配置可以更改Amazon Linux 2的名称解析器的行为,使其不忽略有关localhost
子域的条目?
目前,它正在:
docker run -it amazonlinux:2023 /bin/bash -c "echo '172.4.0.2 app.localhost' >> /etc/hosts ; curl -v app.localhost "
* Trying 127.0.0.1:80...
而centos(或ubuntu)“如预期”工作
docker run -it centos /bin/bash -c "echo '172.4.0.2 app.localhost' >> /etc/hosts ; curl -v app.localhost "
* Trying 172.4.0.2...
为什么我需要这个
在我们的本地开发环境中我有2个docker
1.一个是我们的主应用程序,运行在Amazon Linux 2上(尽可能接近生产环境)
1.一个包含其他HTTP服务的模拟
由于mock既需要由主应用程序从后端访问,也需要由前端访问,因此将mock命名为app.localhost允许
1.在前端使用的事实,我们不需要创建额外的/etc/hosts条目
1.前端和后端都使用包含主机名的相同name/env变量,这在生产中也是如此
我查了什么
1.都有相同的`/etc/host.conf配置
getent hosts app.localhost
用于两个返回172.4.0.2
- AmazonLinux 2的glic版本是
2.34
、centos2.28和ubuntu2.35,所以至少这不是glibc中的行为改变
1.修改/etc/nsswitch.conf
以匹配我的ubuntu
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
是否还有其他地方可能影响本地主机名的解析方式?
1条答案
按热度按时间col17t5w1#
差异来自
curl
的版本请参阅https://daniel.haxx.se/blog/2021/05/31/curl-localhost-as-a-local-host/,更具体地说,此提交https://github.com/curl/curl/commit/b5c0fe20e370ea2e5791fce4cedb34a71bc784e5#diff-e0b647f3e21a7fb58400dcec74f381d2fe16ca41e983240c15fc1243c574dbf9R733
例如,对于以
.localhost
结尾域名,curl直接返回127.0.0.1
并绕过所有名称解析。RFC 6761解释了
名称解析API和库应将本地主机名识别为特殊名称,并应始终返回地址查询的IP环回地址,并对所有其他查询类型返回否定响应。名称解析API不应将本地主机名称查询发送到其配置的缓存DNS服务器