跳到主要内容

Nginx SSL/TLS 配置

介绍

SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于加密网络通信的协议。它们确保客户端和服务器之间的数据传输是安全的,防止数据被窃听或篡改。Nginx 是一个高性能的 Web 服务器,支持 SSL/TLS 配置,能够为网站提供安全的 HTTPS 连接。

本文将逐步讲解如何在 Nginx 中配置 SSL/TLS,并提供实际案例和代码示例。


为什么需要 SSL/TLS?

  1. 数据加密:SSL/TLS 加密客户端和服务器之间的通信,防止敏感信息(如密码、信用卡号)被窃取。
  2. 身份验证:SSL/TLS 证书验证服务器的身份,确保用户连接到的是合法的服务器。
  3. SEO 优势:搜索引擎(如 Google)会优先排名使用 HTTPS 的网站。
  4. 用户信任:浏览器会显示 HTTPS 和锁图标,增加用户对网站的信任。

配置 SSL/TLS 的步骤

1. 获取 SSL/TLS 证书

SSL/TLS 证书可以从证书颁发机构(CA)获取,例如 Let's Encrypt。以下是使用 Let's Encrypt 获取免费证书的步骤:

  1. 安装 Certbot 工具:
    bash
    sudo apt install certbot python3-certbot-nginx
  2. 获取证书:
    bash
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    Certbot 会自动配置 Nginx 并安装证书。
提示

如果你没有域名,可以使用自签名证书进行测试。生成自签名证书的命令如下:

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

2. 配置 Nginx 使用 SSL/TLS

编辑 Nginx 配置文件(通常位于 /etc/nginx/sites-available/default/etc/nginx/nginx.conf),添加以下内容:

nginx
server {
listen 443 ssl;
server_name yourdomain.com;

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

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

location / {
root /var/www/html;
index index.html;
}
}
  • listen 443 ssl;:监听 443 端口并启用 SSL。
  • ssl_certificatessl_certificate_key:指定证书和私钥的路径。
  • ssl_protocols:指定支持的 TLS 版本(推荐使用 TLSv1.2 和 TLSv1.3)。
  • ssl_ciphers:指定加密算法。

3. 强制 HTTPS 重定向

为了确保所有流量都通过 HTTPS,可以在 Nginx 配置中添加以下内容:

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

4. 测试并重启 Nginx

  1. 测试配置文件是否正确:
    bash
    sudo nginx -t
  2. 重启 Nginx 以应用更改:
    bash
    sudo systemctl restart nginx

实际案例

假设你有一个网站 example.com,希望通过 HTTPS 提供服务。以下是完整的 Nginx 配置:

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

server {
listen 443 ssl;
server_name example.com;

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 / {
root /var/www/example;
index index.html;
}
}

总结

通过本文,你学习了如何在 Nginx 中配置 SSL/TLS,包括获取证书、编辑配置文件、强制 HTTPS 重定向以及测试和重启 Nginx。SSL/TLS 是保护网站通信安全的关键技术,建议所有网站都启用 HTTPS。


附加资源

  1. Let's Encrypt 官方文档
  2. Nginx 官方文档
  3. SSL/TLS 协议详解

练习

  1. 使用 Let's Encrypt 为你的网站获取 SSL 证书。
  2. 配置 Nginx 强制 HTTPS 重定向。
  3. 测试你的配置,确保网站通过 HTTPS 访问。

Happy coding! 🚀