Nginx配置多站點下的Proxy_cache或Fastcgi_cache快取加速
張戈部落格分享過很多關於快取加速的教程,自己也是不斷的在摸索,追求最佳的網站靜態快取加速方案。在這裡簡單的總結一下:
1、使用虛擬主機的朋友推薦使用快取外掛或 php 程式碼版快取方案=>點此直達 2、使用獨立主機的朋友推薦使用 Nginx 的 Fastcgi 純靜態快取方案=>點此直達
![](https://img.796t.com/res/2022/05-05/02/1edbec523106e1ddd3df4c2527815d6c.png)
在我分享了 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 快取都不用愁了!