如果你使用 Nginx 作为反向代理服务器,可以通过 Let's Encrypt 免费申请 HTTPS 证书,让网站支持 https:// 访问,并由 Certbot 自动续期。
推荐使用 Nginx + Certbot:
Nginx 负责 HTTPS 监听和反向代理。
Certbot 负责申请、安装和续期证书。
Let's Encrypt 提供免费、受浏览器信任的证书。
下面以 Ubuntu 服务器为例,假设域名为 brave.example.com,后端 Go 服务运行在 127.0.0.1:8080。
Bash
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
确认 Nginx 已启动:
Bash
sudo systemctl enable --now nginx
确保域名已经解析到服务器公网 IP,并且防火墙允许 80 和 443 端口访问。
创建配置文件:
Bash
sudo nano /etc/nginx/sites-available/brave
写入以下内容:
Nginx
server {
listen 80;
listen [::]:80;
server_name brave.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
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;
}
}
启用配置:
Bash
sudo ln -s /etc/nginx/sites-available/brave \
/etc/nginx/sites-enabled/brave
sudo nginx -t
sudo systemctl reload nginx
将 brave.example.com 替换为你的域名,8080 替换为 Go 服务实际监听端口。
执行:
Bash
sudo certbot --nginx -d brave.example.com
根据提示:
输入邮箱地址。
同意服务条款。
选择是否将 HTTP 自动重定向到 HTTPS,建议选择重定向。
成功后,Certbot 会自动:
申请 Let's Encrypt 证书。
修改 Nginx 配置,启用 HTTPS。
配置证书路径。
设置 HTTP 到 HTTPS 的重定向。
访问:
https://brave.example.com
浏览器就可以正常使用受信任的 HTTPS 连接。
Certbot 通常会自动生成类似下面的配置:
Nginx
server {
listen 80;
server_name brave.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name brave.example.com;
ssl_certificate /etc/letsencrypt/live/brave.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/brave.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
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;
}
}
注意: 如果已经使用 certbot --nginx 成功配置证书,就不需要再手动添加这段配置。
Let's Encrypt 证书有效期较短,Certbot 通常通过系统定时任务或 systemd 自动续期。
测试续期:
Bash
sudo certbot renew --dry-run
查看证书:
Bash
sudo certbot certificates
例如你有以下域名:
可以分别申请:
Bash
sudo certbot --nginx \
-d brave.example.com \
-d api.example.com \
-d jupyter.example.com
但如果三个域名需要代理到不同的服务,建议先分别配置好 Nginx 的 server 块,再分别申请证书。
总结: 如果你的 Nginx 已经部署完成,通常只需要先配置 HTTP 反向代理,再执行:
Bash
sudo certbot --nginx -d 你的域名
即可完成 HTTPS 证书申请和 Nginx 配置。
对于你使用的 BRAVE + Go + Gin + Traefik v3,推荐通过 Traefik 自动申请和续期 Let's Encrypt 证书。
整个过程只需要:
准备一个已经解析到服务器公网 IP 的域名。
在 Traefik 中配置 Let's Encrypt 的 ACME 证书申请。
配置 HTTP 或 DNS 验证方式。
启动 Traefik,自动申请证书。
后续由 Traefik 自动续期,无需手动操作。
如果你已经使用 Traefik,通常不需要在 Go 服务或容器内部单独安装证书。
假设你的域名是:
brave.example.com:BRAVE 网站
api.example.com:API 服务
请将域名替换成自己的真实域名。
需要满足:
域名已经注册并完成 DNS 解析。
域名能够指向服务器公网 IP。
如果使用 HTTP-01 验证,公网 80 端口需要能够访问。
如果使用 TLS-ALPN-01 验证,公网 443 端口需要能够访问。
下面以 Traefik v3 为例,采用 HTTP-01 验证。这是最简单的方式,适合有公网 IP、80 端口可访问的服务器。
GitHub
+1
在服务器执行:
Bash
mkdir -p ./traefik/letsencrypt
touch ./traefik/letsencrypt/acme.json
chmod 600 ./traefik/letsencrypt/acme.json
acme.json 用于保存证书及 ACME 账户信息,需要持久化保存。
v2.3
+1
创建 traefik/traefik.yml:
YAML
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: "your-email@example.com"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: web
providers:
docker:
exposedByDefault: false
将 your-email@example.com 替换成你的邮箱。
YAML
services:
traefik:
image: traefik:v3.5
container_name: traefik
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
- ./traefik/letsencrypt:/letsencrypt
brave:
image: your-brave-image
container_name: brave
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.brave.rule=Host(`brave.example.com`)"
- "traefik.http.routers.brave.entrypoints=websecure"
- "traefik.http.routers.brave.tls=true"
- "traefik.http.routers.brave.tls.certresolver=letsencrypt"
- "traefik.http.services.brave.loadbalancer.server.port=8080"
注意:
brave.example.com 替换为你的域名。
your-brave-image 替换为实际镜像。
8080 替换为 BRAVE 容器内部的实际服务端口。
如果你的 Traefik 已经运行,不要重复创建一个占用 80/443 端口的实例。
Traefik 的路由器需要指定 tls.certresolver=letsencrypt,才能使用对应的证书解析器。
v3.5
+1
Bash
docker compose up -d
查看日志:
Bash
docker logs -f traefik
当域名验证成功后,Traefik 会自动申请证书并提供 HTTPS。
访问:
https://brave.example.com
Traefik 会自动管理证书续期,无需配置额外的定时任务。证书数据保存在 acme.json 中,重启容器时应保留该文件。
v3.3
+1
查看证书:
Bash
openssl s_client \
-connect brave.example.com:443 \
-servername brave.example.com </dev/null
例如希望一个证书覆盖:
brave.example.com
api.example.com
jupyter.example.com
以及其他一级子域名,可以考虑 *.example.com 泛域名证书。
泛域名证书需要使用 DNS-01 验证,通常需要通过 DNS 服务商 API 自动创建 TXT 记录。
v3.2
+1
官方文档:
Traefik v3.5 ACME 证书配置
。
你的域名是什么?
希望使用哪种证书?
单个域名证书(例如 brave.bioinfo.online)
多个子域名分别申请证书
泛域名证书(例如 *.bioinfo.online)
Cloudflare
阿里云 DNS
腾讯云 DNS
其他 / 不确定
Docker Compose
Kubernetes / k3s
已有 Traefik v3 独立部署
生成我的配置