Nginx反向代理Gitea失效,访问域名仍显示默认页面求助
核心问题分析
你的Nginx配置存在两个关键错误,导致访问git.domain.com时匹配到了默认的default.conf:
监听端口不匹配
访问git.domain.com默认走HTTP 80端口,但你的git.domain.com.conf里的server块只监听2222和4000端口,Nginx收到80端口的请求时,找不到对应server块,就会 fallback到默认的default.conf。Proxy目标可能错误
你用http://xxx.xxx.xxx.xxx:4000作为代理目标,如果Gitea是和Nginx同主机的Docker容器,直接用外部IP可能存在网络连通问题(比如容器端口映射的是主机4000,但容器内部网络可能无法通过外部IP访问自己)。
修复步骤
1. 修改git.domain.com.conf的监听端口
将server块的监听端口改为80(HTTP默认端口),这样Nginx才能匹配到git.domain.com的请求:
server { listen 80; listen [::]:80; server_name git.domain.com; location / { proxy_pass http://gitea-container-name:3000; # 替换为Gitea容器名或内部IP,默认Gitea容器端口是3000 client_max_body_size 512M; 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; } }
注意:Gitea容器内部默认端口是
3000,如果你映射主机4000端口到容器3000,那代理目标应该用容器内部的3000端口(通过容器名或Docker网络IP访问),而不是主机的4000端口。
2. 确保Nginx加载配置文件
- 确认
git.domain.com.conf放在Nginx容器的/etc/nginx/conf.d/目录下(这是Nginx默认加载额外配置的目录)。 - 重启Nginx容器使配置生效:
docker restart nginx-container-name
3. 验证容器网络连通性
如果用容器名作为代理目标,需要确保Nginx和Gitea容器在同一个Docker网络中:
- 查看容器所属网络:
docker inspect nginx-container-name | grep Networks docker inspect gitea-container-name | grep Networks
- 如果不在同一网络,创建并加入网络:
docker network create git-proxy-net docker network connect git-proxy-net nginx-container-name docker network connect git-proxy-net gitea-container-name
4. 验证DNS解析
确保git.domain.com已经正确解析到你的服务器公网IP,可以用nslookup git.domain.com或ping git.domain.com验证。
测试验证
修改配置并重启Nginx后,访问git.domain.com,应该能正常跳转到Gitea页面。如果还是有问题,可以查看Nginx日志排查:
docker logs nginx-container-name
内容的提问来源于stack exchange,提问作者RiceEater

