nginx的緩存模式:
緩存是通過鍵值存儲的,鍵是存放在內存中,數據是放到磁盤上。在內存中找一塊空間,每個鍵以哈希編碼的方式放到內存,這個鍵所對應的值指向的是磁盤中緩存空間的內容的路徑。磁盤上存放緩存的文件系統,層級不會太深。
1)命令 proxy_cache_path
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http
loader_threshold----指定每次加載執行的時間
loader_files---每次加載的數量
loader_sleeps---每次加載的延時
inactive 非活動期限
max_size:設置磁盤中緩存數據的大小限制
案例:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
(在內存中找10M的空間,并取名為one)
file names in a cache will look like this:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
指定緩存哪些請求
nginx默認會緩存所有 get 和 head 方法的請求結果,緩存的key默認使用請求字符串
2)proxy_cache_min_uses
Syntax: proxy_cache_min_uses number;
Default:
proxy_cache_min_uses 1;
Context: http, server, location
Sets the number of requests after which the response will be cached.
該指令用于設置客戶端請求發送的次數,當客戶端向被代理服務器發送相同請求達到指令設置的次數后,nginx服務器才會對請求的響應數據做緩存
默認為1次
proxy_cache_min_uses 2;
3)proxy_cache_key
該指令用于設置nginx服務器在內存中為緩存數據建立索引時使用的關鍵字
例如 proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_key “$scheme$proxy_host$uri$is_args$args”
4)緩存有效期
該指令可以針對不同的http響應狀態設置不同的緩存時間
可以指定緩存有效時間,例如
proxy_cache_valid 200 302 10m; //響應狀態碼為200 302時,10分鐘有效
proxy_cache_valid any 5m; //對應任何狀態碼,5分鐘有效
5)是否使用過期的內容響應 proxy_cache_use_stale
Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default:
proxy_cache_use_stale off;
Context: http, server, location
如果nginx在訪問被代理服務器過程中出現,被代理服務器無法訪問或者訪問錯誤等現象,nginx服務器可以使用歷史緩存響應用戶端的請求,但這些數據不一定和被代理服務器上的最新數據相一致。
案例:
proxy_cache_use_stale error invalid_header http_500 http_502 http_503 http_504 ;
6)緩存修剪(proxy_cache_purge)
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache cache_zone;
proxy_cache_key $uri;
proxy_cache_purge $purge_method;
}
}
7) proxy_cache_bypass
繞開緩存
用于設置nginx將不會從緩存存取數據
例如 proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
案例:

第二部分:案例
在http段定義
proxy_cache_path /cache/nginx levels=1:2 keys_zone=mycache:32m;
[root@proxy01 nginx]# mkdir -p /cache/nginx && chown nginx.nginx /cache/nginx
[root@proxy01 nginx]# ll /cache/nginx/ -d
drwxr-xr-x 2 nginx nginx 4096 Dec 20 16:18 /cache/nginx/
在server段配置
location /bbs/ {
proxy_cache mycache;
proxy_cache_valid 200 1d;
proxy_cache_valid 301 302 10m;
proxy_cache_valid any 1m;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504 http_429;
proxy_cache_min_uses 2;
proxy_cache_key "$host$request_uri";
proxy_pass http://10.100.100.106:8082/bbs/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
第三部分:配置緩存修剪
1、下載ngx_cache_purge
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.zip
https://codeload.github.com/FRiCKLE/ngx_cache_purge/zip/master
2、配置nginx
location ~ /purge(/.*) {
auth_basic "allow purge cache data";
auth_basic_user_file /usr/local/nginx/conf/conf.d/.htpasswd;
allow 127.0.0.1;
allow 10.100.100.0/24;
deny all;
proxy_cache_purge mycache $host$1$is_args$args;
}
location /bbs/ {
proxy_cache mycache;
proxy_cache_valid 200 1d;
proxy_cache_valid 301 302 10m;
proxy_cache_valid any 1m;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_min_uses 2;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://10.100.100.106:8082/bbs/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
3、安裝httpd,并通過htpasswd設置密碼
htpasswd -c -m /usr/local/nginx/conf/conf.d/.htpasswd tom
4、重啟nginx服務
測試
[root@proxy01 nginx]# pwd
/cache/nginx
[root@proxy01 nginx]# ll
total 0
(剛開始緩存沒有內容)
此時訪問https://test.51yuki.cn/bbs/a.html
然后在查看
[root@proxy01 nginx]# ll
total 4
drwx------ 3 nginx nginx 4096 Dec 20 17:23 c
[root@proxy01 nginx]# cd c/9a/
[root@proxy01 9a]# ll
total 4
-rw------- 1 nginx nginx 456 Dec 20 17:23 36e85e58edcd96369da181c0eab5e9ac
(發現有緩存咯,此時我們模擬修改后臺服務器的內容)
[root@node1 bbs]# echo "this a test file" >> a.html
然后在測試訪問,發現還是原來的內容
我們就可以把緩存的內容修剪掉,訪問如下
[root@node1 bbs]# echo "this a test file" >> a.html

在訪問,發現就是新的內容咯

五、自定義響應報文的首部
通過add_header添加頭部
語法:
Syntax: add_header name value [always];
Default: —
Context: http, server, location, if in location
案例:
server {
listen 443 ssl;
server_name www.test.com;
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;

- 第一部分:Nginx Web服務
- 第一章: Nginx的初探
- 第二章:Nginx的安裝部署
- 第一節:在centos6上通過Yum安裝Nginx
- 第二節:在Centos7上通過Yum安裝nginx
- 第三節:編譯安裝Nginx服務
- 第四節: Nginx編譯參數詳解
- 第五節: Nginx的啟動腳本
- 第六節:Nginx的shell腳本安裝
- 第七節:nginx服務的平滑升級
- 第三章:Nginx服務基礎配置
- 第一節: 配置運行nginx服務器用戶
- 第二節:配置運行生成的worker processes進程數
- 第三節:配置Nginx進程PID存放路徑
- 第四節:定義MIME類型
- 第五節:自定義nginx的訪問日志
- 第六節:主配置段(main)常用的配置
- 第七節:http段(核心)常用的配置命令
- 第八節:配置nginx中的location段
- 第九節: 基于IP的訪問控制
- 第十節:基于用戶的訪問控制
- 第十一節:Nginx定義status狀態頁
- 第十二節:Nginx服務器Rewrite重寫
- 第十三節:Nginx服務配置防盜鏈
- 第十四節:nginx軟件的優點
- 第四章:Nginx服務器的優化配置
- 第一節:nginx.conf配置文件基本參數優化
- 第二節:fastcgi調優
- 第三節:Gzip調優
- 第四節:expires緩存調優
- 第五節:內核參數優化
- 第六節: Nginx之——413 修改上傳文件大小限制
- 第五章:Nginx虛擬主機的配置
- 第一節:基于名稱的虛擬主機
- 第二節:通過shell腳本添加虛擬主機
- 第六章:Nginx常用模塊指令詳解
- 第一節:ngx_http_realip_module
- 第二節:http_image_filter_module
- 第三節:tengine中配置consistent hash module
- 第四節:ngx_http_userid_module
- 第七章:Nginx服務器配置HTTPS訪問
- 第八章: Nginx服務器日志切割
- 第二部分:Nginx負載均衡反向代理服務
- 第一章:Nginx進階參數詳解
- 第一節:proxy_module參數詳解
- 第二節:upstream_module參數詳解
- 第四章:Nginx反向代理服務
- 第一節:Nginx反向代理配置參數詳解
- 第二節:Nginx反向代理服務配置案例
- 第三節:Nginx緩存
- 第四節: Nginx中fastcgi模塊
- 第五節:nginx+fastcgi實現動靜分離架構
- 第五章:Nginx負載均衡
- 第一節:ngx_http_upstream_module常見指令
- 第二節:調度方法
- 第三節:健康狀態檢查