当前位置: 首页 > news >正文

Nginx系列06(Nginx 缓存配置、SSL/TLS 配置)

目录

Nginx 缓存配置

SSL/TLS 配置


Nginx 缓存配置

  • 概念:Nginx 缓存配置允许服务器将频繁访问的资源(如网页、图片、脚本等)存储在内存或磁盘中,当再次接收到相同请求时,直接从缓存中读取并返回,减少对后端服务器的请求,从而显著提高网站的响应速度和性能,降低服务器负载。
  • 原理:Nginx 主要有代理缓存和 FastCGI 缓存两种缓存机制。
    • 代理缓存:当 Nginx 作为反向代理时,对于后端服务器返回的响应内容,Nginx 可以根据配置将其缓存起来。当下次有相同的请求时,Nginx 直接从缓存中返回数据,而无需再次向后端服务器转发请求。代理缓存通过proxy_cache_path指令指定缓存存储路径,通过proxy_cache_key指令定义缓存键(用于唯一标识缓存内容),通过proxy_cache_valid指令设置不同响应状态码对应的缓存时间。
    • FastCGI 缓存:主要用于缓存 FastCGI 程序(如 PHP 脚本)的输出结果。当 Nginx 接收到对 FastCGI 程序的请求时,会先检查缓存中是否存在对应的结果。如果存在,则直接返回缓存内容;否则,将请求转发给 FastCGI 服务器,获取结果后缓存起来并返回给客户端。FastCGI 缓存通过fastcgi_cache_path指令指定缓存路径,fastcgi_cache_key指令定义缓存键,fastcgi_cache_valid指令设置缓存时间。
  • 场景示例
    • 代理缓存示例:假设你有一个后端服务器运行在http://backend.example.com,你希望 Nginx 对其响应进行缓存。配置如下:
http {
    # 定义缓存路径、缓存级别、最大缓存大小等
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; 

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend.example.com;
            proxy_cache my_cache; # 使用名为my_cache的缓存区域
            proxy_cache_key "$uri$is_args$args"; # 定义缓存键,包含请求的URI、是否有参数及参数内容
            proxy_cache_valid 200 302 60m; # 对于状态码为200和302的响应,缓存60分钟
            proxy_cache_valid 404 10m; # 对于状态码为404的响应,缓存10分钟
            proxy_cache_bypass $http_pragma $http_authorization; # 如果请求头中有pragma或authorization字段,则不使用缓存
            proxy_cache_revalidate on; # 当缓存过期时,Nginx会向源服务器验证缓存是否仍然有效
        }
    }
}

在这个配置中,proxy_cache_path指定了缓存存储在/data/nginx/cache目录,缓存分为两级(levels=1:2),缓存区域名为my_cache,大小为 10MB,最大缓存空间为 10GB,60 分钟内未被访问的缓存将被清除。location /块中,请求被代理到http://backend.example.com,同时配置了缓存相关的参数。

  • FastCGI 缓存示例:假设你有一个 PHP 应用,FastCGI 服务器运行在127.0.0.1:9000,你希望对 PHP 脚本的输出进行缓存。配置如下:
http {
    # 定义FastCGI缓存路径
    fastcgi_cache_path /data/nginx/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:10m inactive=60m; 

    server {
        listen 80;
        server_name example.com;

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;

            fastcgi_cache fastcgi_cache; # 使用名为fastcgi_cache的缓存区域
            fastcgi_cache_key "$uri$is_args$args"; # 定义缓存键
            fastcgi_cache_valid 200 60m; # 对于状态码为200的响应,缓存60分钟
            fastcgi_cache_bypass $http_pragma $http_authorization; # 如果请求头中有pragma或authorization字段,则不使用缓存
            fastcgi_cache_revalidate on; # 当缓存过期时,Nginx会向FastCGI服务器验证缓存是否仍然有效
        }
    }
}

此配置中,fastcgi_cache_path指定了 FastCGI 缓存的路径等相关设置。location ~ \.php$块针对 PHP 脚本请求,配置了 FastCGI 缓存相关参数,当请求 PHP 脚本时,Nginx 会根据配置进行缓存操作。

SSL/TLS 配置

  • 概念:SSL/TLS 配置用于在 Nginx 服务器上启用 HTTPS 协议,实现数据在客户端和服务器之间的加密传输,确保数据的安全性和完整性,防止数据被窃取或篡改。同时,使用 HTTPS 也有助于提升网站在搜索引擎中的排名。
  • 原理:客户端与服务器在建立连接时,会进行 SSL/TLS 握手过程。服务器会向客户端发送自己的 SSL 证书,证书包含服务器的公钥等信息。客户端验证证书的合法性后,生成一个随机的对称密钥,使用服务器的公钥对其进行加密,并发送给服务器。服务器使用自己的私钥解密得到对称密钥,之后双方使用这个对称密钥进行数据加密传输。
  • 场景示例:假设你已经从证书颁发机构(CA)申请了 SSL 证书,证书文件名为example.com.crt,私钥文件名为example.com.key,配置如下:
http {
    server {
        listen 443 ssl; # 监听443端口,启用SSL
        server_name example.com;

        ssl_certificate /path/to/example.com.crt; # 指定SSL证书文件路径
        ssl_certificate_key /path/to/example.com.key; # 指定私钥文件路径

        ssl_protocols TLSv1.2 TLSv1.3; # 启用TLSv1.2和TLSv1.3协议,建议只启用较新的安全协议
        ssl_ciphers ECDHE - RSA - AES256 - GCM - SHA512:DHE - RSA - AES256 - GCM - SHA512:ECDHE - RSA - AES256 - GCM - SHA384:DHE - RSA - AES256 - GCM - SHA384:ECDHE - RSA - AES128 - GCM - SHA256:DHE - RSA - AES128 - GCM - SHA256; # 设置加密算法
        ssl_prefer_server_ciphers on; # 优先使用服务器端的加密算法配置
        ssl_session_cache shared:SSL:10m; # 设置SSL会话缓存,大小为10MB
        ssl_session_timeout 10m; # 设置SSL会话超时时间为10分钟

        location / {
            # 网站的其他配置,如代理、静态文件服务等
        }
    }
}

在这个配置中,server块监听 443 端口并启用 SSL,通过ssl_certificatessl_certificate_key指定证书和私钥路径。同时配置了 SSL 协议版本、加密算法、会话缓存等参数,以确保安全且高效的 HTTPS 连接。

相关文章:

  • DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
  • UE5 Slate类的基础创建
  • 【docker】docker swarm lock和unlock的区别,以及旧节点重启的隐患
  • JavaWeb基础专项复习5——请求对象和响应对象request and response
  • 【江科大STM32】TIM输出比较-PWM功能(学习笔记)
  • 小识ThreadLocal 用法
  • 初学STM32之简单认识IO口配置(学习笔记)
  • 车载系统SRAM存储方案
  • RabbitMQ系列(二)基本概念之Publisher
  • 【江科大STM32】TIM输出比较(学习笔记)
  • 使用v-for用户菜单渲染
  • js基础案例
  • 初阶MySQL(两万字全面解析)
  • 1.14 重叠因子:TRIMA三角移动平均线(Triangular Moving Average, TRIMA)概念与Python实战
  • react 路由跳转的几种方式
  • 超市里的货物价调整
  • AWS成本优化完整方案:从基础配置到高阶策略
  • vue中带$的是什么
  • 2025年如何实现安卓、iOS、鸿蒙跨平台开发
  • Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?
  • 卡盟做网站/网址怎么推广
  • 哪个网站可以做图片链接/竞价是什么工作
  • 山西本土网站建设/app推广地推接单网
  • 做动态网站学php_asp+还是jsp好?/实时新闻
  • 网站seo推广的方法/广告网站
  • 湛江市企业网站seo点击软件/简述网络营销的特点及功能