环境介绍:当前系统Centos7.5,nginx版本1.14.0,ngx_cache_purge(清理nginx缓存的一个插件)模块版本2.3,当前IP192.168.50.101
1、下载解压ngx_cache_purge模块
cd /usr/local/src wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz tar zxf 2.3.tar.gz
|-------|---------------------------------------------------------------------------------------------------------| | 1 2 3 | cd /usr/local/src wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz tar zxf 2.3.tar.gz |
2、下载解压nginx
wget http://nginx.org/download/nginx-1.14.0.tar.gz tar zxf nginx-1.14.0.tar.gz
|-----|--------------------------------------------------------------------------------| | 1 2 | wget http://nginx.org/download/nginx-1.14.0.tar.gz tar zxf nginx-1.14.0.tar.gz |
3、创建nginx启动用户并安装所需依赖
useradd -s /bin/false -M www yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel
|-----|------------------------------------------------------------------------------------------------------------| | 1 2 | useradd -s /bin/false -M www yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel |
4、正式编译nginx
cd nginx-1.14.0 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=../ngx_cache_purge-2.3 make make install
|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | cd nginx-1.14.0 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=../ngx_cache_purge-2.3 make make install |
5、设置systemctl
ln -sv /usr/local/nginx/sbin/nginx /usr/local/sbin/
|---|-----------------------------------------------------| | 1 | ln -sv /usr/local/nginx/sbin/nginx /usr/local/sbin/ |
vi /usr/lib/systemd/system/nginx.service
|---|------------------------------------------| | 1 | vi /usr/lib/systemd/system/nginx.service |
[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
|----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 | [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target |
6、启动nginx并设置开机自启
systemctl start nginx systemctl enable nginx
|-----|----------------------------------------------| | 1 2 | systemctl start nginx systemctl enable nginx |
7、创建一个用于缓存的目录
mkdir -p /data/ngx_cache
|---|--------------------------| | 1 | mkdir -p /data/ngx_cache |
8、创建一个主页文件以便后续演示用
vi /data/index.html
|---|---------------------| | 1 | vi /data/index.html |
9、配置nginx缓存
nginx缓存服务器的配置主要是通过proxy_cache相关命令来实现的,我这里只给出缓存相关的配置,其他参数不做说明。
在nginx.conf配置以下内容
http { ...... proxy_cache_path /data/ngx_cache levels=1:2 keys_zone=whsir_com:10m max_size=10g inactive=60m use_temp_path=off; ...... server { listen 8080; server_name 127.0.0.1; root /data/; } server { ...... listen 80; server_name 192.168.50.101; location / { proxy_cache whsir_com; proxy_cache_valid 200 302 304 60m; proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080; expires 3d; } location ~ /purge(/.*) { allow 127.0.0.1; allow 192.168.50.0/24; deny all; proxy_cache_purge whsir_com $host$1$is_args$args; } location ~ .*\.(jsp|php)?$ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080; } ...... } }
|----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | http { ...... proxy_cache_path /data/ngx_cache levels=1:2 keys_zone=whsir_com:10m max_size=10g inactive=60m use_temp_path=off; ...... server { listen 8080; server_name 127.0.0.1; root /data/; } server { ...... listen 80; server_name 192.168.50.101; location / { proxy_cache whsir_com; proxy_cache_valid 200 302 304 60m; proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080; expires 3d; } location ~ /purge(/.*) { allow 127.0.0.1; allow 192.168.50.0/24; deny all; proxy_cache_purge whsir_com $host$1$is_args$args; } location ~ .*\.(jsp|php)?$ { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080; } ...... } } |
10、一些参数解释
针对缓存部分,这里做一些参数的解释
proxy_cache_path:定义缓存存储位置 levels=1:2:设置缓存目录深度,最多能创建3层。 keys_zone=my_cache:10m:定义缓存区域名称和内存缓存空间大小。 max_size=10g:磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件。 inactive=60m:设置缓存时间,60分钟内没有被访问过就删除。 use_temp_path=off:不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off。
|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 | proxy_cache_path:定义缓存存储位置 levels=1:2:设置缓存目录深度,最多能创建3层。 keys_zone=my_cache:10m:定义缓存区域名称和内存缓存空间大小。 max_size=10g:磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件。 inactive=60m:设置缓存时间,60分钟内没有被访问过就删除。 use_temp_path=off:不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off。 |
proxy_cache my_cache:缓存区域名称,要和keys_zone定义的名称一致 proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟 proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内 expires 3d:缓存时间3天
|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | proxy_cache my_cache:缓存区域名称,要和keys_zone定义的名称一致 proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟 proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内 expires 3d:缓存时间3天 |
location ~ /purge(/.*) :用于手动清除缓存,allow表示只允许指定的IP才可以清除URL缓存 location ~ .*\.(jsp|php)?$:扩展名以jsp或php结尾的不做缓存
|-----|----------------------------------------------------------------------------------------------------------------| | 1 2 | location ~ /purge(/.*) :用于手动清除缓存,allow表示只允许指定的IP才可以清除URL缓存 location ~ .*\.(jsp|php)?$:扩展名以jsp或php结尾的不做缓存 |
11、实践
缓存参数已经配置完成了,保存退出,nginx -t检查无误后,重启nginx
访问http://192.168.50.101/看到的内容就是我们在index.html所设置的内容
此时文件已经缓存到磁盘
ll /data/ngx_cache/a/ae/adfb876fc186a57f12a0b158220f9aea
接下来我们来清除缓存,只需要在清除缓存网页的URI地址前加上purge即可
http://192.168.50.101/purge/
此时可以看到刚刚缓存的内容已经被清除
再举个例子:
想要清除http://192.168.50.101/abc/123.html,就访问http://192.168.50.101/purge/abc/123.html