在Debian系统上为LNMP(Linux+Nginx+MySQL+PHP)环境安装SSL证书,主要分为获取证书、配置Nginx使用SSL、(可选)配置MySQL/PHP支持SSL三大步骤。以下是详细操作流程:
确保系统已安装LNMP基础组件(Nginx、MySQL、PHP),若未安装可通过以下命令快速部署:
sudo apt update
sudo apt install nginx mysql-server php libapache2-mod-php php-mysql
安装完成后,启动并启用Nginx、MySQL服务:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start mysql
sudo systemctl enable mysql
Certbot是Let’s Encrypt的官方客户端,可自动化证书申请与Nginx配置:
sudo apt install certbot python3-certbot-nginx
运行以下命令,替换yourdomain.com
为你的实际域名(需提前解析到服务器IP):
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
执行过程中,Certbot会提示:
Certbot会自动完成以下操作:
/etc/letsencrypt/live/yourdomain.com/
);若需自定义SSL配置(如调整加密协议、密码套件),可手动编辑Nginx站点配置文件:
sudo nano /etc/nginx/sites-available/yourdomain.com
添加或修改以下内容(关键参数说明见注释):
# HTTP监听(强制跳转HTTPS)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
# HTTPS监听(核心配置)
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
# 证书文件路径(需替换为实际路径)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 引入Let's Encrypt提供的优化配置(包含推荐的协议、密码套件)
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# 网站根目录与PHP处理
root /var/www/yourdomain.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问.htaccess文件
location ~ /\.ht {
deny all;
}
}
保存文件后,创建符号链接启用站点(若未创建sites-available
到sites-enabled
的链接):
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
若输出syntax is ok
且test is successful
,说明配置无错误。
sudo systemctl restart nginx
https://yourdomain.com
,确认地址栏显示锁图标(表示HTTPS连接正常);Certbot会自动创建定时任务(通常位于/etc/cron.d/certbot
),定期尝试续期证书。可手动测试续期流程:
sudo certbot renew --dry-run
若输出Congratulations, all renewals succeeded
,说明自动续期配置正常。
若需MySQL数据库支持SSL加密连接(适用于敏感数据传输),可按以下步骤操作:
sudo mkdir -p /etc/mysql/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/mysql/ssl/mysql-key.pem \
-out /etc/mysql/ssl/mysql-cert.pem
编辑MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf
),在[mysqld]
部分添加:
[mysqld]
ssl-ca=/etc/mysql/ssl/mysql-cert.pem
ssl-cert=/etc/mysql/ssl/mysql-cert.pem
ssl-key=/etc/mysql/ssl/mysql-key.pem
sudo systemctl restart mysql
登录MySQL并检查SSL状态:
mysql -u root -p --ssl-mode=REQUIRED
执行以下SQL语句,若have_ssl
值为YES
,则表示配置成功:
SHOW VARIABLES LIKE '%ssl%';
PHP应用(如WordPress、Laravel)需确保能处理HTTPS请求,可通过以下方式配置:
编辑PHP-FPM配置文件(/etc/php/7.4/fpm/pool.d/www.conf
),确保listen
指令为Socket模式:
listen = /run/php/php7.4-fpm.sock
重启PHP-FPM服务:
sudo systemctl restart php7.4-fpm
在应用入口文件(如index.php
)顶部添加以下代码,强制跳转HTTP到HTTPS:
if ($_SERVER['HTTPS'] != "on") {
$redirect = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: $redirect");
exit();
}
通过以上步骤,Debian LNMP环境即可完成SSL证书安装与配置,实现网站与数据库的HTTPS加密传输。