Nginx实现动态内容缓存的示例代码

 更新时间:2024年11月25日 10:55:19   作者:用心去追梦  
在Nginx中实现动态内容的缓存可以显著提高性能,减少后端服务器的负载,本文就来介绍一下Nginx动态内容缓存实现,具有一定的参考价值,感兴趣的可以了解一下

在 Nginx 中实现动态内容的缓存可以显著提高性能,减少后端服务器的负载。以下是如何在 Nginx 中配置动态内容缓存的详细步骤和示例配置。

1. 安装 Nginx

确保你已经安装了 Nginx。如果没有安装,可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install nginx

2. 配置缓存目录

首先,定义一个缓存目录,用于存储缓存的数据。

示例配置:

http {
    # 定义缓存区
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        # 配置缓存
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 启用缓存
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid 200 301 302 10m;
            proxy_cache_valid 404 1m;

            # 添加缓存控制头
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

3. 参数解释

  • proxy_cache_path:定义缓存目录的路径、层级结构、缓存区名称、最大大小和活动时间。

    • /var/cache/nginx:缓存目录路径。
    • levels=1:2:缓存文件的层级结构,例如 1:2 表示两级目录。
    • keys_zone=my_cache:10m:缓存区名称和大小,10MB。
    • max_size=1g:缓存的最大大小,1GB。
    • inactive=60m:缓存项在不活跃多久后会被删除,60分钟。
    • use_temp_path=off:禁用临时文件路径,直接写入缓存目录。
  • proxy_cache:启用缓存,指定缓存区名称。

  • proxy_cache_key:定义缓存键,用于唯一标识缓存项。

    • "$scheme$request_method$host$request_uri":缓存键包含协议、请求方法、主机名和请求URI。
  • proxy_cache_valid:设置不同 HTTP 状态码的缓存时间。

    • 200 301 302 10m:200、301 和 302 状态码的缓存时间为 10 分钟。
    • 404 1m:404 状态码的缓存时间为 1 分钟。
  • add_header X-Proxy-Cache $upstream_cache_status:添加一个响应头,显示缓存状态(HIT、MISS、BYPASS 等)。

4. 配置缓存忽略查询字符串

如果需要忽略查询字符串,可以在缓存键中排除查询字符串。

示例配置:

http {
    # 定义缓存区
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        # 配置缓存
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 启用缓存
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
            proxy_cache_valid 200 301 302 10m;
            proxy_cache_valid 404 1m;

            # 忽略查询字符串
            proxy_ignore_headers Cache-Control;
            proxy_cache_bypass $http_pragma $http_authorization;
            proxy_no_cache $http_pragma $http_authorization;

            # 添加缓存控制头
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

5. 测试配置

在重新加载 Nginx 之前,先测试配置文件是否有语法错误。

sudo nginx -t

6. 重新加载 Nginx

如果配置文件没有问题,重新加载 Nginx 使配置生效。

sudo systemctl reload nginx

7. 验证缓存

可以通过查看响应头中的 X-Proxy-Cache 字段来验证缓存是否生效。

示例请求:

curl -I http://example.com/some-dynamic-content

示例响应:

HTTP/1.1 200 OK
Server: nginx/1.21.3
Date: Tue, 12 Oct 2021 12:34:56 GMT
Content-Type: text/html
Content-Length: 1234
Connection: keep-alive
X-Proxy-Cache: HIT

总结

通过上述配置,Nginx 可以有效地缓存动态内容,提高系统的性能和响应速度。这些配置可以根据实际需求进行调整,以满足不同的缓存策略和要求。

到此这篇关于Nginx实现动态内容缓存的示例代码的文章就介绍到这了,更多相关Nginx 动态缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx如何实现同个ip、端口访问不同的项目(以路径区分项目)

    nginx如何实现同个ip、端口访问不同的项目(以路径区分项目)

    这篇文章主要介绍了nginx如何实现同个ip、端口访问不同的项目(以路径区分项目),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Nginx下配置301重定向的正确方法例子

    Nginx下配置301重定向的正确方法例子

    这篇文章主要介绍了Nginx下配置301重定向的正确方法例子,本文给出了常用的配置方法例子和正确的配置例子,需要的朋友可以参考下
    2015-03-03
  • 启用Nginx目录浏览功能的方法

    启用Nginx目录浏览功能的方法

    这篇文章主要介绍了启用Nginx目录浏览功能的方法,需要的朋友可以参考下
    2014-03-03
  • Nginx反向代理如何到访问者机器上(后端调试)

    Nginx反向代理如何到访问者机器上(后端调试)

    这篇文章主要介绍了Nginx反向代理如何到访问者机器上(后端调试),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别解析

    nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_por

    nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块,其中proxy_set_header指令就是该模块需要读取的配置文件,这篇文章主要介绍了nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别,需要的朋友可以参考下
    2024-03-03
  • 如何使用Nginx解决跨域问题详解

    如何使用Nginx解决跨域问题详解

    本地运行一个项目,但是要访问外域的api接口,存在跨域问题,下面这篇文章主要给大家介绍了关于如何使用Nginx解决跨域问题的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Nginx+ModSecurity安全模块部署的实现

    Nginx+ModSecurity安全模块部署的实现

    本文主要介绍了Nginx+ModSecurity安全模块部署的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Nginx安装SSl模板异常处理方式

    Nginx安装SSl模板异常处理方式

    文章介绍了在Linux环境下配置Nginx支持SSL时遇到的问题及解决方法,主要步骤包括:安装SSL模块、解决缺少OpenSSL包的问题,并通过下载和编译源码的方式解决SSL模块安装失败的问题
    2025-02-02
  • Nginx Proxy Manager轻松搭建反向代理的实现

    Nginx Proxy Manager轻松搭建反向代理的实现

    NginxProxyManager是一款开源的反向代理和SSL证书管理工具,本文主要介绍了Nginx Proxy Manager轻松搭建反向代理的实现,感兴趣的可以了解一下
    2025-02-02
  • Nginx中Location配置超详细讲解

    Nginx中Location配置超详细讲解

    最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全隐患哦),下面这篇文章主要给大家介绍了关于Nginx中Location配置的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论