跳转到内容

HTTPS 配置

生产环境强烈建议使用 HTTPS。Glean 本身不处理 SSL,需要使用反向代理。

Caddy 自动获取和续期 Let’s Encrypt 证书,配置最简单。

Terminal window
# Ubuntu/Debian
sudo apt install caddy
# macOS
brew install caddy

创建 Caddyfile

glean.yourdomain.com {
reverse_proxy localhost:80
}
admin.yourdomain.com {
reverse_proxy localhost:3001
}
Terminal window
caddy run --config Caddyfile

Caddy 会自动:

  • 获取 SSL 证书
  • 配置 HTTPS
  • 自动续期证书
Terminal window
# Ubuntu/Debian
sudo apt install nginx certbot python3-certbot-nginx

创建 /etc/nginx/sites-available/glean

# Web 应用
server {
listen 80;
server_name glean.yourdomain.com;
location / {
proxy_pass http://localhost:80;
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;
}
}
# 管理后台
server {
listen 80;
server_name admin.yourdomain.com;
location / {
proxy_pass http://localhost:3001;
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;
}
}
Terminal window
sudo ln -s /etc/nginx/sites-available/glean /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Terminal window
sudo certbot --nginx -d glean.yourdomain.com -d admin.yourdomain.com

Certbot 会自动:

  • 获取证书
  • 配置 Nginx
  • 设置自动续期

配置 HTTPS 后,需要更新 CORS 设置:

Terminal window
# 编辑 .env 文件
CORS_ORIGINS='["https://glean.yourdomain.com", "https://admin.yourdomain.com"]'

重启后端服务:

Terminal window
docker compose restart backend

仅用于测试环境,不推荐生产使用。

Terminal window
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/glean.key \
-out /etc/ssl/certs/glean.crt \
-subj "/CN=glean.local"
server {
listen 443 ssl;
server_name glean.local;
ssl_certificate /etc/ssl/certs/glean.crt;
ssl_certificate_key /etc/ssl/private/glean.key;
location / {
proxy_pass http://localhost:80;
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;
}
}
# 在 server 块中添加
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
server {
listen 80;
server_name glean.yourdomain.com;
return 301 https://$server_name$request_uri;
}
Terminal window
# 使用 curl 验证
curl -v https://glean.yourdomain.com
# 使用 openssl 检查
openssl s_client -connect glean.yourdomain.com:443

使用 SSL Labs 检测 SSL 配置评分。

Terminal window
# 手动续期
sudo certbot renew
# 检查续期状态
sudo certbot certificates

确保所有资源都通过 HTTPS 加载,检查浏览器控制台是否有混合内容警告。

确保 Nginx 配置正确传递了 X-Forwarded-ForX-Real-IP 头。