Nginx FastCGI_Cache 加速 WordPress
因有在使用 WordPress 服務想說拿來測試一下看看是否能讓網站能夠加速連線
環境是使用 Nginx 這個服務來架設的,首先要有 ngx_cache_purge 這個模組來搭配使用,那這個模組需要先用編輯的方式才能運行。
下載 ngx_cache_purge 模組
官方下載 :ngx_cache_purge
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
解壓
tar -zxvf ngx_cache_purge-2.3.tar.gz
刪除壓縮檔
rm ngx_cache_purge-2.3.tar.gz
修改資料夾
mv ngx_cache_purge-2.3/ ngx_cache_purge/
編譯 nginx 加 ngx_cache_purge 模組
可以參考本網頁的 Nginx 是如何編譯的
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=../nginx-ct/ --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3 --add-module=../ngx-pagespeed/ --add-module=../ngx_brotli/ --add-module=../ngx_cache_purge/
編譯完成之後開始設定 nginx 設定檔
nginx 設定檔
建立兩個目前來放存暫存檔用
mkdir /var/cache/nginx/wpcache
mkdir /var/cache/nginx/wpcache/temp
chown -R nginx:nginx /var/cache/nginx/wpcache
nginx 全域設定
#表頭檢測 FastCGI_Cache 是否有正常運行
add_header rt-Fastcgi-Cache "$upstream_cache_status From $host";
fastcgi_cache_path /var/cache/nginx/wpcache levels=1:2 keys_zone=GTWANG_CACHE:250m inactive=1d max_size=600m;
fastcgi_temp_path /var/cache/nginx/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;
服務設定
# html 檔
#
set $skip_cache 0;
# POST 請求不用快取
if ($request_method = POST) {
set $skip_cache 1;
}
# 若有 query 參數的網址不用快取
if ($query_string != "") {
set $skip_cache 1;
}
# 特殊的網址不用快取
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $skip_cache 1;
}
# 已登入使用者、留言者不用快取
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
# 加入快取資訊表頭(除錯用)
add_header X-Cache $upstream_cache_status;
#
location / {
# 使用「瀏覽器」瀏覽根目錄時,未指定檔名時預設使用的檔案
index index.php index.html index.htm;
autoindex off;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
try_files $uri =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
#
fastcgi_cache GTWANG_CACHE;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_valid 200 301 302 1d;
}
location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
#
fastcgi_cache GTWANG_CACHE;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_valid 200 301 302 1d;
#
expires 30d;
log_not_found off;
}
下載 WordPress 套件 Nginx Helper
Nginx Proxy 設定
全域設定
add_header cache-status $upstream_cache_status;
proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 4 64K;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 512k;
proxy_connect_timeout 75s;
proxy_read_timeout 75s;
proxy_send_timeout 75s;
#想要開啟 nginx 的緩存功能,需要添加此處兩行內容!
#設定 Web 緩存區名稱為 my-cache ,快取緩存空間為 500M ,緩存的資訊超過1天沒有被訪問就自動清除,訪問的緩存資訊,硬碟緩存空間大小為 50G
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my-cache:500m loader_threshold=300 loader_files=200 inactive=1d max_size=10g;
proxy_temp_path /var/cache/nginx/nginx_temp;
Nginx 針對響應緩存有兩個處理動作
- 緩存管理器會定時檢查緩存的狀態。如果緩存的內容大小達到指令 proxy_cache_path 的參數 max-size 指定的值,則緩存管理器會根據 LRU 算法刪除緩存的內容。在檢查的間隔時間內,總的緩存內容大小可以臨時超過設定的大小閾值。
- 緩存載入只在 Nginx 啟動的時候執行一次,將緩存內容的原信息載入到指定的分享快取區內。一次將所有的緩存內容載入到快取中會耗費大量的資源,並且會影響 Nginx 啟動後幾分鍾內的效能。為了避免這種問題可以通過在指令 proxy_cache_path 後添加下面參數:
loader_threshold – 緩存載入緩存內容的最大執行時間(單位是毫性,默認值是200毫性)。
loader_files – 在緩存載入緩存內容的執行時間間隔內,最多能載入多少個緩存條目,默認100。
loader_sleeps – 每次執行的時間間隔,單位是毫秒(默認50毫秒)
服務設定
location / {
proxy_pass https://IP;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_pass_header Authorization;
#
proxy_cache my-cache;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_cache_methods GET HEAD POST;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_403 http_404;
proxy_cache_revalidate on;
proxy_cache_lock on;
proxy_cache_lock_age 5s;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 10m;
proxy_cache_background_update on;
proxy_cache_key $host$uri$is_args$args;
}
location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
proxy_pass https://ip;
proxy_cache my-cache;
proxy_cache_valid 200 10d;
proxy_cache_valid 304 1d;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 10d;
proxy_cache_key $host$uri$is_args$args;
expires 30d;
}
location ~ /purge(/.*) {
allow all;
#指定可以清除缓存的ip,all允许所有ip清除
proxy_cache_purge my-cache $host$1$is_args$args;
}
參考相關網頁:
-
如果正確配置 Nginx FastCGI_Cache 加速 WordPress - ngx_cache_purge github 官方
- 官方網站
- Nginx自建CDN与ngx_cache_purge清除缓存
- Nginx编译并添加ngx_cache_purge模块
- Nginx缓存配置以及nginx ngx_cache_purge模块的使用
- nginx缓存功能介绍
- 使用Nginx作為緩存伺服器(Cache Server)
- WordPress优化——利用Nginx fastcgi_cache缓存加速
- nginx靜態檔案快取的解決方案