配置 Nginx
Gisia 运行在 Docker 中,并将 Web 端口发布到 127.0.0.1:8080。在生产环境中,你需要在它前面放置 Nginx 作为反向代理,这样就可以使用自己的域名、终止 HTTPS,并允许大体积的 Git 推送。
本指南尽量保持配置简洁。先从纯 HTTP 开始,确认可用后再添加 HTTPS。
局域网内的 HTTP
创建 /etc/nginx/sites-available/gisia:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name gisia.example.com;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $http_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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
}
}
启用并重新加载:
ln -s /etc/nginx/sites-available/gisia /etc/nginx/sites-enabled/gisia
nginx -t
systemctl reload nginx
各项配置说明
map $http_upgrade—— 在文件顶部、server块之外声明一次。它支撑 WebSocket 升级,使实时功能保持连接。client_max_body_size 0—— 取消 Nginx 的上传大小限制,交由 Gisia 自行控制。否则大体积的 Git 推送和文件上传会失败并返回413 Request Entity Too Large。Host $http_host—— 同时传递主机名和端口,使 Gisia 生成正确的 URL。X-Forwarded-Proto $scheme—— 告诉 Gisia 原始请求是 HTTP 还是 HTTPS。不要把这个值写死。proxy_http_version 1.1+Upgrade/Connection—— WebSocket 连接能够被代理而不被丢弃所必需。proxy_read_timeout 300—— 部分克隆和流水线请求会超过 Nginx 默认的 60 秒。
面向公网的 HTTPS
HTTP 可用后,获取证书,然后切换到 HTTPS。将所有 HTTP 流量重定向到 HTTPS,并在 443 上提供服务:
server {
listen 80;
server_name gisia.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name gisia.example.com;
ssl_certificate /etc/letsencrypt/live/gisia.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gisia.example.com/privkey.pem;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $http_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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
}
}
将 HTTP 示例中的 map $http_upgrade 块保留在文件顶部 —— 两个 server 块共用它。
由于现在 HTTPS 在 Nginx 处终止,X-Forwarded-Proto $scheme 会向 Gisia 报告 https,因此重定向、安全 Cookie 和生成的链接都会使用 https://。