nginx代理通行证不适用于docker容器



我让nginx在IP为192.168.1.2的主机上的docker容器中运行。我还有其他一些码头集装箱在同一台机器上运行:sonarr、radarr、portainer等。

在nginx-conf中,我有一些规则允许在没有端口的情况下基于本地DNS访问这些容器

server {
server_name sonarr.lan;
location / { proxy_pass http://192.168.1.2:8989; }
}

然后我可以通过在浏览器中键入sonarr.lan来访问sonarr应用程序。当然,我也把sonarr.lan放在我的路由器的静态DNS表中,以允许这样做。

但我希望它们能以不同的风格访问服务器。lan/app我试着像一样

server {
listen 80 default;
server_name server.lan;
root /var/www;
# docker apps
location /sonarr/           { proxy_pass http://192.168.1.2:8989/; }
location /radarr/           { proxy_pass http://192.168.1.2:7878/; }
location /jackett/          { proxy_pass http://192.168.1.2:9118/; }
location /plex/             { proxy_pass http://192.168.1.2:32400/; }
location /qbittorrent/      { proxy_pass http://192.168.1.2:8068/; }
location /calibre/          { proxy_pass http://192.168.1.2:8083/; }
location /cops/             { proxy_pass http://192.168.1.2:8084/; } # working
location /homeassistant/    { proxy_pass http://192.168.1.2:8123/; }
location /grafana/          { proxy_pass http://192.168.1.2:3000/; }
location /nodered/          { proxy_pass http://192.168.1.2:1880/; } # working
location /portainer/        { proxy_pass http://192.168.1.2:9000/; } # working
}

当我试图通过在浏览器中键入server.lan/sonarr来访问sonarr应用程序时,我只看到空页面。没有错误,但也没有通常的内容。服务器响应200和只有一行文本的白色空白页Sonarr版本Radarr也有同样的问题。其中一些会给我错误500或未经授权的错误。在家庭助理上-我看到背景,但页面上没有信息。只有3个应用程序按预期工作。

怎么了?为什么他们的行为如此不同?

只是猜测。

您的主机(IP(上是否只有一些端口可用?或者容器中的端口与主机上的端口不同?检查方式:

docker container ls --format "table {{.ID}}t{{.Names}}t{{.Ports}}" -a

或者在Linux上;show sockets":

sudo ss -ltpn

下一个猜测。

也许有些web应用程序存在无法在/上提供服务的问题。

而不是修复:

用子域试试?

map $host $port_
{
hostnames;
default                  8989;  # sonarr
sonarr.server.lan        8989;
radarr.server.lan        7878;
# …
}
server
{
listen 80 default;
server_name ~ .server.lan$;
root /var/www;
# docker apps
location /
{
include proxy_params;
proxy_pass http://192.168.1.2:$port_;
}
}

完全未经测试。

一些容器(adguard(也有同样的问题,但其他容器可以

尝试在代理通行证中使用容器IP而不是主机IP;然后删除root/var/www;

最新更新