子域名下Nginx部署Gogs无法正常访问问题求助
我之前在OpenMediaVault上折腾Gogs+Nginx反向代理的时候,也踩过和你一样的坑——明明配置了Nginx,子域名就是访问不了。给你梳理下我当时排查和解决的步骤,应该能帮你搞定:
1. 先确认子域名能解析到OMV服务器
这是很多人忽略的第一步:不管是用局域网DNS服务器(比如路由器里设置域名映射),还是在本地机器的hosts文件里添加条目,必须确保git.domainname或gogs.domainname能指向你的OMV服务器局域网IP。
- 测试方法:在本地终端输入
ping git.domainname,如果返回的IP不是你的OMV服务器,先把这个问题解决——DNS解析不对的话,Nginx根本接不到请求。
2. 修正Nginx反向代理配置
你提到已经在sites-available里加了配置并软链到sites-enabled,但大概率是配置细节没做对。把你的配置替换成标准的反向代理配置试试:
- 创建/编辑Nginx配置文件:
sudo nano /etc/nginx/sites-available/gogs - 粘贴以下内容(注意替换成你的子域名):
server { listen 80; server_name git.domainname gogs.domainname; # 同时支持两个子域名,按需修改 location / { proxy_pass http://127.0.0.1:3000; # 这些Header配置很重要,不然Gogs获取不到正确的请求信息 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; } }
- 重新建立软链(如果之前的软链有问题,先删除再重建):
sudo rm -f /etc/nginx/sites-enabled/gogs sudo ln -s /etc/nginx/sites-available/gogs /etc/nginx/sites-enabled/
3. 验证Nginx配置并重启服务
配置写完后一定要先检查语法,不然重启Nginx会失败:
- 执行
sudo nginx -t,如果输出nginx: configuration file /etc/nginx/nginx.conf test is successful才继续,否则根据报错信息修正配置(比如括号没闭合、拼写错误)。 - 重启Nginx:
sudo systemctl restart nginx,或者直接在OMV的Web界面「服务」模块里找到Nginx重启。
4. 调整Gogs的基础配置
Gogs需要知道自己的外部访问地址,不然跳转链接、克隆地址都会出问题:
- 方法一:登录Gogs后台(
http://domainname:3000/admin),找到「配置」→「服务器设置」,把「域名」改成git.domainname,「根URL」改成http://git.domainname/,同时把「监听地址」改成127.0.0.1(只让Nginx访问,更安全)。 - 方法二:直接修改Gogs的配置文件(OMV上如果是原生安装,路径一般是
/etc/gogs/app.ini;如果是Docker部署,要找映射出来的配置文件或者进入容器修改),找到[server]段:
DOMAIN = git.domainname ROOT_URL = http://git.domainname/ HTTP_ADDR = 127.0.0.1 HTTP_PORT = 3000
- 重启Gogs服务:
sudo systemctl restart gogs(原生安装),或者docker restart gogs(Docker部署)。
5. 排查防火墙与OMV端口限制
OMV默认可能有防火墙规则,要确保80端口在局域网内是开放的:
- 登录OMV Web界面,进入「防火墙」模块,检查入站规则里是否允许80端口的访问,如果没有就添加一条允许规则。
- 如果是Docker部署的Gogs,还要确认容器的端口映射是
127.0.0.1:3000->3000/tcp,而不是0.0.0.0:3000->3000/tcp(当然0.0.0.0也能工作,但后者会直接暴露Gogs端口,不如只让Nginx访问安全)。
做完这些步骤后,再试试访问http://git.domainname,应该就能正常打开Gogs了。如果还是不行,查看Nginx的日志找线索:
- 访问日志:
sudo tail -f /var/log/nginx/access.log,看有没有来自你本地IP的请求记录。 - 错误日志:
sudo tail -f /var/log/nginx/error.log,看有没有报错信息(比如连接Gogs端口失败、配置错误)。
内容的提问来源于stack exchange,提问作者Roland H.
相关产品推荐
相关产品推荐

