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

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 连接。


http://www.kler.cn/a/566722.html

相关文章:

  • 使用 pytest-mock 进行 Python 高级单元测试与模拟
  • Vue 路由基础:Vue 2 和 Vue 3 的比较与使用
  • openinstall支持鸿蒙App Linking:赋能系统级深度链接能力
  • UniApp 使用 u-loadmore 完整步骤
  • Elasticsearch:过滤 HNSW 搜索,快速模式
  • AI岗位面试指南:高频文档问题解析与应答策略
  • VMWare虚拟机Ubuntu Desktop怎么共享文件夹
  • Spring Boot 整合 Apollo 配置中心实战
  • react 路由跳转的几种方式
  • element-ui infiniteScroll 组件源码分享
  • 三轴加速度推算姿态角的方法,理论分析和MATLAB例程
  • Linux网络数据包接收:原理、流程与优化策略
  • Linux:同步
  • 【微知】git log如何将每次提交按照一行查看?(git log --oneline)
  • unity lua属性绑定刷新
  • C++ 设计模式 十一:代理模式 (读书 现代c++设计模式)
  • MySQL 和 Elasticsearch 之间的数据同步
  • docker里面pgadmin4自动备份pg数据库操作
  • NIM平台开发基于提示工程的大语言模型(LLM)应用
  • 笔记20250225