在内网环境中为 Gogs 配置 HTTPS 访问,虽然不需要公网域名,但仍需通过自签名证书或私有证书实现加密。以下是详细步骤和方案:
一、核心方案选择
方案 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
自签名证书 | 快速测试、临时使用 | 无需域名,快速生成 | 浏览器提示“不安全” |
私有 CA 证书 | 企业内网统一管理 | 所有设备信任私有 CA,无警告 | 需维护私有 CA 基础设施 |
反向代理 HTTPS | 集中管理多服务 HTTPS | 统一证书管理,灵活配置 | 需部署反向代理(如 Nginx) |
二、使用自签名证书配置 HTTPS
1. 生成自签名证书
bash # 生成私钥和证书(有效期365天) openssl req -x509 -newkey rsa:4096 -nodes -keyout gogs.key -out gogs.crt -days 365 -subj "/CN=192.168.1.100" # 替换为内网IP或主机名
2. 配置 Gogs 使用 HTTPS
编辑 Gogs 配置文件 custom/conf/app.ini
:
[server] DOMAIN = 192.168.1.100 # 内网IP或主机名 HTTP_PORT = 3000 ROOT_URL = https://192.168.1.100/ # 必须使用 HTTPS PROTOCOL = https CERT_FILE = /path/to/gogs.crt # 证书路径 KEY_FILE = /path/to/gogs.key # 私钥路径
3. 重启 Gogs 服务
sudo systemctl restart gogs
4. 客户端信任自签名证书
Windows:双击
.crt
文件,选择“安装证书” → “本地计算机” → “受信任的根证书颁发机构”。Linux:
bash
sudo cp gogs.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
三、通过反向代理实现 HTTPS(推荐)
1. 使用 Nginx 反向代理
生成自签名证书(同上)。
配置 Nginx(示例):
server { listen 443 ssl; server_name 192.168.1.100; # 内网IP或主机名 ssl_certificate /path/to/gogs.crt; ssl_certificate_key /path/to/gogs.key; location / { proxy_pass http://127.0.0.1:3000; # 转发到 Gogs 的 HTTP 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } }
重启 Nginx:
sudo systemctl restart nginx
2. 调整 Gogs 配置
确保 ROOT_URL
与反向代理地址一致:
[server] ROOT_URL = https://192.168.1.100/ # 与 Nginx 的 server_name 一致 PROTOCOL = http # Gogs 本身运行 HTTP,由 Nginx 处理 HTTPS
四、使用私有 CA 证书(企业级方案)
1. 创建私有 CA
# 生成 CA 私钥和根证书 openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=My Internal CA"
2. 签发 Gogs 证书
# 生成证书请求 openssl req -newkey rsa:4096 -nodes -keyout gogs.key -out gogs.csr -subj "/CN=192.168.1.100" # 使用 CA 签发证书 openssl x509 -req -in gogs.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out gogs.crt -days 365
3. 配置 Gogs 或反向代理
将
gogs.crt
和gogs.key
配置到 Gogs 或 Nginx(参考上文步骤)。在所有客户端安装
ca.crt
到受信任的根证书颁发机构。
五、验证 HTTPS 访问
浏览器访问:打开
https://192.168.1.100
,确认无安全警告。CURL 测试:
curl -k https://192.168.1.100 # 忽略证书验证(测试用) curl --cacert /path/to/ca.crt https://192.168.1.100 # 使用私有 CA 验证
六、常见问题解决
浏览器提示“不安全”
自签名证书需手动信任(安装到系统根证书)。
私有 CA 证书需提前部署到所有客户端。
Gogs 页面资源加载失败
检查ROOT_URL
是否配置为 HTTPS,避免混合 HTTP/HTTPS 内容。端口冲突
确保 Nginx 或 Gogs 未占用相同端口(如 443)。
开放防火墙:
sudo ufw allow 443/tcp
七、优化建议
自动化证书管理:使用
mkcert
工具快速生成本地可信证书:mkcert 192.168.1.100 # 自动生成浏览器信任的证书
强制 HTTPS 跳转:在 Nginx 中配置 80 端口重定向:
server { listen 80; server_name 192.168.1.100; return 301 https://$host$request_uri; }
通过上述方法,即使在内网无公网域名的情况下,也能为 Gogs 实现安全的 HTTPS 访问。根据实际需求选择自签名证书、私有 CA 或反向代理方案。