WordPress Tuning
前言
以前在兼差幫忙管理系所網站時,那時候學校主流 CMS 使用的是 Joomla,當年也從 apache2 移轉使用 NGINX 做了些微的調教,但是也沒有認真做個筆記。剛好公司的官網也要從 windows 移轉到 linux 伺服器上,不過使用的是 WordPress,也稍微 survey 了相關調教,本篇為移轉過程及相關調教筆記。
安裝與移轉
使用伺服器架構為基本的 LNMP,可以參考 DigitalOcean - How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04,額外安裝的 php 套件有 php7.0-curl
、php7.0-zip
。
$ apt install php7.0-curl php7.0-zip
比較麻煩的點在於 windows 換行符號為 ^M
,因此必須把每個檔案的換行符號切換成 linux 的換行符號。
# 替換換行符號
find . -type f -exec dot2unix {} \;
# 確保資料夾及檔案權限
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Nginx 設定
gzip 及 cache
# gzip
gzip on;
gzip_static on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
# Don't compress files smaller than 256 bytes, as size reduction will be negligible.
gzip_min_length 256;
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
# cache
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
網站設定
參考官網 Wordpress for Nginx config
- General WordPress rules:一般 WordPress 及 php 相關設定。
- Global restrictions file:不該開放權限給人存取相關設定。
Tuning
NGINX 網站設定
- 盡可能的 cache 一些靜態檔案。
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)$ {
expires max;
log_not_found off;
access_log off;
}
- HTTP2 設定。
WordPress Plugin
- WP Super Cache: WordPress 仰賴的是 php 動態存取資料庫產生出對應的 HTML 頁面呈現,Super Cache 功能先把一些常用的網頁先產出成 Static HTML 檔案暫存起來,讓使用者存取時可以直接存取。依照官網教學安裝方式即可。
- Fast Velocity Minify:把散落各個 plugin 的 css, js merge 並 minify,同時也有將 WordPress 版本號的檔案也一併整理壓縮達到隱藏版本號的效果。
- WP SMush:壓縮上傳的 image,免費版則是每次幫你壓縮 50 張圖片,每次都得自己重複點擊壓縮。
- All in One SEO:在我接收以前就已經設定好了,但是也幫助了網站 SEO 評分,每個頁面也都可以設定對應 SEO tag 及 Sitemap 自動產出,大幅提高了網站被搜尋到的排名。
安全性
Nginx
location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php|js|swf)$ {
deny all;
}
location ~ /(wp-config|xmlrpc).php$ {
deny all;
}
location ~ /\.ht {
deny all;
}
# 只允許 localhost 可以登入及查看 admin 後台
location ~ /(wp-admin|wp-login\.php)$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
allow 127.0.0.1;
deny all;
}
SSL
參考 Cipherli.st - Strong Ciphers for Apache, nginx and Lighttpd。
WordPress、Joomla 相關套件大量使用了 iFrame 遷入在 plugin 設定,因此以下這個設定可以看有沒有影響操作斟酌加入設定檔。
add_header X-Frame-Options DENY;
測效網站
- GTMetrix:提供 PageSpeed 和 YSlow 個項目評分,可以查看有哪些可能可以改善的圖片壓縮,或是伺服器沒有設定 cache 等驗證。
- Lighthouse: Google Opensource 的自動化工具,但是滿多都以非常「嚴格」的標準來查看網頁存取速度,也提供了 Progressive Web App 的檢驗。