1. 程式人生 > 其它 >Nginx配置多站點下的Proxy_cache或Fastcgi_cache快取加速

Nginx配置多站點下的Proxy_cache或Fastcgi_cache快取加速

張戈部落格分享過很多關於快取加速的教程,自己也是不斷的在摸索,追求最佳的網站靜態快取加速方案。在這裡簡單的總結一下:

1、使用虛擬主機的朋友推薦使用快取外掛或 php 程式碼版快取方案=>點此直達 2、使用獨立主機的朋友推薦使用 Nginx 的 Fastcgi 純靜態快取方案=>點此直達

在我分享了 Nginx 的 Fastcgi 快取之後,有不少朋友已折騰成功。不過有朋友反饋,不知道在多站點下如何配置 Nginx Fastcgi。而所有網上分享的方案都是單個站點的,我本以為多站點的直接在 php 的 location 模組中插入 fastcgi 快取配置就好了,結果發現會報錯,提示快取空間已被使用。

經過張戈輪番測試,最終試出了多站點下的 Fastcgi 快取配置,下面簡單分享下。

一、部署 http 模組

①、單個站點

單個站點上篇文章已經分享過了,在 http 模組內加入如下配置即可:

fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:150m inactive=31d max_size=10G;
fastcgi_temp_path /tmp/wpcache/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

②、多個站點

當要給多個站點開啟 fastcgi 快取時,以上配置就不行了,會報錯。經過測試,修改如下即可:

#站點1快取配置
fastcgi_cache_path /tmp/zhangge_cache levels=1:2 keys_zone=zhangge.net:384m inactive=1d max_size=5G;
#站點2快取配置
#如果要開啟更多站點快取,請繼續增加,注意每個站點的 快取路徑 和 keys_zone 要自定義區分一下
#Ps:程式碼中的引數都只是範例,實際使用請根據伺服器配置自行修改
fastcgi_cache_path /tmp/zgboke_cache levels=1:2 keys_zone=zgboke.com:384m inactive=1d max_size=5G;
#其他配置可以不變
fastcgi_temp_path /tmp/temp_cache;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;

二、部署 server 模組

配置好了 http 模組之後,server 模組就很簡單了!

只要在不同的站點的 php 模組下插入不同的 fastcgi 快取配置即可,其實就是 key_zone 的區別而已。

比如,我同時給張戈部落格和中國部落格聯盟 2 個站點的配置如下:

張戈部落格:

server(
#其他配置略 
location ~ [^/].php(/|$)
            {
                try_files $uri =404;
                fastcgi_pass  unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
                #fastcgi快取配置
                fastcgi_cache_bypass $skip_cache;
                fastcgi_no_cache $skip_cache;
                add_header X-Cache "$upstream_cache_status From $host";
                fastcgi_cache zhangge.net;
                fastcgi_cache_valid 200 301 302 1d;
        }
#其他配置略
}

中國部落格聯盟:

server(
#以上配置略 
location ~ [^/].php(/|$)
            {
                try_files $uri =404;
                fastcgi_pass  unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
                #fastcgi快取配置
                fastcgi_cache_bypass $skip_cache;
                fastcgi_no_cache $skip_cache;
                add_header X-Cache "$upstream_cache_status From $host";
                fastcgi_cache zgboke.com;
                fastcgi_cache_valid 200 301 302 1d;
        }
#以下配置略
}

其實就是和 http 模組內定義的快取一 一對應而已,這樣才能區分開來啊!否則就會報錯。

三、Proxy_cache 快取

分享了多站點的 fastcgi 快取配置,順帶也分享一下 Proxy_cache 的多站點快取配置好了。免得某些朋友不會依葫蘆畫瓢。。。

其實,我也沒實際測試,但是依此類推應該如下配置即可,有需求的測試一番就知道了:

①、http 模組

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_cache_path,注意快取路徑和keys_zone需要自定義區分
#Ps:程式碼中的引數只是範例,實際使用請根據伺服器配置自行修改
proxy_cache_path /tmp/web1_cache levels=1:2 keys_zone=web1_cache:256m inactive=31d max_size=2g;
proxy_cache_path /tmp/web2_cache levels=1:2 keys_zone=web2_cache:256m inactive=31d max_size=2g;
proxy_temp_path /tmp/temp_cache;

②、server 模組

至於 server 模組應該就不用跟上面介紹的那樣詳細了吧!不同站點只是 proxy_cache 這個配置不一樣而已!比如:

站點 1 配置

#其他配置略
proxy_cache web1_cache; #填寫站點對應的keys_zone即可
proxy_cache_valid 200 302 304 301 1d;
proxy_cache_valid any 1m;

站點 2 配置:

#其他配置略
proxy_cache web2_cache; #填寫站點對應的keys_zone即可
proxy_cache_valid 200 302 304 301 1d;
proxy_cache_valid any 1m;

Ps:可能有人又要問了,這配置是放到哪的啊?唉,就這樣您還瞎折騰啥呢?老老實實寫文章吧!

哦了,看懂以上配置,隨便部署多少站點的 fastcgi 或 proxy 快取都不用愁了!