Nginx HTTPS配置教程:一步到位,保障网站安全 – wiki基地

Nginx HTTPS配置教程:一步到位,保障网站安全

在当今互联网环境下,网站安全至关重要。HTTPS (Hypertext Transfer Protocol Secure) 是HTTP的安全版本,它通过加密用户与服务器之间的通信,有效防止数据窃取和篡改,保障用户隐私和数据安全。对于任何重视用户体验和数据安全的网站来说,部署HTTPS都是必不可少的。

本教程将详细介绍如何在 Nginx 服务器上配置 HTTPS,从获取证书到配置 Nginx,再到优化 HTTPS 配置,一步到位,帮助你快速、安全地为你的网站启用 HTTPS。

一、HTTPS 的重要性:为什么你的网站需要 HTTPS

在深入了解配置过程之前,我们先来了解 HTTPS 的重要性:

  • 数据加密: HTTPS 使用 SSL/TLS 协议对数据进行加密,防止第三方窃听用户和服务器之间的通信内容,例如用户名、密码、信用卡信息等敏感数据。
  • 数据完整性: HTTPS 确保数据在传输过程中没有被篡改,防止恶意攻击者篡改网页内容或插入恶意代码。
  • 身份验证: HTTPS 使用证书验证服务器的身份,防止中间人攻击,确保用户连接的是真实的服务器,而非伪造的网站。
  • SEO 排名: Google 等搜索引擎已经将 HTTPS 作为网站排名的一个重要因素,启用 HTTPS 有助于提高网站在搜索结果中的排名。
  • 用户信任: 浏览器会显示 HTTPS 网站的安全锁标志,增强用户对网站的信任感,提高用户转化率。

二、准备工作:获取 SSL/TLS 证书

配置 HTTPS 的第一步是获取 SSL/TLS 证书。SSL/TLS 证书是证明服务器身份的数字证书,由受信任的证书颁发机构 (CA) 签发。

获取证书的常见方式有以下几种:

  • 购买商业证书: 从知名 CA 机构(如 DigiCert、Comodo、GlobalSign 等)购买证书,通常价格较高,但提供更好的技术支持和保险。
  • 使用免费证书: 使用 Let’s Encrypt 等免费证书颁发机构提供的证书,Let’s Encrypt 是一个非营利性 CA 机构,提供免费、自动化的 SSL/TLS 证书。
  • 自签名证书: 自行生成证书,不被 CA 机构信任,只适用于开发测试环境,不建议用于生产环境,因为浏览器会显示安全警告。

本教程主要介绍使用 Let’s Encrypt 获取免费证书。

2.1 使用 Certbot 获取 Let’s Encrypt 证书

Certbot 是一个自动化的 Let’s Encrypt 客户端,可以帮助你快速、方便地获取和配置 SSL/TLS 证书。

2.1.1 安装 Certbot

首先,你需要安装 Certbot。根据你的操作系统和 Web 服务器,安装方式有所不同。

Debian/Ubuntu:

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

CentOS/RHEL:

bash
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

2.1.2 获取证书

安装 Certbot 后,运行以下命令获取证书:

bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

  • --nginx: 指定使用 Nginx 插件自动配置 Nginx。
  • -d yourdomain.com: 指定域名,可以添加多个 -d 参数指定多个域名。

Certbot 会自动验证你的域名所有权,并生成证书。如果你的域名已经正确解析到服务器,Certbot 会自动配置 Nginx,并将证书安装到 Nginx 中。

2.1.3 自动续订证书

Let’s Encrypt 证书有效期为 90 天,你需要定期续订证书。Certbot 可以自动续订证书。

创建 cron 任务,每天运行 Certbot 续订命令:

bash
sudo crontab -e

在 crontab 文件中添加以下行:

0 0 * * * /usr/bin/certbot renew --quiet --no-self-upgrade

这将在每天凌晨 0 点自动运行 Certbot 续订命令。

三、配置 Nginx HTTPS

如果 Certbot 成功配置了 Nginx,你可以跳过这一步。如果 Certbot 没有自动配置 Nginx,你需要手动配置 Nginx。

3.1 找到 Nginx 配置文件

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf

3.2 修改 Nginx 配置文件

打开 Nginx 配置文件,找到你的网站的 server 块。

添加或修改以下配置:

“`nginx
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;

# 其他配置...

}
“`

  • listen 443 ssl: 监听 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: 指定私钥文件路径。

3.3 强制 HTTP 跳转到 HTTPS

为了确保所有访问都通过 HTTPS 进行,你可以配置 Nginx 将所有 HTTP 请求重定向到 HTTPS。

在 Nginx 配置文件中添加以下 server 块:

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

这会将所有 HTTP 请求重定向到 HTTPS。

3.4 保存配置文件并重启 Nginx

保存 Nginx 配置文件,并重启 Nginx 服务:

bash
sudo nginx -t # 测试配置文件语法是否正确
sudo systemctl restart nginx

四、优化 HTTPS 配置:提升安全性和性能

配置 HTTPS 后,你可以进一步优化 HTTPS 配置,提升安全性和性能。

4.1 使用强密码套件

密码套件 (Cipher Suites) 是用于加密 HTTPS 连接的算法组合。使用强密码套件可以提高 HTTPS 连接的安全性。

在 Nginx 配置文件中添加以下配置:

nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;

  • ssl_protocols TLSv1.2 TLSv1.3: 指定允许的 TLS 协议版本,建议只允许 TLS 1.2 和 TLS 1.3,禁用不安全的 TLS 1.0 和 TLS 1.1。
  • ssl_prefer_server_ciphers on: 指定服务器优先选择密码套件。
  • ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256: 指定密码套件列表,选择安全、高效的密码套件。

4.2 启用 HTTP Strict Transport Security (HSTS)

HSTS (HTTP Strict Transport Security) 是一种安全策略,告诉浏览器只能通过 HTTPS 访问网站,即使用户手动输入 HTTP 地址或点击 HTTP 链接。

在 Nginx 配置文件中添加以下配置:

nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

  • max-age=31536000: 指定 HSTS 的有效期,单位为秒,建议设置为一年 (31536000 秒)。
  • includeSubDomains: 指定 HSTS 策略适用于所有子域名。
  • preload: 指定将网站添加到 HSTS 预加载列表,浏览器会在第一次访问网站之前就强制使用 HTTPS。

4.3 启用 OCSP Stapling

OCSP Stapling 可以让服务器主动向浏览器提供证书的 OCSP (Online Certificate Status Protocol) 响应,减少浏览器查询 OCSP 响应的延迟,提高 HTTPS 连接速度。

在 Nginx 配置文件中添加以下配置:

nginx
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;

  • ssl_stapling on: 启用 OCSP Stapling。
  • ssl_stapling_verify on: 启用 OCSP Stapling 验证。
  • ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem: 指定信任的证书链文件路径。

4.4 使用 HTTP/2 或 HTTP/3

HTTP/2 和 HTTP/3 是 HTTP 协议的最新版本,可以显著提高网站性能,减少页面加载时间。

在 Nginx 配置文件中添加以下配置:

“`nginx
listen 443 ssl http2; # 对于 HTTP/2

listen 443 ssl http3; # 对于 HTTP/3 (需要安装 QUIC 支持)

“`

  • http2: 启用 HTTP/2。
  • http3: 启用 HTTP/3 (需要 Nginx 支持 QUIC 协议)。

4.5 开启 Gzip 压缩

Gzip 压缩可以减少网页大小,提高网站加载速度。

在 Nginx 配置文件中添加以下配置:

nginx
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss image/svg+xml;

五、测试 HTTPS 配置

配置 HTTPS 后,你需要测试 HTTPS 配置是否正确。

  • 访问网站: 在浏览器中输入 https://yourdomain.com,检查是否可以正常访问网站,并且浏览器显示安全锁标志。
  • 使用 SSL Labs 测试: 使用 SSL Labs 的 SSL Server Test 工具 (https://www.ssllabs.com/ssltest/) 测试你的 HTTPS 配置,检查是否存在安全漏洞,并根据测试结果优化配置。

六、常见问题及解决方案

  • 浏览器显示 “您的连接不是私密连接” 错误: 这通常是因为证书无效、过期或不受信任。检查证书是否正确安装,证书是否过期,证书颁发机构是否受信任。
  • HTTPS 网站加载速度慢: 优化 HTTPS 配置,例如使用强密码套件、启用 OCSP Stapling、使用 HTTP/2 或 HTTP/3、开启 Gzip 压缩。
  • HTTP 请求无法重定向到 HTTPS: 检查 Nginx 配置文件中 HTTP 跳转配置是否正确。
  • Certbot 续订失败: 检查 Certbot 配置是否正确,域名是否正确解析到服务器,防火墙是否阻止 Certbot 访问服务器。

总结

本教程详细介绍了如何在 Nginx 服务器上配置 HTTPS,从获取证书到配置 Nginx,再到优化 HTTPS 配置,一步到位,帮助你快速、安全地为你的网站启用 HTTPS。 通过本文,你应该能够理解 HTTPS 的重要性,并为你的网站成功配置 HTTPS,提升网站安全性和用户体验。 请记住,HTTPS 配置是一个持续的过程,你需要定期检查和更新配置,以应对不断变化的安全威胁。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部