在linux上用nginx配置ssl应该怎么操作?下面是示例
在 Linux 上使用 Nginx 配置 SSL 的操作步骤如下:
一、安装 Nginx 和必要工具
# Ubuntu/Debian系统
sudo apt update
sudo apt install nginx openssl# CentOS/RHEL系统
sudo yum install epel-release
sudo yum install nginx openssl
二、获取 SSL 证书
有两种方式获取 SSL 证书:
1. 使用 Let's Encrypt 免费证书(推荐)
# 安装Certbot(证书管理工具)
# Ubuntu/Debian系统
sudo apt install certbot python3-certbot-nginx# CentOS/RHEL系统
sudo yum install certbot python3-certbot-nginx# 自动获取并配置证书(会自动修改Nginx配置)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
2. 使用自签名证书(测试环境)
# 创建证书目录
sudo mkdir -p /etc/ssl/certs /etc/ssl/private# 生成自签名证书(有效期365天)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/ssl/private/yourdomain.com.key \-out /etc/ssl/certs/yourdomain.com.crt
注意:生成过程中需填写域名等信息,Common Name 必须填写你的域名(如yourdomain.com
)。
三、配置 Nginx 支持 SSL
编辑 Nginx 配置文件(通常位于/etc/nginx/sites-available/yourdomain.com
):
server {listen 80;server_name yourdomain.com www.yourdomain.com;# 强制HTTP跳转HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl;server_name yourdomain.com www.yourdomain.com;# SSL证书配置(Let's Encrypt方式)ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;# 自签名证书配置(测试环境)# ssl_certificate /etc/ssl/certs/yourdomain.com.crt;# ssl_certificate_key /etc/ssl/private/yourdomain.com.key;# SSL优化配置ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_dhparam /etc/ssl/certs/dhparam.pem; # 需额外生成(见下文)ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;ssl_ecdh_curve secp384r1;ssl_session_timeout 10m;ssl_session_cache shared:SSL:10m;ssl_session_tickets off;ssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";# 网站根目录配置root /var/www/yourdomain.com;index index.html index.htm;# 其他配置(如PHP处理等)location / {try_files $uri $uri/ =404;}
}
四、生成 DH 参数(可选但推荐)
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
五、验证配置并重启 Nginx
# 检查配置语法
sudo nginx -t# 重启Nginx服务
sudo systemctl restart nginx# 设置开机自启
sudo systemctl enable nginx
六、自动续期证书(Let's Encrypt 方式)
# 添加定时任务(每月执行一次检查,证书将在到期前自动续期)
sudo crontab -e
# 添加以下内容(保存退出)
0 12 * * * /usr/bin/certbot renew --quiet
七、测试 SSL 配置
访问https://yourdomain.com
,确认网站可以正常访问且浏览器显示安全锁标志。可使用SSL Labs测试 SSL 配置的安全性。
常见问题
-
防火墙问题:确保 443 端口开放
# Ubuntu/Debian(ufw) sudo ufw allow 'Nginx Full'# CentOS/RHEL(firewalld) sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
-
证书续期失败:检查 Certbot 日志(
/var/log/letsencrypt/letsencrypt.log
),确保域名解析正确且端口可访问。 -
Nginx 配置错误:使用
sudo nginx -t
检查语法,错误信息会提示具体问题。
配置完成后,你的网站将通过 HTTPS 安全访问。