WordPress 壓縮圖片的外掛

之前這一篇文章提到如何jpegoptim 把WordPress的圖片再壓縮一次,來節省流量,但很可惜的,jpegoptim只能對jpeg圖檔做壓縮,對於時下流行的 PNG 卻一點辦法也沒有。所以這一次介紹一個 WordPress 外掛,WP Smush.it,讓你一次搞定所有的圖片。

先到WordPress後台控制台中安裝新的外掛,WP Smush.it,目前最新版本是1.6.5.4,作者是WPMU DEV。安裝完之後就可以立刻啟用它。之後再到WordPress後台控制台的媒體中的Bulk Smush it 執行,讓你一次性對圖片做壓縮。

不過這個外掛好像是透過 Yahoo Smush API完成的,所以有幾個限制

  1. 圖片檔大小不得大於1MB。
  2. 圖片只能支持http方式上傳,對於全https協議才能拿到圖片的網站不適合。
  3. 圖片可以讓 Yahoo 能夠取得,對於擁有防止盜連機制的網站不適合。
  4. 圖片必須在本機端,而不是放在CDN網站上。

如果都符合的話,就按下 “Run all my images through WP Smush.it right now” 這個按鈕,上面已經有資訊告訴你整個網站有幾張圖片,大約要花多久時間。所以建議妳最好在月黑風高的無人晚上再來一次完成。

如何幫 WordPress 安裝快取加快速度

我們都知道 WordPress 的網頁都是由很多 php 產生的動態網頁,也就是說每當有需求時,伺服器才會動態地執行 php 檔案來讀取 mysql 資料庫而產生網頁,這樣速度比起靜態網頁要慢的許多,尤其一些舊的網頁,內容基本上都不太會更動了,所以我們要快取起來,下次有人需要時,再把快取中的靜態網頁提供給客戶端來節省伺服器的時間和效能。

首先,我們必須把 WordPress 快取的全域變數打開,這個檔案在 /var/www/wordpress/wp-config.php 檔案裡面

# nano /var/www/wordpress/wp-config.php

然後在編輯器內找到 WP_CACHE 這個變數,把它移除標記並且設定為 TRUE

define('WP_CACHE', true );

然後下載 hyper cache 這個 WordPress 外掛,目前版本是 3.1.2,作者是 Stefano Lissa,安裝完之後就可以啟動它了。只需要在 WordPress 控制台的”設定”,然後選擇”Hyper Cache”來設定它。

1

然後設定Cache Folder(快取存放目錄)和啟動Allow Browser caching這兩個選項就可以了,之後每當有人訪問一個網頁時,Hyper Cache就會把它快取成靜態網頁幫你加速了!

後記:實測幾天結果,CPU所耗效能的確有改善,但是快取資料有時候會出現問題,修復不了,所以還是把這個外掛停了。

如何將 WordPress 圖片加上快取圖片

一般  WordPress 的圖片不太會更動,所以當使用者瀏覽網頁時可以把圖片快取下來,下次觀看時就可以不必重新下載圖片,直接使用電腦上快取的圖片,以節省頻寬以及效能。我們就來談談如何實現這個功能。

首先,在 /etc/apache2/mods-enabled/ 目錄下必須要有expires.load 這個模組,在我的 CubieTruck 底下是沒有的,所以必須把 /etc/apache2/mods-available的expireds.load 連結到 /etc/apache2/mods-enabled 裡面。

# ln -s /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled/

這樣就可以把模組給鏈結進來,不過要重啟服務一下,讓 apache2 把 expires.load 正式加進來。

# service apache2 restart

然後編輯 WordPress 根目錄底下的 .htaccess 檔案

# nano /var/www/wordpress/.htaccess

在檔案底下增加

#Expire Header
<FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresDefault "access plus 2 hours"
</FilesMatch>

把所有圖檔格式的快取時間設定為兩個小時,也可以對不同檔案分別設定。

# Expire images header
ExpiresActive On
ExpiresDefault A0
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/ico A2592000
ExpiresByType text/css A2592000
ExpiresByType text/javascript A2592000

2592000 是指快取一個月 24 * 60 * 60 *30 = 2592000。 .htaccess 存檔後就可以直接套用了,不需要重啟 apache2 服務。

如何確認 WordPress 是採用 InnoDB 還是MyISAM資料庫方式

WordPress是採用 mysql 當做資料庫後端程式,而 mysql 有分為 InnodDB和MyISAM兩種資料庫方式,這兩種各有優劣。我們這一篇不討論到底誰的效能比較好,因為我覺得在討論之前,我們總得先知道我們 WordPress 目前是採用哪種方式,然後再來討論如何優化,否則一切徒勞無功。

首先我們先進入 mysql 後台。

# mysql -u root -p

輸入 root 密碼後就可以進入mysql 的後台,然後我們輸入。

mysql> select TABLE_NAME, ENGINE from information_schema.TABLES WHERE TABLE_SCHEMA='wordpress';

此時就會輸出,
1

 

或是

2

這時候,mysql ENGINE就會告訴你 WordPress的所有表格到底是採用InnoDB 或是 MyISAM哪個方式了,我的 CubieTruck是InnoDB的,得找些資料來優化優化了。

如何把 WordPress 的圖片再壓縮一次

之前在寫 Android 程式時,就領教過把圖片無失真再壓縮一次可以節省很多空間,真正原理我不太清楚,但無非是把一些注釋,不重要的資訊給刪除。反正 WordPress 的圖片是用來參考用的,所以有沒有這些資訊無所謂,所以我決定再把這些 jpg 檔案在進行一次壓縮。

原本我考慮是用 trimage 這個套件的,因為它可以套用不只 jpg 還可以對 png 做壓縮,但是當我安裝時才發現這個套件安裝要 100 MB以上,所以我打了退堂鼓,退而求其次改安裝 jpegoptim 這個套件,雖然安裝所需空間小很多,但是只能對 jpg 有用。

首先,我們透過 apt-get 來安裝 jpegoptim 套件。

# apt-get install jpegoptim

這個套件大約只需要600-700KB而已,然後切換到 wordpress 上傳影像區,結合 find 指令,把所有 jpg 檔案找出來,然後透過 jpegoptim 來二次壓縮。

# cd /var/www/wordpress/wp-content/upload
# find . -type f -name \*.jpg -exec jpegoptim {} \;
# find . -type f -name \*.jpg -exec chmod 644 {} \;
# chown -R www-data:www-data /var/www/wordpress/wp-content/upload

最後兩行是因為重新建立 jpg 時的權限可能被更改成其他人,進行再次修改回來成正確權限。

如何把 WordPress 的文字檔案以壓縮方式傳送

WordPress是一個著名架部落客的套件,基於 Apache/PHP5/MySQL 服務底下,效率算起來還不錯。但是我們可以透過修改 .htaccess 檔案把一些文字的檔案來進行壓縮傳送,減少頻寬。等到客戶接收端收到之後再進行解壓縮即可。

這一次我們要修改 /var/www/wordpress 目錄底下的 .htaccess,藉此把這一整個目錄的文字類檔案來壓縮

# nano /var/www/wordpress/.htaccess

在這個檔案後面加上這三行

<FilesMatch ".(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>

存檔即可生效,不需要重啟服務。但是效果是有限的,因為一般文章的長度不會太長,壓縮起來效率不好,反而浪費時間在壓縮和解壓縮裡面,所以自己要權衡一下。

CubieTruck上MySQL的效能調校

雖然CubieTruck的CPU比起Intel系列的CPU實在不怎麼樣,但是優點是記憶體有2GB大,可以用來揮霍一下。因為這台 CubieTruck 普通時也沒有跑其他什麼服務,所以希望能把多餘的記憶體用在 mysql 上,希望 WordPress 能載入快一點,雖說我已經把 mysql databases 都移到硬碟上了,畢竟記憶體還是比硬碟快。

這一次我們會動到 /etc/mysql/my.cnf 檔案裡面兩個參數,innodb_buffer_pool_size innodb_log_buffer_size,但在修改之前我們想先觀察一下預設值到底是多少。先在終端機上登入 mysql 後台

# mysql -u root -p

然後輸入 root 的密碼,在 mysql 後台輸入

mysql >SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
mysql >SHOW VARIABLES LIKE 'innodb_log_buffer_size';

這樣 mysql 就可以秀出預設值分別是128MB和8MB,我決定把他們加大一些,所以必須修改/etc/mysql/my.cnf 檔案,編輯這個檔案然後找到 [mysqld] 這個段落,之後寫入

[mysqld]
...
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 32M

存檔之後必須重啟 mysql 服務方能生效。

# service mysql restart

再進入 mysql 後台觀察是否數值已經被改變了呢?如果是的話就觀察一下效能是否有增加囉!

如何防止WordPress暴力式登入攻擊

WordPress很容易遭受暴力式攻擊來試探密碼,其實也不只WordPress,所有的服務都怕,倒不是因為密碼強度不夠,而是怕這種無由來的暴力式攻擊會拖垮系統效能。像是 SSH 我取消了密碼登入,採用金鑰,而且一分鐘內登入不得超過三次,很快地暴力式攻擊就大幅減少了。

對於這種暴力式攻擊,如果第一時間發現,管理者可以採用 iptables 立刻把它給禁止連線,語法:

iptables -I INPUT -s 11.22.33.44 -j DROP
iptables -I OUTPUT -d 11.22.33.44 -j DROP

這鐵定立竿見影!但是如果你剛好不在身邊呢?我想到一個方法,就是根據上一篇文章提到的 如何幫Apache某個目錄加上帳號密碼保護,這次我們幫 wp-login.php 檔案加上密碼,這樣登入動作就會有兩次不同密碼防護,我相信暴力連線也可以大幅減少。

先到 wordpress 的目錄底下編輯 .htaccess 檔案,

# nano /var/www/wordpress/.htaccess

然後在這個檔案後面添上保護片段如下,

<Files wp-login.php>
AuthUserFile /etc/apache2/apache2.passwd
AuthName "Private access"
AuthType Basic
require user linaro
</Files>

這麼一來,想要登入執行 wp-login.php 時又得多一道密碼,我相信很多現成破解的程式就不管用了,而且兩道不同密碼,應該很夠用吧!

還有一種攻擊是專門試探 admin 密碼,即便 WordPress 已經取消管理者帳號非得 admin 了,但還是有很多機器人會來試探 admin 密碼,我們可以在你的佈景主題下的 functions.php 底下加入下面程式以避免:

add_filter( 'wp_authenticate', 'wpjam_no_admin_user' );
function wpjam_no_admin_user($user){
  if($user == 'admin'){
  exit;
  }
}

add_filter('sanitize_user', 'wpjam_sanitize_user_no_admin',10,3);
function wpjam_sanitize_user_no_admin($username, $raw_username, $strict){
  if($raw_username == 'admin' || $username == 'admin'){
  exit;
  }
  return $username;
}

這樣如果想要用 admin 登入 WordPress,登入畫面會變成空白頁。

如何限制只有某些IP可以訪問 WordPress 的重要目錄

WordPress是一個著名的站網站的套件,裡面 wp-admin 目錄尤為重要,裡面有很至關重大的 php 功能執行檔案在裡面,所以我們希望只有某些 IP 位址的超級使用者能使用,那應該怎麼做呢?

首先用 ssh 終端機連線到 CubieTruck 主機裡面,切換到 WordPress 的目錄,然後編輯底下 .htaccess檔案。(目錄位址可能因人而異)

# cd /var/www/wordpress/wp-admin
# nano /var/www/wordpress/wp-admin/.htaccess

基本上,應該是沒有這個檔案,所以是一個空白的,請把下列的資訊貼上來,更改或增加一下你允許的IP位址,這樣其他地方IP位址的人就根本無法執行目錄底下的 php任何檔案了。

<LIMIT GET POST HEAD>
order deny,allow
deny from all
# whitelist IP address
allow from 127.0.0.1
allow from 192.168.1.
allow from aa.bb.cc.dd
</LIMIT>

<FilesMatch "\.(jpe?g|png|gif|css|js)$">
Order allow,deny
Allow from all
Satisfy any
</FilesMatch>

<FilesMatch "^(admin-ajax|async-upload)\.php$">
Order allow,deny
Allow from all
Satisfy any
</FilesMatch>

.htaccess 存檔後就立刻生效了,不需要重啟 Apache2 服務。

如何在CubieTruck架設WordPress部落客

買這台CubieTruck其中一個重要的功能,就是架設一個屬於自己的部落客,寫寫一些自己喜歡的東西。如果需要的時候,例如找工作時,這個部落客也可以派的上用場(沒有什麼比實際存在的東西更有說服力了)。所以這一篇我們說說如何在CubieTruck架設一個 WordPress 部落客網站。

在架設之前,你必須先確定你的CubieTruck已經有了 Apache2/PHP5/MySQL這三個套件,並且可以正常運作,至少你的網站是活的,訪問時有一個網頁可以顯示,那怕只是一個空白網頁。如果不會架設上述伺服器,請參考這篇文章

架設WordPress第一個步驟就是在 CubieTruck 中建立屬於WordPress的MySQL資料庫,這裡你必須先設定好之後的使用者帳號(假定是 userName)與密碼(PassWord),並且牢牢記住,之後設定會用到,登入也會用到。所以建議密碼不要設定太過簡單,最好英文數字混合,十個字母以上為佳。

一開始我們先用 root 帳號登入 MySQL 管理者介面。

# mysql -u root -p

然後輸入你的 root 密碼之後就可以進入 MySQL的管理後台,進行新增資料庫,新增使用者,和賦予權限給這位使用者。

mysql> CREATE DATABASE wordpress;
mysql> CREATE USER 'userName'@'localhost' IDENTIFIED BY 'PassWord';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'userName'@'localhost' IDENTIFIED BY 'PassWord';
mysql> FLUSH PRIVILEGES;
mysql> quit;
# cd ~

這樣你就建立好 WordPress 資料庫,而你也可以正常回到終端機介面了,下一個步驟就是下載最新 WordPress 到自己 CubieTruck 主機(目前版本是 WordPress 4.0)。

# cd ~
# wget http://wordpress.org/latest.tar.gz

然後解壓縮這個檔案到自己目錄。

# tar xzvf latest.tar.gz

因為 WordPress 有一些外掛需要一些額外的套件,所以建議您下載安裝下列套件

# apt-get update
# apt-get install php5-gd libssh2-php

接下來我們就要開始設定 WordPress 基本設定了,把預設wp-config-sample.php樣本檔案拷貝成 wp-config.php並且編輯它。

# cd ~/wordpress
# cp wp-config-sample.php wp-config.php
# nano wp-config.php

然後把下面紅字的地方,依照您剛剛所設定的資料庫名稱,帳號以及密碼修改。

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'userName');

/** MySQL database password */
define('DB_PASSWORD', 'PassWord');

修改完之後存檔,WordPress基本的設定已經搞定了,然後在把這個 ~/wordpress 目錄整個拷貝到網頁入口目錄 /var/www 底下,並且注意修改使用者權限。

# rsync -avP ~/wordpress/ /var/www/
# cd /var/www/
# chown -R www-data:www-data /var/ww/wordpress

然後替上傳圖片多媒體檔案建立目錄,並且注意寫入權限。

# mkdir /var/www/html/wp-content/uploads
# chown www-data:www-data /var/www/html/wp-content/uploads

到這裡大約已經大功告成了,你可以修改一些細節地方,例如把網頁入口目錄重導到 WordPress裡面,這必須修改 /var/www/.htaccess

# nano /var/www/.htaccess

然後輸入

RedirectMatch ^/$ /wordpress/

如果沒有意外,一個屬於你自己的WordPress雛形就已經好了,就用你的瀏覽器開始訪問你的 WordPress 吧! http://www.example.org/wordpress!