温馨提示×

debian lnmp怎么配置ssl

小樊
43
2026-10-07 17:22:16
栏目: 云计算

在 Debian 上配置 LNMP(Linux + Nginx + MySQL/MariaDB + PHP) 的 SSL(HTTPS),常见做法是使用 Let’s Encrypt 免费证书 或 自签名证书。下面以 Nginx + Let’s Encrypt(certbot) 为例,给你一套最常用、最稳妥的配置流程。


一、前提条件

  • 已安装 LNMP(Nginx 正常可访问)
  • 有一个域名(如 example.com)
  • 域名已解析到服务器公网 IP
  • 服务器 80 / 443 端口可访问

二、安装 Certbot(Let’s Encrypt)

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

三、自动申请并配置 SSL(推荐)

Certbot 可自动修改 Nginx 配置:

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

按提示:

  • 输入邮箱
  • 同意条款
  • 是否重定向 HTTP → HTTPS(建议选 2)

✅ 配置完成后:

  • 自动生成证书
  • Nginx 已启用 HTTPS
  • HTTP 会自动跳转到 HTTPS

四、手动配置 SSL(如果你自己改 Nginx)

1. 申请证书

sudo certbot certonly --webroot -w /var/www/html -d example.com

证书位置:

/etc/letsencrypt/live/example.com/
├── fullchain.pem
└── privkey.pem

2. 修改 Nginx 站点配置

编辑站点配置(示例):

sudo nano /etc/nginx/sites-available/example.com

示例配置:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/html;
    index index.php index.html;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

五、自动续期 SSL 证书

Let’s Encrypt 证书有效期 90 天,自动续期:

sudo certbot renew --dry-run

实际由 systemd 定时任务自动执行。


六、自签名 SSL(仅测试用)

sudo openssl req -x509 -nodes -days 365 \
  -newkey rsa:2048 \
  -keyout /etc/ssl/private/nginx.key \
  -out /etc/ssl/certs/nginx.crt

Nginx 中指定:

ssl_certificate /etc/ssl/certs/nginx.crt;
ssl_certificate_key /etc/ssl/private/nginx.key;

⚠️ 浏览器会提示不安全


七、常见问题

1. 防火墙

sudo ufw allow 80
sudo ufw allow 443

2. 证书失败

  • 检查 DNS 是否生效
  • 检查 80 端口是否可访问
  • 查看日志:
sudo tail -f /var/log/letsencrypt/letsencrypt.log

如果你愿意,可以告诉我:

  • Debian 版本(11 / 12)
  • Nginx 是否已存在站点配置
  • 是否是本地/内网环境

我可以直接帮你写一份可用的 Nginx 配置。

0 踩