使用Nginx-proxy-manager代理Docker中pypi服务器遇404页面未找到错误
问题场景
借助Cloudflare域名、DNS及Nginx Proxy Manager在个人服务器部署pypi私有仓库,遇到以下问题:
- 已通过docker-compose部署Nginx Proxy Manager(映射80/81/443端口)和pypi-server(映射8080端口)
- Cloudflare DNS已配置域名指向服务器公网IP,所有相关端口已开放
- 私网IP直接访问pypi-server完全正常,但通过域名访问时返回404 page not found
- 更换SSL证书生成方式、测试ArgoCD站点均出现相同404错误,pypi容器与Nginx日志无报错
服务配置文件
Nginx Proxy Manager docker-compose.yaml
version: '3.8' name: nginx-proxy-manager services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
pypi-server docker-compose.yaml
version: '3.7' services: pypi-server: image: pypiserver/pypiserver:latest ports: - 8080:8080 volumes: - type: bind source: /home/ec2-user/pypi/auth target: /data/auth - type: volume source: pypi-server target: /data/packages command: -P /data/auth/.htpasswd -a update,download,list /data/packages restart: always volumes: pypi-server:
排查与解决方向
核对Nginx Proxy Manager代理主机配置
- 确认代理主机的域名与Cloudflare DNS记录完全一致(注意www/非www前缀匹配)
- 验证转发主机IP为服务器正确的私网IP,不要填公网IP(容器同服务器内通信优先用私网IP)
- 确认转发端口为8080,且未勾选“Websocket支持”(pypi-server无需该配置,误开可能导致路由异常)
- 检查“高级”选项卡的自定义Nginx配置,是否存在多余的路径重写规则导致404
验证Cloudflare DNS与代理设置
- 确认Cloudflare DNS记录的代理状态:若开启橙色云朵(Cloudflare代理),需将SSL模式设为“完整”或“严格”,与Nginx Proxy Manager的SSL证书匹配;若用灰色云朵(仅DNS),确保SSL配置仅在Nginx端生效
- 用
nslookup <你的域名>或dig <你的域名>验证域名解析是否正确指向服务器公网IP,避免DNS缓存干扰
检查Docker容器间网络连通性
- 在Nginx Proxy Manager容器内测试能否访问pypi-server:
docker exec -it nginx-proxy-manager-app-1 bash curl http://<服务器私网IP>:8080 - 如果无法访问,说明容器间网络隔离,需将两个服务加入同一自定义网络:
先创建网络:docker network create pypi-network
然后修改两个docker-compose.yaml,添加网络配置:
重启两个服务后再测试连通性# 给Nginx Proxy Manager添加 services: app: networks: - pypi-network networks: pypi-network: external: true # 给pypi-server添加 services: pypi-server: networks: - pypi-network networks: pypi-network: external: true
- 在Nginx Proxy Manager容器内测试能否访问pypi-server:
检查Nginx Proxy Manager默认站点
- 进入Nginx Proxy Manager后台的“主机”页面,删除或禁用默认的示例站点,避免其抢占域名请求
查看详细访问日志
- 提取Nginx访问日志中的404相关记录,定位请求的转发情况:
从日志可明确请求的域名、路径、转发目标,判断是否是规则未匹配docker logs nginx-proxy-manager-app-1 | grep -i "404"
- 提取Nginx访问日志中的404相关记录,定位请求的转发情况:
内容的提问来源于stack exchange,提问作者Herence
相关产品推荐
相关产品推荐

