Nginx 是一個高效能、高穩定性的 Web 伺服器。其中,Nginx 提供的 fastcgi_cache
可以有效地快取後端伺服器(如 PHP-FPM)的回應,以提高網站的回應速度。但在預設情況下,我們需要手動清理這些快取。此時,我們可以使用 NGINX Helper 插件來協助進行快取的清除。
內容目錄
前期準備
要有編譯器
sudo apt-get install g++
NGINX Helper
1. 安裝 NGINX Helper
首先,你需要在你的網站上安裝 NGINX Helper。如果你使用的是 WordPress,可以直接從插件庫中安裝。
2. 設定 NGINX 快取路徑
為了讓 NGINX Helper 知道你的 Nginx 快取路徑,你需要在 Nginx 的設定檔中,指定 fastcgi_cache_path
。例如:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=MYCACHE:100m inactive=60m;
此設定將會在 /var/run/nginx-cache
建立快取資料。
3. 配置 NGINX Helper
在 WordPress 的設定中,找到 NGINX Helper 的設定頁面,並啟用以下選項:
- Enable Cache Purge
- Purge Entire Cache when a post or page is published
並設定你的 Nginx 快取路徑(如 /var/run/nginx-cache
)。
4. 手動清除快取
若需要手動清除快取,可以直接在 NGINX Helper 的設定頁面點選 “Purge Entire Cache” 按鈕。
5. Nginx 設定更新
確保你的 Nginx 設定檔有啟用快取清除功能:
location ~ /purge(/.*) { fastcgi_cache_purge MYCACHE "$scheme$request_method$host$1"; }
6.重新加載 Nginx 以使新設定生效。Copy code
sudo systemctl reload nginx
安裝 Nginx 新版包含有ngx_cache_purge
1.備份配置:
在進行任何更改之前,確保備份你當前的 Nginx 配置,以防止任何數據丟失。
sudo cp -r /etc/nginx /etc/nginx-backup
停止和卸載現有的 Nginx:
首先,停止 Nginx 服務:
sudo systemctl stop nginx
然後,卸載 Ubuntu 的 Nginx 版本:
sudo apt-get purge nginx nginx-common nginx-full
下載 OpenSSL
wget -c https://www.openssl.org/source/openssl-3.0.11.tar.gz ; tar zxf openssl-3.0.11.tar.gz ; rm openssl-3.0.11.tar.gz
下載第三方模組
下載最新版本 https://github.com/nginx-modules/ngx_cache_purge/releases
wget https://github.com/nginx-modules/ngx_cache_purge/archive/refs/tags/2.5.3.tar.gz tar -xvzf 2.5.3.tar.gz
git clone https://github.com/google/ngx_brotli.git pushd ngx_brotli git submodule update --init popd
編譯 ngx_brotli
cd ~/ngx_brotli/deps/brotli/c mkdir -p out cmake .. make
編譯和安裝 Nginx 1.2:
如果你還沒有下載和編譯 Nginx 1.2,首先下載源代碼,然後編譯和安裝它:
sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -xvzf nginx-1.24.0.tar.gz cd nginx-1.24.0/ ./configure --with-pcre=../pcre-8.45 \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-openssl=../openssl-3.0.11 \ --add-module=../ngx_brotli \ --add-module=../ngx_cache_purge-2.5.3 make sudo make install
預設情況下,自行編譯的 Nginx 會被安裝到 /usr/local/nginx
。
如果出現下面的錯誤
./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option.
代表你apt-get install libpcre3 libpcre3-dev這邊出現問題
可以自行安裝 PCRE
wget https://ftp.exim.org/pub/pcre/pcre-8.45.tar.gz tar -xvzf pcre-8.45.tar.gz ./configure --with-pcre=../pcre-8.45 \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-openssl=../openssl-3.0.11 \ --add-module=../ngx_brotli \ --add-module=../ngx_cache_purge-2.5.3
如果出現gzip錯誤
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option.
那可以自行安中 zlib
sudo apt-get update sudo apt-get install zlib1g zlib1g-dev
如果出現 cannot find -lbrotlienc or cannot find -lbrotlicommon ,那需要安裝 Brotli
sudo apt update sudo apt install libbrotli-dev
驗證 Brotli 是否安裝成功
ldconfig -p | grep brotli
檢查安裝是否成功
sudo /usr/local/nginx/sbin/nginx -V
配置系統啟動腳本:
如果你希望 Nginx 在系統啟動時自動運行,你需要設置一個 systemd 服務文件或 init 腳本。由於你從源代碼編譯 Nginx,它不會自帶 systemd 服務文件,所以你可能需要自行創建。
恢復配置:
從你之前備份的配置恢復設置:
sudo cp -r /etc/nginx-backup/* /usr/local/nginx/conf/
請注意,由於 Nginx 版本之間可能存在差異,所以你可能需要調整配置以使其與 Nginx 1.2 版本兼容。
啟動新的 Nginx:
sudo /usr/local/nginx/sbin/nginx
要使 /usr/local/nginx/sbin/nginx
可在任何地方都能執行
使用符號鏈接:
你可以在 /usr/bin
或 /usr/sbin
中創建一個指向 /usr/local/nginx/sbin/nginx
的符號鏈接。這樣,由於 /usr/bin
和 /usr/sbin
通常都在 $PATH
環境變量中,你就可以從任何地方執行 nginx
命令。
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
修改 $PATH
變量:
作為另一種方法,你可以將 /usr/local/nginx/sbin
目錄添加到 $PATH
環境變量中。這可以在你的 shell 啟動腳本中完成,例如 ~/.bashrc
或 ~/.profile
。打開 ~/.bashrc
文件:
nano ~/.bashrc
在文件末尾添加以下行:
export PATH=$PATH:/usr/local/nginx/sbin
然後,重新加載 .bashrc
以應用更改:
source ~/.bashrc
管理 Nginx
你可以直接從GitHub下載nginx-startup-script-for-debian-ubuntu.sh至你的『/etc/init.d』目錄,並將名稱更改為『nginx』。
sudo wget -O /etc/init.d/nginx https://raw.githubusercontent.com/KJieGitHub/Nginx/master/nginx-script/nginx-startup/nginx-startup-script-for-debian-ubuntu.sh sudo chmod +x /etc/init.d/nginx sudo systemctl daemon-reload sudo systemctl start nginx sudo update-rc.d -f nginx defaults
實用管理命令
sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx sudo systemctl reload nginx
實用連結
Nginx 版本以及下載連結
https://nginx.org/en/download.html
Nginx 第三方模組
參考資料
https://www.kjnotes.com/devtools/83
https://github.com/FRiCKLE/ngx_cache_purge
完整版本的 Nginx Config
proxy_cache_path /var/run/proxy_cache/ levels=1:2 keys_zone=demo-proxy:10m max_size=1000m inactive=600m use_temp_path=off; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; server { listen 80; server_name yoursite; proxy_cache demo-proxy; proxy_cache_valid 200 1d; #設定上傳的檔案大小 client_max_body_size 64M; set $skip_cache 0; add_header X-Cache $upstream_cache_status; if ($request_method = POST) { set $skip_cache 1; } if ($query_string != "") { set $skip_cache 1; } if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") { 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; } location / { proxy_cache_bypass $skip_cache; proxy_no_cache $skip_cache; proxy_hide_header X-Frame-Options; proxy_pass http://X.X.X.X:X; 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 $scheme; proxy_cache demo-proxy; proxy_cache_key $uri$is_args$args; } location ~ /purge(/.*) { allow 127.0.0.1; proxy_cache_purge demo-proxy $1$is_args$args; } }
近期留言