我在 ubuntu 服务器上运行 nginx,我已将其配置为网络中其他各种服务的通配符 SSL 前端代理。我仅将路由器上的 443 端口转发到 nginx,使用动态 DNS 将各种主机配置为指向我的路由器 IP,并将每个主机转发到相应的内部服务器。这是非常标准的东西,并且效果很好,例如我公开了我的安全摄像头 NVR、UniFi 控制器、Plex 等。
我正在将我的设置转换为docker,并且使用nginx作为代理时遇到了一个问题:
[emerg] 1#1: host not found in upstream "plex.home.foo.net" in /etc/nginx/nginx.conf:80
在 docker 中运行 nginx 作为反向代理时,我发现有很多关于此“上游未找到主机”错误的参考,并有多种解决方案,大多数涉及代理到其他容器,但没有一个我可以让其正常工作。
例如添加一个明确的解析器来指向docker google DNS,“解析器127.0.0.11”,并没有什么区别。
例如使用变量而不是 FQDN,但 nginx 不支持“proxy_redirect default”块中的变量。
例如将主机名作为参数传递“--add-host="plex.home.foo.net:192.168.1.47”,但这违背了 DNS 的目的。
例如,使用静态 IP 而不是 FQDN,但这违背了 DNS 的目的。
例如https://github.com/nginxinc/docker-nginx/issues/78
在我花太多时间在这个问题上之前,有谁使用 nginx 作为在 docker 中运行的反向代理,但在 docker 之外运行代理服务器?
nginx.conf 的代码片段:
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
server {
listen 443 ssl;
server_name xprotect.foo.net;
location / {
proxy_pass http://xprotect.home.foo.net:8081;
proxy_redirect default;
proxy_redirect http:// $scheme://;
}
}
答案1
感谢约翰指点我到这里: https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
nginx.conf 解析器不起作用:
resolver 192.168.1.1;
Docker DNS 选项确实有效:
--dns=192.168.1.1