Nginx 配置HTTPS

HTTPS 是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。

在 Nginx 中,配置 HTTPS 也非常的简单,我们首先需要准备好与我们域名关联的 HTTPS 证书,接着,再配置对应的证书目录即可。

Nginx配置HTTPS的详细过程涉及多个步骤,包括准备SSL证书、编辑Nginx配置文件、重启Nginx服务等。以下是对这些步骤的详细解析及案例:

一、准备SSL证书

  1. 获取证书:

    • 可以从证书颁发机构(CA)购买SSL证书。

    • 也可以使用免费证书服务,如Let's Encrypt,通过自动化工具(如Certbot)获取和续期证书。

  2. 证书文件:

    • SSL证书通常包括一个公钥证书文件(如yourdomain.crtfullchain.pem)和一个私钥文件(如yourdomain.keyprivatekey.pem)。

二、编辑Nginx配置文件

  1. 定位配置文件:

    • Nginx的配置文件通常位于/etc/nginx/nginx.conf,或者可以在/etc/nginx/sites-available/目录下创建新的配置文件,并通过链接到/etc/nginx/sites-enabled/目录来启用。

  2. 编辑HTTPS服务器块:

    示例配置如下:

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

    ssl_certificate /path/to/your/fullchain.pem; # 证书文件路径
    ssl_certificate_key /path/to/your/privatekey.pem; # 私钥文件路径

    ssl_protocols TLSv1.2 TLSv1.3; # 推荐的TLS协议
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384';

    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    }

    # 其他配置...
    }

    证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制 的目录文件,并保证 Nginx 主进程有存取权限。

    • 在Nginx配置文件中,添加一个或多个server块来监听443端口(HTTPS的默认端口)。

    • 配置SSL证书和私钥的路径,以及其他SSL相关指令。

  3. (可选)配置HTTP到HTTPS的重定向:

    示例配置如下:

    server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    return 301 https://$server_name$request_uri;
    }
    • 在Nginx中添加另一个监听80端口的server块,将所有HTTP请求重定向到HTTPS。

三、测试并重启Nginx

  1. 测试配置:

    • 使用nginx -t命令测试Nginx配置文件的语法是否正确。

  2. 重启Nginx:

    • 如果配置测试通过,使用sudo systemctl reload nginx(对于使用systemd的系统)或sudo service nginx reload命令来重新加载Nginx配置。

四、验证HTTPS

  • 在浏览器中输入你的域名(如https://yourdomain.com),检查是否成功通过HTTPS连接,并且没有显示任何证书错误。

五、Nginx HTTPS优化

减少CPU运算量

SSL 的运行计算需要消耗额外的 CPU 资源,一般多核处理器系统会运行多个工作进程,进程的数量不会少于可用的 CPU 核数。SSL 通讯过程中 “握手” 阶段的运算最占用 CPU 资源,有两个方法可以减少每台客户端的运算量:

  • 激活 keepalive 长连接,一个连接发送更多个请求

  • 复用 SSL 会话参数,在并行并发的连接数中避免进行多次 SSL 握手

    这些会话会存储在一个 SSL 会话缓存里面,通过命令 ssl_session_cache 配置,可以使缓存在机器间共享,然后利用客戶端在握手阶段使用的 seesion id 去查询服务端的 session cathe(如果服务端设置有的话),简化握手阶段。

    1M 的会话缓存大概包含 4000 个会话,默认的缓存超时时间为 5 分钟,可以通过使用 ssl_session_timeout 命令设置缓存超时时间。下面是一个拥有 10M 共享会话缓存的多核系统优化配置例子:

    worker_processes auto;
    http {
    #配置共享会话缓存大小
    ssl_session_cache shared:SSL:10m;
    #配置会话超时时间
    ssl_session_timeout 10m;
    server {
    listen 443 ssl;
    server_name www.haicoder.net;
    #设置长连接
    keepalive_timeout 70;
    ssl_certificate www.haicoder.net.crt;
    ssl_certificate_key www.haicoder.net.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    #...

六、注意事项

  • SSL/TLS协议和加密套件:确保配置了强密码套件和安全的TLS协议版本。

  • HSTS(HTTP Strict Transport Security):可以启用HSTS来提高安全性,通过HTTP响应头告诉浏览器只能通过HTTPS访问网站。

  • 证书续期:定期检查和续期SSL证书,以确保网站的安全性。

通过以上步骤,你可以在Nginx上成功配置HTTPS,为网站提供安全的HTTPS访问。

posted on 2024-09-23 10:17  IT-QI  阅读(359)  评论(0编辑  收藏  举报