我让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;