18个运维必知的Nginx代理缓存配置技巧(你都掌握了哪些呢)

  

18个运维必知的Nginx代理缓存配置技巧

在进行Nginx代理缓存配置前,需要先了解以下18个运维必知的Nginx代理缓存配置技巧。

技巧1:缓存文件存储位置

在Nginx中,缓存文件的默认存储位置为/var/cache/nginx/。如果需要更改缓存文件的存储位置,可以在Nginx的配置文件中修改配置项:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;

上述配置将缓存文件存储在/path/to/cache目录下,并设置了缓存目录层级结构,设置了缓存区域名为my_cache,设置了缓存的自动过期时间为60分钟。

技巧2:缓存的有效时间

为了避免缓存文件存储过久,需要设置缓存的有效时间。在Nginx中,可以使用proxy_cache_valid设置缓存的有效时间:

proxy_cache_valid 200 304 5m;
proxy_cache_valid 404 1m;

上述配置将设置状态码200和304缓存5分钟,状态码404缓存1分钟。

技巧3:缓存的大小限制

为了避免缓存文件过多,可以设置缓存大小限制。在Nginx中,可以使用proxy_cache_path配置缓存大小限制:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;

上述配置将设置缓存文件最大为1G。

技巧4:缓存的内存限制

除了设置缓存文件大小限制,还可以设置缓存的内存限制。在Nginx中,可以使用keys_zone设置缓存的内存限制:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;

上述配置将设置缓存的内存限制为10M。

技巧5:缓存控制

为了更好地控制缓存文件的生成和使用,可以使用proxy_cache_bypassproxy_cache_key指令。在Nginx中,可以使用以下配置:

proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_authorization;
proxy_cache_key "$scheme$request_method$host$request_uri";

上述配置将设置缓存控制指令,通过$http_pragma$http_authorization设置禁止缓存的请求,通过"$scheme$request_method$host$request_uri"设置缓存文件存储的key值。

技巧6:缓存时清除响应头信息

在使用Nginx代理缓存时,需要清除响应头信息。在Nginx中,可以使用以下配置:

proxy_hide_header ETag;
proxy_hide_header X-Powered-By;

上述配置将隐藏ETag和X-Powered-By响应头信息。

技巧7:缓存时添加响应头信息

在使用Nginx代理缓存时,需要添加响应头信息。在Nginx中,可以使用以下配置:

add_header X-Cache $upstream_cache_status;

上述配置将添加X-Cache响应头信息。

技巧8:缓存时控制响应的Cookie和Set-Cookie

为了更好地控制缓存时的Cookie和Set-Cookie信息,可以使用以下配置:

proxy_cache_bypass $http_cookie;
proxy_cache_bypass $http_set_cookie;

上述配置将设置禁止缓存包含Cookie和Set-Cookie信息的请求。

技巧9:缓存错误页面

Nginx可以缓存错误页面,以避免重复地生成错误页面。在Nginx中,可以使用以下配置:

proxy_cache_key "$scheme$request_method$host$request_uri$proxy_host$error_page";

上述配置将设置缓存错误页面。

技巧10:缓存HTTPS页面

Nginx可以缓存HTTPS页面,以加快HTTPS页面响应速度。在Nginx中,可以使用以下配置:

proxy_cache_bypass $http_lastname;
proxy_cache_key "$scheme$request_method$host$request_uri";

上述配置将设置缓存HTTPS页面。

技巧11:设置缓存清除规则

为了避免缓存文件存储过久,可以设置自动清除缓存的规则。在Nginx中,可以使用以下配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_purge on;

上述配置将设置缓存自动清除,并通过purge缓存控制指令清除缓存文件。

技巧12:禁用缓存

有时候需要禁用Nginx的缓存功能。在Nginx中,可以使用以下配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_bypass $http_authentication;
proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass $http_cache_control;

上述配置将禁用缓存功能。

技巧13:缓存目录层级结构

为了更好地管理缓存文件,可以设置缓存目录层级结构。在Nginx中,可以使用以下配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;

上述配置将设置缓存目录层级结构。

技巧14:缓存范围

可以通过配置缓存范围来更好地控制缓存文件的使用。在Nginx中,可以使用以下配置:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_valid 200 1d;
proxy_cache_valid any 0;

上述配置将通过proxy_cache_valid设置缓存范围。

技巧15:获取缓存状态

为了更好地掌握缓存的使用情况,可以获取Nginx的缓存状态。在Nginx中,可以使用以下命令:

nginx -t // 检查Nginx配置文件是否正确
nginx -T // 打印Nginx配置文件的详细信息
nginx -s reload // 重新加载Nginx配置文件
nginx -s stop // 停止Nginx服务
nginx -s quit // 平缓地停止Nginx服务

技巧16:缓存负载均衡

为了更好地控制缓存负载均衡,可以使用以下配置:

upstream backend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081 backup;
}
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass $http_cache_control;
proxy_pass http://backend;

上述配置将设置缓存负载均衡。

技巧17:缓存主动清除

有时候需要主动清除缓存文件。在Nginx中,可以使用以下命令:

nginx -s reload // 重新加载Nginx配置文件
nginx -c /path/to/nginx.conf -s reload // 重新加载指定的Nginx配置文件
nginx -c /path/to/nginx.conf -s reopen // 重新打开日志文件
nginx -c /path/to/nginx.conf -s stop // 停止Nginx服务
nginx -c /path/to/nginx.conf -s quit // 平稳地停止Nginx服务

技巧18:缓存时忽略HTTP协议

有时候需要忽略缓存的HTTP协议部分,可以使用以下配置:

proxy_cache_key "$request_method$http_host$request_uri";

上述配置将忽略缓存的HTTP协议部分。

示例说明1:缓存静态文件

为了减少服务器的负载压力,可以缓存静态文件。在Nginx中,可以使用以下配置:

server {
    listen 80;
    server_name www.example.com;
    root /path/to/html;
    location / {
        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
        proxy_cache_methods GET HEAD;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_cache_valid 200 7d;
        proxy_cache_valid 404 1m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_bypass $http_authorization;
        proxy_cache_bypass $http_cache_control;
        proxy_pass http://127.0.0.1:8080;
    }
}

上述配置将缓存静态文件的请求。

示例说明2:缓存动态文件

为了减少服务器的负载压力,可以缓存动态文件。在Nginx中,可以使用以下配置:

server {
    listen 80;
    server_name www.example.com;
    root /path/to/html;
    location / {
        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
        proxy_cache_methods GET HEAD;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_cache_valid 200 7d;
        proxy_cache_valid 404 1m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_bypass $http_authorization;
        proxy_cache_bypass $http_cache_control;
        proxy_pass http://127.0.0.1:8080;
    }
    location ~ \.php$ {
        proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
        proxy_cache_methods GET HEAD POST;
        proxy_cache_key "$scheme$request_method$host$request_uri$request_body";
        proxy_cache_valid 200 7d;
        proxy_cache_valid 404 1m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_bypass $http_authorization;
        proxy_cache_bypass $http_cache_control;
        proxy_pass http://127.0.0.1:8080;
    }
}

上述配置将缓存动态文件的请求。

相关文章