树莓派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
- 将Nginx、Dashy、Jellyfin加入同一个Docker网络(推荐),或在Nginx配置中使用宿主机私有IP(如
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',重启容器。
- Jellyfin:后台设置→网络→反向代理基础路径中填写
6. Nginx启动命令问题
当前命令用cp复制配置文件再tail -f /dev/null,不如直接挂载配置文件可靠,易出现权限或文件覆盖问题。
- 修复方案:删除自定义
command,改用配置文件挂载(参考第1步的Compose示例)。
验证步骤
- 重启所有Docker容器:
docker-compose down && docker-compose up -d - 查看Nginx日志排查错误:
docker logs nginx - 访问
https://你的公网域名/jellyfin和https://你的公网域名/dashy测试
内容的提问来源于stack exchange,提问作者Cheat3d
相关产品推荐
相关产品推荐

