Nginx 配置 Let's Encrypt 免费 HTTPS 证书

如果你使用 Nginx 作为反向代理服务器,可以通过 Let's Encrypt 免费申请 HTTPS 证书,让网站支持 https:// 访问,并由 Certbot 自动续期。

推荐使用 Nginx + Certbot:

下面以 Ubuntu 服务器为例,假设域名为 brave.example.com,后端 Go 服务运行在 127.0.0.1:8080。

一、安装 Nginx 和 Certbot

Bash

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

确认 Nginx 已启动:

Bash

sudo systemctl enable --now nginx

确保域名已经解析到服务器公网 IP,并且防火墙允许 80 和 443 端口访问。

二、配置 Nginx 反向代理

创建配置文件:

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 服务实际监听端口。

三、使用 Certbot 自动申请 HTTPS 证书

执行:

Bash

sudo certbot --nginx -d brave.example.com

根据提示:

  1. 输入邮箱地址。

  2. 同意服务条款。

  3. 选择是否将 HTTP 自动重定向到 HTTPS,建议选择重定向。

成功后,Certbot 会自动:

访问:

https://brave.example.com

浏览器就可以正常使用受信任的 HTTPS 连接。

四、Nginx 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 配置。

Let's Encrypt 免费 HTTPS 证书使用教程

对于你使用的 BRAVE + Go + Gin + Traefik v3,推荐通过 Traefik 自动申请和续期 Let's Encrypt 证书。

整个过程只需要:

  1. 准备一个已经解析到服务器公网 IP 的域名。

  2. 在 Traefik 中配置 Let's Encrypt 的 ACME 证书申请。

  3. 配置 HTTP 或 DNS 验证方式。

  4. 启动 Traefik,自动申请证书。

  5. 后续由 Traefik 自动续期,无需手动操作。

如果你已经使用 Traefik,通常不需要在 Go 服务或容器内部单独安装证书。

一、准备工作

假设你的域名是:

请将域名替换成自己的真实域名。

需要满足:

二、使用 Traefik 自动申请证书

下面以 Traefik v3 为例,采用 HTTP-01 验证。这是最简单的方式,适合有公网 IP、80 端口可访问的服务器。

GitHub

+1

1. 创建证书存储文件

在服务器执行:

Bash

mkdir -p ./traefik/letsencrypt
touch ./traefik/letsencrypt/acme.json
chmod 600 ./traefik/letsencrypt/acme.json

acme.json 用于保存证书及 ACME 账户信息,需要持久化保存。

v2.3

+1

2. 配置 Traefik 静态配置

创建 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 替换成你的邮箱。

3. 配置 Docker Compose

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"

注意:

Traefik 的路由器需要指定 tls.certresolver=letsencrypt,才能使用对应的证书解析器。

v3.5

+1

4. 启动服务

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

四、如果需要泛域名证书

例如希望一个证书覆盖:

以及其他一级子域名,可以考虑 *.example.com 泛域名证书。

泛域名证书需要使用 DNS-01 验证,通常需要通过 DNS 服务商 API 自动创建 TXT 记录。

v3.2

+1

官方文档:

Traefik v3.5 ACME 证书配置

。

五、我可以帮你适配现有的 BRAVE 配置

  1. 你的域名是什么?

  2. 希望使用哪种证书?

单个域名证书(例如 brave.bioinfo.online)

多个子域名分别申请证书

泛域名证书(例如 *.bioinfo.online)

  1. DNS 服务商

Cloudflare

阿里云 DNS

腾讯云 DNS

其他 / 不确定

  1. 当前部署方式

Docker Compose

Kubernetes / k3s

已有 Traefik v3 独立部署

生成我的配置