You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4 Nginx反向代理配置问题求助

Nginx反向代理Dashy/Jellyfin失效排查与修复

核心问题梳理

树莓派4上通过Docker部署Dashy(端口9100)、Jellyfin(端口8096),已配置Nginx反向代理并生成Certbot证书,但仅能通过私有IP+端口访问服务,反向代理无法正常工作。以下是针对性排查和修复方案:

排查修复步骤

1. Docker网络连通性问题

你的Nginx容器使用独立的nginx网络,但Dashy/Jellyfin大概率在默认网络或其他自定义网络中,导致Nginx容器内的localhost无法指向宿主机的服务。

  • 修复方案:
    • 将Nginx、Dashy、Jellyfin加入同一个Docker网络(推荐),或在Nginx配置中使用宿主机私有IP(如192.168.x.x)代替localhost。
    • 修改Docker Compose,确保所有服务共用同一网络:
      version: '3.8'
      
      services:
        nginx:
          container_name: nginx
          image: nginx
          restart: unless-stopped
          volumes:
            # 直接挂载配置文件,替代复制命令
            - /portainer/Files/AppData/Config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
            - /etc/letsencrypt/live/你的公网域名/:/etc/ssl/certs:ro
          ports:
            - "80:80"   # 用于HTTP跳转HTTPS
            - "443:443" # 必须映射HTTPS端口
          networks:
            - service-network
      
        # 需将你的Dashy/Jellyfin配置加入同一网络
        dashy:
          # ... 你的Dashy原有配置 ...
          networks:
            - service-network
      
        jellyfin:
          # ... 你的Jellyfin原有配置 ...
          networks:
            - service-network
      
      networks:
        service-network:
          driver: bridge
      

2. Nginx端口映射缺失

当前Docker Compose仅映射了8080:80,但Nginx配置监听的是443端口(HTTPS),导致外部无法访问HTTPS服务。

  • 修复方案:添加443:443端口映射,同时保留80:80用于HTTP自动跳转到HTTPS。

3. SSL证书路径不匹配

你将Certbot证书挂载到/etc/ssl/certs,但nginx.conf中证书路径写的是/config/keys/,路径完全不匹配,导致Nginx无法加载证书。

  • 修复方案:修正nginx.conf中的证书路径:
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/certs/privkey.pem;
    ssl_trusted_certificates /etc/ssl/certs/fullchain.pem;
    

4. Nginx配置中的无效路径引用

你使用的是官方nginx镜像,但配置中引用了/config/目录(属于linuxserver版Nginx的目录结构),官方镜像不存在该目录,会导致Nginx启动失败。

  • 修复方案:删除所有指向/config/的include指令,修正后的nginx.conf核心部分:
    user root;
    pcre_jit on;
    error_log /var/log/nginx/error.log;
    include /etc/nginx/modules/*.conf;
    include /etc/nginx/conf.d/*.conf;
    
    events {
        worker_connections 1024;
    }
    
    http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        server_tokens off;
        client_max_body_size 0;
        sendfile on;
        tcp_nopush on;
        gzip_vary on;
    
        map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
    
        access_log /var/log/nginx/access.log;
    
        # 添加HTTP跳转HTTPS规则
        server {
            listen 80;
            server_name 你的公网域名;
            return 301 https://$server_name$request_uri;
        }
    
        server {
            listen 443 ssl http2;
            server_name 你的公网域名;
    
            ssl_certificate /etc/ssl/certs/fullchain.pem;
            ssl_certificate_key /etc/ssl/certs/privkey.pem;
            ssl_trusted_certificates /etc/ssl/certs/fullchain.pem;
    
            # 基础SSL安全配置(可选)
            ssl_protocols TLSv1.2 TLSv1.3;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
    
            location /jellyfin {
                proxy_pass http://jellyfin:8096; # 同一网络下用容器名直接解析
                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;
                # Jellyfin需WebSocket支持
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
            }
    
            location /dashy {
                proxy_pass http://dashy:9100; # 同一网络下用容器名直接解析
                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;
            }
        }
    }
    

5. 反向代理路径与服务基础URL不匹配

如果Dashy/Jellyfin未配置对应的基础路径,直接用/jellyfin反向代理会导致服务内部链接错误。

  • 修复方案:
    • Jellyfin:后台设置→网络→反向代理基础路径中填写/jellyfin,保存后重启容器。
    • Dashy:在conf.yml中设置appConfig.basePath: '/dashy',重启容器。

6. Nginx启动命令问题

当前命令用cp复制配置文件再tail -f /dev/null,不如直接挂载配置文件可靠,易出现权限或文件覆盖问题。

  • 修复方案:删除自定义command,改用配置文件挂载(参考第1步的Compose示例)。

验证步骤

  1. 重启所有Docker容器:docker-compose down && docker-compose up -d
  2. 查看Nginx日志排查错误:docker logs nginx
  3. 访问https://你的公网域名/jellyfin和https://你的公网域名/dashy测试

内容的提问来源于stack exchange,提问作者Cheat3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:57:21