Rocket-Nginx 是 WordPress 快取外掛程式 WP Rocket 的 Nginx 配置。它使 Nginx 能夠直接提供先前快取的文件,而無需呼叫 WordPress 或任何 PHP。它還會添加標頭來快取 CSS、JS 和媒體,以便透過減少對 Web 伺服器的請求來利用瀏覽器的快取。
您可能會問自己:「這個配置有多好?」。
假設 WP Rocket 自己在他們的網站上使用它來使其更快!
該項目由位於加拿大蒙特利爾附近的 WordPress 維護服務 SatelliteWP 贊助。我們的服務以英語和法語提供。 SatelliteWP 是 WordPress 網站入口。
該配置由 Maxime Jobin (@maximejobin) 創建,現在由 SatelliteWP 維護。
由於配置的目標是直接提供快取文件,而無需從 WordPress 執行任何 PHP,因此這可能會導致您的排程作業無法被呼叫。您可能已經知道,WP-Cron 作業不是真正的 cron 作業,只有在您造訪網站時才會執行。
為了確保您的排程任務按時運行,強烈建議停用 WordPress cron 作業並建立一個真正的 cron 作業。
若要停用 WordPress cron 作業,請將以下行新增至您的wp-config.php
:
define( 'DISABLE_WP_CRON', true );
然後,每 15 分鐘手動執行一次 cron 作業(對於大多數網站來說應該足夠了):
*/15 * * * * wget -q -O - http://www.website.com/wp-cron.php?doing_wp_cron &>/dev/null
或者
*/15 * * * * curl http://www.website.com/wp-cron.php?doing_wp_cron &>/dev/null
或者
*/15 * * * * cd /home/user/public_html; php wp-cron.php &>/dev/null
確保測試您的任務在此更改後仍然運行!
要使用該腳本,您必須將其包含在實際配置中。如果您的 WordPress 網站尚未設定為使用 Nginx 運行,您可以查看 WordPress 文件中的 Nginx 設定。
所有使用 WP Rocket 的 WordPress 網站只需要一個 Rocket-Nginx 實例。您可以根據需要產生任意數量的設定檔。
您可以在 Nginx 設定目錄中建立一個資料夾rocket-nginx
目錄。如果您使用 Ubuntu,您的 Nginx 配置 (nginx.conf) 應位於: /etc/nginx/
。
要安裝,您可以:
cd /etc/nginx
git clone https://github.com/satellitewp/rocket-nginx.git
從2.0版本開始,必須產生配置。若要產生預設配置,您必須重新命名已停用的 ini 檔案並執行配置解析器:
cd rocket-nginx
cp rocket-nginx.ini.disabled rocket-nginx.ini
php rocket-parser.php
這將產生可包含在所有網站中的default.conf
配置。如果需要更改預設配置,可以編輯 ini 檔案並在檔案底部新增另一個部分。
然後,在 Nginx 設定檔中,必須包含產生的設定。如果您的網站配置位於/etc/nginx/sites-available
中,您需要變更您的配置:
server {
...
# Rocket-Nginx configuration
include rocket-nginx/conf.d/default.conf;
...
}
在重新載入配置之前,請確保對其進行測試: nginx -t
測試完成後,您必須重新載入配置。 service nginx reload
就是這樣。
無需進行任何配置。它開箱即用。但是,您可以編輯一些內容......
只需打開rocket-nginx.ini
檔案並查看其中的所有選項。
您可以基於預設配置新增部分,如下所示:
# This creates the new section and will generate a new configuration
[example.com : default]
# This will add a value to invalidate the cache with a cookie
cookie_invalidate[] = "my_custom_cookie"
編輯 ini 檔案後,必須透過執行解析器重新產生 Nginx 設定檔:
php rocket-parser.php
然後,新新增或修改的部分將產生更新設定檔(*.conf)。
最後,每次產生(或重新產生)設定檔時,您必須:
測試它以確保它沒有產生任何錯誤:
nginx -t
重新載入配置:
service nginx reload
從版本 3.0 開始,將建立一個conf.d
資料夾。對於您建立的每個不同的設定文件,都會在該資料夾內建立一個子資料夾。在其中,您可以建立將包含在生成的設定檔中的檔案。
您可以在不同時間包含設定檔。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: start.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: global.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: http.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: preprocess.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: css.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: js.*.conf
。
在預設設定檔中,在conf.d/default/
中建立一個具有以下檔案名稱模式的檔案: media.*.conf
。
您可能想要檢查您的檔案是否直接由 Nginx 提供並且不呼叫任何 PHP。為此,請開啟rocket-nginx.ini
檔案並變更偵錯值:
debug = false
到:
debug = true
無論 debug 設定為 true 或 false,都會出現以下標頭:
不提供快取檔案的原因:
Rocket-Nginx 完美嗎?不,不是!我們試圖盡可能完美,但 Nginx 的腳本語言並沒有提供 PHP 等語言所提供的所有可能性。因此,存在一些限制。
編碼段
簡短回答:Rocket-Nginx 無法提供編碼的 slug。
由於Nginx 的腳本限制,像'ٛ٩٠' 這樣的slugs 會被編碼,並且WP Rocket 將檔案儲存為'%d8%ac%d8%b2%d8%a7%d8%b2%d8%a9%20%d8% a7 %d9%84%d8%b9%d8%b4%d8%a8'(小寫)。某些瀏覽器(例如Google Chrome)會將請求發送為'%D8%AC%D8%B2%D8%A7%D8%B2%D8%A9%20%D8%A7%D9%84%D8%B9% D8% B4%D8%A8'(大寫)。使用像 PHP 這樣的語言,可以輕鬆比較這些字串是否相等。對於 Nginx,除非需要第三方模組(如 Perl 或 Lua),否則這是不可能的。為了使 Rocket-Nginx 盡可能通用,決定不添加模組依賴項。如果您想要支援編碼的 slugs 並新增缺少的程式碼,請注意版本 3.1.0(及更高版本)提供了一個名為「preprocess」的新配置,用於修改$rocket_uri_path
變數大小寫(強制小寫)。
網頁相容性
簡短回答:如果您啟動 WebP 相容性功能,Rocket-Nginx 將不會提供 WP Rocket 產生的 WebP 快取檔案。
如果您使用工具將映像(JPG、PNG 等)轉換為 WebP,WP Rocket 能夠建立特定的快取。不幸的是,Nginx 的腳本語言不夠強大,無法正確實現驗證。因此,如果您啟動此功能,Rocket-Nginx 將讓 WP Rocket 處理請求並根據上下文提供正確的快取頁面。
Rocket-Nginx 是否相容於 BF Cache(後退/前進快取)?
是的!如果您的網站不顯示敏感資料且非常適合後退/前進緩存,則必須按照問題中的 BF 快取討論來編輯 Rocket-Nginx 配置。
如何從版本 1 或 2 升級到版本 3?
我們建議您儲存先前的配置並重新開始。藉此機會回顧一切,因為很多事情都改變了。根據官方說法,3.x 版本不向後相容於先前的版本。從頭開始的時間不應超過 15 分鐘。
3.x 版本有什麼新功能?
很多事情!
您對這個專案有什麼基準嗎?
不。在所有基準測試中,人們都聲稱可以採取 X、Y 或 Z 來改善結果。在此專案中,基準測試將取決於您有多少外掛程式影響頁面,即使輸出位於快取中(例如,即使檔案位於快取中,WP Rocket 也會執行 PHP)。但我們可以說的是,您將從NGINX → PHP-FPM → WordPress(PHP 和資料庫)→ 靜態檔案到NGINX → 靜態檔案。換句話說,您直接從 NGINX 提供靜態文件,而不是在提供靜態文件之前將請求傳遞給 FPM,然後傳遞給 PHP(至少對於 WP Rocket...)。
如果我的網站使用 SSL 憑證 (https),Rocket-Nginx 會運作嗎?
是的! Rocket-Nginx 將偵測請求是透過 HTTP 還是 HTTPS 發出,並根據請求類型提供正確的檔案。從 1.0 版本開始,這兩個協定都是自動處理的。
根據 MIT 許可證發布。有關詳細信息,請參閱許可證文件。