在docker中使用nginx作为外部站点的反向代理时出错

在docker中使用nginx作为外部站点的反向代理时出错

我在 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

相关内容