systemd:nginx 在启动时不解析 /etc/hosts 条目

systemd:nginx 在启动时不解析 /etc/hosts 条目

使用 Debian 9,systemd 的行为如下:

  • 启动时 nginx 似乎无法读取/etc/hosts并且无法启动
  • 开机后,当命令systemctl start nginx正常工作时

注意:该文件/etc/hosts是正确的,并且在所有测试期间保持不变。

搜索了一段时间,尝试systemd-resolved在nginx之前启动。没有影响。

10 月 13 日 11:14:01 server-dev systemd-resolved[466]:积极信任锚:
10 月 13 日 11:14:01 server-dev systemd-resolved[466]: 。在 DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
10 月 13 日 11:14:01 服务器开发 systemd-resolved[466]: 。 IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
10 月 13 日 11:14:01 server-dev systemd-resolved[466]:负信任锚:10.in-addr.arpa 16。 172.in-addr.arpa 17.172.in-addr.arpa 18.172。 in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172
10 月 13 日 11:14:01 服务器开发 systemd-resolved[466] :使用系统主机名“server-dev”。
10 月 13 日 11:14:01 server-dev systemd-resolved[466]:切换到系统 DNS 服务器 192.168.1.1。
10 月 13 日 11:14:01 server-dev shorewall[465]:使用 Shorewall 5.0.15.6 进行编译...
10 月 13 日 11:14:01 server-dev systemd[1]:启动网络名称解析。
10 月 13 日 11:14:01 server-dev systemd[1]:启动高性能 Web 服务器和反向代理服务器...
10 月 13 日 11:14:01 server-dev systemd[1]:达到目标多用户系统。
10 月 13 日 11:14:01 server-dev systemd[1]:达到目标图形界面。
10 月 13 日 11:14:01 server-dev systemd[1]:开始更新有关系统运行级别更改的 UTMP...
10 月 13 日 11:14:01 server-dev systemd[1]:开始更新有关系统运行级别更改的 UTMP。
10 月 13 日 11:14:01 server-dev nginx[502]: nginx: [emerg] 在 /etc/nginx/sites-enabled/default:33 的上游“server-dev.com”中找不到主机
10 月 13 日 11:14 :01 server-dev nginx[502]: nginx: 配置文件 /etc/nginx/nginx.conf 测试失败
10 月 13 日 11:14:01 server-dev systemd[1]: nginx.service: 控制进程已退出,code=exited status=1
10 月 13 日 11:14:01 server-dev systemd[1]: 无法启动高性能 Web 服务器和反向代理服务器。
10 月 13 日 11:14:01 server-dev systemd[1]:nginx.service:单元进入失败状态。
10 月 13 日 11:14:01 server-dev systemd[1]:nginx.service:失败,结果为“退出代码”。

有什么建议吗?

答案1

我找到了一个可行的解决方案,它链接到nginx 代理配置。我不清楚影响,欢迎评论或提出更好的解决方案。

  1. 安装 dnsmasq

  2. 在nginx配置中添加域名解析器

server {
# 将 DNS 请求重定向到本地 dnsmasq
解析器 127.0.0.1;

# 如果没有这两行,nginx 就无法正确解析名称
设置$mt_proxy_fromhttp://server-dev.com:8000“;
$mt_proxy_desthttps://server-dev.com";
[...]
location / {
# 代理配置
proxy_pass $mt_proxy_from;
proxy_read_timeout 90;
代理重定向 $mt_proxy_from $mt_proxy_dest;
}}

我不喜欢这个解决方案,因为它似乎效率不高:

  • 安装 dnsmasq 并向 nginx 添加解析器听起来不错
  • 添加 NGINX 动态变量来动态解析名称(不清楚什么时候?)看起来很奇怪,因为本地地址是固定的

问题:有什么办法可以做某事干净的

  • 配置IP地址/etc/hosts
  • /etc/hosts让 NGINX在 systemd 启动时解析名称?

资料来源:
https://stackoverflow.com/questions/8305015/when-using-proxy-pass-can-etc-hosts-be-used-to-resolve-domain-names-instead-of
https://www.jethrocarr.com/2013/11/02/nginx-reverse-proxies-and-dns-resolution/

相关内容