Nginx HTTPS 配置及性能优化 – wiki基地

Nginx HTTPS 配置及性能优化

随着互联网安全意识的提高,HTTPS 已经成为网站的标配。Nginx 作为一个高性能的 Web 服务器和反向代理服务器,在配置 HTTPS 方面也提供了强大的支持。本文将详细介绍 Nginx HTTPS 的配置方法,并深入探讨性能优化技巧,帮助你构建安全、快速且可靠的 HTTPS 网站。

一、HTTPS 原理简介

HTTPS (Hyper Text Transfer Protocol Secure) 是 HTTP 协议的安全版本,它通过 SSL/TLS 协议对 HTTP 通信进行加密,保证数据传输的机密性和完整性,并验证服务器的身份。其工作原理简要概括如下:

  1. 客户端发起 HTTPS 请求: 客户端向服务器发送 HTTPS 请求,包括支持的 SSL/TLS 协议版本。
  2. 服务器发送证书: 服务器返回其数字证书,其中包含公钥、证书颁发机构信息等。
  3. 客户端验证证书: 客户端验证证书的有效性,包括证书是否过期、是否被吊销、颁发机构是否可信等。
  4. 协商加密算法: 客户端和服务器协商确定使用的加密算法和密钥交换算法。
  5. 生成会话密钥: 客户端生成一个随机的会话密钥,并使用服务器的公钥加密后发送给服务器。
  6. 服务器解密会话密钥: 服务器使用私钥解密会话密钥。
  7. 加密通信: 客户端和服务器使用协商好的加密算法和会话密钥进行加密通信。

二、Nginx HTTPS 配置步骤

  1. 获取 SSL 证书: 你可以从受信的证书颁发机构 (CA) 购买 SSL 证书,例如 Let’s Encrypt、Comodo、DigiCert 等。Let’s Encrypt 提供免费的 SSL 证书,是一个不错的选择。
  2. 安装 SSL 证书: 将获取到的证书文件 (通常是 .crt 或 .pem 格式) 和私钥文件 (通常是 .key 格式) 放置到服务器上的指定目录,例如 /etc/nginx/ssl/
  3. 配置 Nginx: 修改 Nginx 配置文件 (/etc/nginx/nginx.conf/etc/nginx/conf.d/*.conf),添加或修改 server 块,配置 HTTPS 监听端口和 SSL 证书路径。

“`nginx
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;

ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;

# ... 其他配置 ...

location / {
    # ... 应用配置 ...
}

}
“`

三、Nginx HTTPS 性能优化

  1. 启用 HTTP/2: HTTP/2 可以显著提高网站的加载速度。在 Nginx 配置文件中添加 http2 指令即可启用 HTTP/2。

nginx
listen 443 ssl http2;

  1. 使用 TLS 1.3 或更高版本: TLS 1.3 提供了更强的安全性和更高的性能。禁用旧的、不安全的 SSL/TLS 协议版本。

nginx
ssl_protocols TLSv1.3 TLSv1.2;

  1. 优化 SSL 会话缓存: 缓存 SSL 会话可以减少握手次数,提高性能。

nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

  1. 使用 OCSP Stapling: OCSP Stapling 可以减少客户端验证证书的时间,提高性能。

nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

  1. 启用 HSTS: HSTS (HTTP Strict Transport Security) 可以强制浏览器始终使用 HTTPS 访问网站,防止中间人攻击。

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

  1. 调整 Cipher Suites: 选择合适的 Cipher Suites 可以提高安全性和性能。建议使用 Mozilla 推荐的 Cipher Suites。

nginx
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

  1. 使用 Diffie-Hellman Ephemeral (DHE) 密钥交换: DHE 可以提供 Perfect Forward Secrecy,即使服务器私钥泄露,也不会影响过去的会话安全。

nginx
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

你需要先生成 dhparam 文件,可以使用以下命令:
bash
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

  1. 启用 SSL Session Tickets: SSL Session Tickets 允许客户端缓存会话信息,减少握手次数。

nginx
ssl_session_tickets on;

  1. 优化 worker 进程数量: 根据服务器硬件配置调整 worker 进程数量,可以提高 Nginx 的处理能力。

nginx
worker_processes auto;

  1. 配置 gzip 压缩: 启用 gzip 压缩可以减少数据传输量,提高网站加载速度。

nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  1. 使用 FastCGI 缓存: 如果你的网站使用 PHP 等动态语言,可以使用 FastCGI 缓存来缓存动态内容,减少服务器负载。

四、Let’s Encrypt 证书申请和自动续期

Let’s Encrypt 提供了一种便捷的方式来获取和更新免费的 SSL 证书。可以使用 certbot 工具来实现自动化申请和续期。

bash
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

certbot 会自动修改 Nginx 配置文件,并配置定时任务自动续期证书.

五、总结

配置 Nginx HTTPS 并进行性能优化可以显著提高网站的安全性、速度和可靠性。通过遵循本文介绍的步骤和技巧,你可以轻松构建一个安全、高效的 HTTPS 网站。 记住,安全是一个持续的过程,需要不断学习和更新知识,才能更好地保护你的网站和用户数据。 定期检查 Nginx 配置,更新 SSL 证书,并关注最新的安全漏洞和最佳实践,才能确保你的网站始终保持最佳的安全性和性能。

发表评论

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

滚动至顶部