Apache + Ubuntu + Varnish 無痛升級

Varnish 是一個「反向」的代理 (reverse proxy)
用法是和你的 Apache 一起,所有的流量都先經過 Varnish 的緩存
緩存落空後才由 Varnish 向 Apache 拿資料
因為 Apache 的結構是沒有針對檔案類別的
例如 Apache 送出一張圖片一樣會將 mod_php 載入到 RAM 內
同例可用於 CSS, JS 等靜態的檔案
做成大量的 RAM 浪費
而Varnish 的緩存可大大幫助這類靜態檔案佔用的資源
從而提升整體的效能

這次我的目標是用最少的下線時間安裝和設置 Varnish
大家記得一定要先備份有關設定的檔案

安裝 Varnish

curl http://repo.varnish-cache.org/debian/GPG-key.txt | sudo apt-key add -
echo "deb http://repo.varnish-cache.org/ubuntu/ lucid varnish-3.0" | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install varnish

Varnish 預設會從 localhost 的 port 8080 連接 Apache
所以我們便設定一下 Apache 打開 8080:

sudo vim /etc/apache2/ports.conf

NameVirtualHost *:80
NameVirtualHost *:8080
Listen 80
Listen 8080

為了最少的下線時間,Apache 會暫時打開 80 和 8080 兩個 port
80 為一般的使用者
8080 為了測試和 Varnish 的連接
VirtualHost 的設定

sudo vim /etc/apache2/sites-avaiable/default

<VirtualHost *:80 *:8080>

重啟 Apache

sudo service apache2 restart

可以使用 http://localhost:8080/ 測試一下 Apache 的 port 8080

Varnish 預設會使用 256M RAM 我修改一下:

sudo vim /etc/default/varnish

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,64m"

sudo /etc/init.d/varnish restart

看到 Varnish 是預設使用 port 6081 的
可以使用 http://localhost:6081/ 測試一下
使用 chrome 的 network inspector 可以看到 “Response Header" 有一段 "Via 1.1 varnish" 就表示成功了

成功之後便可以真正使用 Varnish 服務 port 80 了
修改 Apache:

sudo vim /etc/apache2/ports.conf

#NameVirtualHost *:80
NameVirtualHost *:8080
#Listen 80
Listen 8080

修改 Varnish:

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,64m"

一次過重啟 Apache, Varnish

sudo service apache2 restart;sudo /etc/init.d/varnish restart
Google