国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

Nginx配置proxy_cache后緩存不能生成緩存文件

2024-08-30 12:27:47
字體:
來源:轉載
供稿:網友

proxy_cache方式跟memcached內存級別的緩存還是不能比擬,但nginx目前還不能做memcached的write動作,所以簡單配置proxy_cache也能抵擋不少鴨梨。

沒有配置好proxy_cache
但在網絡上搜索幾篇文章以后,發現大家寫的很模糊,很多文章都是抄襲復制品。所以按照網絡上的教程,我一開始是這么配置的:

在http段增加:

 代碼如下  

proxy_cache_path  /tmp/qttc_cache levels=1:2 keys_zone=qttc:200m inactive=1d max_size=10g;

然后在server中找到你要緩存的location,增加:

 代碼如下  

proxy_cache qttc;

意思表示開啟這個location的緩存,但是我重啟nginx以后,重新訪問站點發現在緩存目錄下并沒有生成緩存文件。于是,我首先這么做:

一、會不會是瀏覽器有緩存,于是我清空瀏覽器,甚至使用其它瀏覽器訪問站點,并且按狂刷。結果還是沒有生成靜態文件。

二、會不會是nginx自動判斷我的內容,太少就不會緩存。于是我賦值了一大堆字符串到一個文件中,然后使用瀏覽器狂訪問那個文件,結果還是沒有生成靜態文件。

于是到網上搜索,結果也沒有搜索到有用的信息。難道我安裝的nginx有問題?重新從官網下載編譯安裝,還是沒有解決問題。

原來是這樣工作的
后來不斷的摸索,仔細研究。發現還要添加以下兩條才能讓proxy_cache工作,

proxy_cache_valid  200 304 302 24h;

指定各個狀態碼下緩存的時間,200是很重要的,如果有其它的要緩存可以在后邊加上

 代碼如下  

proxy_pass http://www.survivalescaperooms.com;

指定獲取靜態內容的地址,其實proxy_cache的原理就是從一個你指定的地址獲取內容,然后緩存。當下次你訪問時,nginx會自動判斷有沒有緩存文件?如果有的話緩存文件是不是已經過期(緩存文件的有效期就是第一條設置的)?如果前面兩條任何一條成立就會從proxy_pass的地址重新獲取頁面信息。

于是經過配置以后,終于能生成緩存文件了:

 代碼如下  

[root@lee qttc_cache]# ll
總用量 24
drwx------ 3 www www 4096 7月  19 08:55 4
drwx------ 5 www www 4096 7月  19 08:55 8
drwx------ 3 www www 4096 7月  19 08:55 a
drwx------ 3 www www 4096 7月  19 08:55 c
drwx------ 3 www www 4096 7月  19 08:55 d
drwx------ 3 www www 4096 7月  19 08:55 e

 
可惜,如果你要清空緩存,可以在后臺加一個功能使用后端語言刪除,或者使用一個Purge插件通過IP加端口訪問的方式來清楚緩存文件。

PS.
如果你要清楚某一個url的緩存文件,就比較悲催了。但也不是不能做到。因為nginx生成url文件的時候,存放的目錄以及生成的哈希文件名都是固定的,你也可以使用proxy_cache_key來指定生成的key的字段內容。

如果你掌握它的生成規則,你就可以寫一個管理器來快速清空單個url緩存。最爛的方法也可以把緩存目錄清空,接著訪問你要需要單獨清空的url,然后再到緩存目錄里看看生成的緩存目錄與文件名,再你需要單獨清空這個url的緩存時直接把文件干掉就好。

因為proxy_cache需要proxy_pass配置才能生成緩存內容,而目前一般的站點配置中,比如PHP站點都是把php頁面proxy_pass到后臺PHP程序處理,所以你可以在處理php的location里加上proxy_cache把php動態語言生成的內容結果緩存。對于那些靜態文件其實也不需要什么proxy_cache來緩存,因為靜態文件跟proxy_cache最終生成的緩存文件一樣都是在磁盤上的一個文件。

因此正確的描述是:它是一個重定向,反向代理的緩存功能,不是根據url生成緩存靜態文件的功能


下面我把我的全部配置代碼拿出來

proxy_cache是nginx自帶的內置緩存模塊,配置一下就可以用了,看下面的配置

vi /usr/local/nginx/conf/nginx.conf

 代碼如下  

user  zhangy users;
worker_processes 10;
error_log  /var/vlogs/nginx_error.log  crit;
pid        /var/vlogs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
 use epoll;
 worker_connections 65535;
}
http
{
 include       mime.types;
 default_type  application/octet-stream;
 #charset  gb2312;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 8m;
 sendfile on;
 tcp_nopush     on;
 keepalive_timeout 60;

 tcp_nodelay on;

 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;
//============
 client_body_buffer_size  512k;
 proxy_connect_timeout    5;
 proxy_read_timeout       60;
 proxy_send_timeout       5;
 proxy_buffer_size        16k;
 proxy_buffers            4 64k;
 proxy_busy_buffers_size 128k;
 proxy_temp_file_write_size 128k;
 proxy_temp_path   /usr/local/nginx/proxy_temp;
/*levels設置目錄層次
keys_zone設置緩存名字和共享內存大小
inactive在指定時間內沒人訪問則被刪除在這里是1天
max_size最大緩存空間*/
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;
//============等號中間要加的,關鍵只要加上proxy_cache_path

 gzip on;
 gzip_min_length  1k;
 gzip_buffers     4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types       text/plain application/x-javascript text/css application/xml;
 gzip_vary on;

 upstream myselfxtajmd {
 server 127.0.0.1:10002;
 server 127.0.0.1:10001 weight=5;
 }

 server
 {
 listen       10000;
 server_name  localhost;
 index index.html index.htm index.php;
 log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" $http_x_forwarded_for';
 access_log  /var/log/test.log  access;

 location /
 {
 proxy_cache content; //根keys_zone后的內容對應
 proxy_cache_valid  200 304 301 302 10d;   //哪些狀態緩存多長時間
 proxy_cache_valid  any 1d;    //其他的緩存多長時間
 proxy_cache_key $host$uri$is_args$args;   //通過key來hash,定義KEY的值

 proxy_pass http://myselfxtajmd;
 proxy_redirect                      off;
 proxy_set_header   Host             $host;
 proxy_set_header   X-Real-IP        $remote_addr;
 proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 }

//動態的放過
 location ~ .*.(php|jsp|cgi)?$
 {
 proxy_set_header Host  $host;
 proxy_set_header X-Forwarded-For  $remote_addr;
 proxy_pass http://www.survivalescaperooms.com;
 }
 }
}


設置proxy_cache緩存與取消緩存
在配置文件的server{}內,添加這么一句即可:

 代碼如下  
 
location ~ .*/.(css|js)$ {
    add_header Cache-Control 'no-store';
}

 


在nginx.conf里的http塊加入以下代碼

#proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
proxy_temp_path   /tmp/proxy_temp_dir;
#設置名稱為nginx_cache,內存緩存空間大小為500MB,30天沒有被訪問的內容自動清除,硬盤緩存空間大小為30GB。

 代碼如下  
proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;


在server加入以下代碼

 

 代碼如下  

 
location / {
        proxy_cache nginx_cache;
        proxy_cache_key $host$uri$is_args$args;
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        expires  30d;
}
 

重啟Ngnix

 

 代碼如下  
/usr/local/nginx/sbin/nginx -s reload

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武义县| 神木县| 句容市| 丹凤县| 江北区| 茶陵县| 沐川县| 永新县| 高雄县| 十堰市| 正镶白旗| 个旧市| 建阳市| 宜兰县| 乐昌市| 玉树县| 建昌县| 于都县| 遂川县| 永嘉县| 驻马店市| 丹巴县| 镇远县| 从江县| 邮箱| 高雄市| 大关县| 岚皋县| 合川市| 乌兰察布市| 碌曲县| 南昌市| 嘉义县| 云浮市| 铜陵市| 井研县| 汝南县| 罗源县| 铁力市| 天祝| 麟游县|