Trang chủ Linux WebserverNGINX [Ubuntu] Cài Varnish trên webserver NGINX và Apache

[Ubuntu] Cài Varnish trên webserver NGINX và Apache

bởi Thạch Phạm
1 bình luận 2,2K views

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay
Bài này thuộc phần 4 của 6 phần trong serie Varnish cho WordPress

Tiếp tục serie Varnish cho WordPress, mình sẽ tiếp tục hướng dẫn thêm cách cài đặt và thiết lập Varnish 3 cho website sử dụng NGINX (LEMP) hoặc Apache (LAMP) làm webserver  trên hệ điều hành Ubuntu, và mình khuyến khích các bạn nên dùng Ubuntu 12.04 trở lên. Do vậy, bạn hãy cài webserver cho Ubuntu trước khi làm nhé:

Tham khảo:

Cài đặt Varnish

Để cài Varnish 3 trên Ubuntu, bạn hãy gõ lệnh sau:

Nạp pack chứa Varnish 3 vào bộ cài vì nhiều bản Ubuntu vẫn dùng Varnish 2

Khuyến mãi Black Friday

[bash]
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
[/bash]

Sau đó cài Varnish

[bash]apt-get install varnish[/bash]

Bạn có thể kiểm tra phiên bản Varnish bằng lệnh varnishd -V và hãy chắc chắn nó là phiên bản 3.

root@varnish:~# varnishd -V
varnishd (varnish-3.0.6 revision 1899836)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2014 Varnish Software AS

Cài xong, hãy mở file /etc/default/varnish lên và tìm mục Altinative 2:


DAEMON_OPTS="-a :6081 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"

Sửa 6081 thành port 80, tức là ta sẽ sử dụng Varnish trên port 80. Hãy chắc chắn rằng những dòng đó đã xóa các dấu comment (#).

Kế tiếp là mở file /etc/varnish/default.vcl và thiết lập port nó cần lấy dữ liệu gốc (nên để là 8080).


backend default {
.host = "127.0.0.1";
.port = "8080";
}

Sau đó, xóa toàn bộ các dòng ở dưới và chèn đoạn đây vào (dành cho WordPress):


acl purge {
"127.0.0.1";
"IP của máy chủ của bạn";
}
sub vcl_recv {

# Allow purging
if(req.request == "PURGE"){
if(!client.ip ~ purge){
error 405 "Purging not allowed.";
}
return(lookup);
}

# Lưu cache các tập tin này cho toàn bộ users
if ( req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$" ) {
unset req.http.cookie;
}

# Không load cache cho những thành viên đăng nhập (dùng cookie wordpress_logged_in)
if ( req.http.cookie ~ "wordpress_logged_in" || req.url ~ "vaultpress=true" ) {
return( pass );
}

# Drop các cookie gửi đến WordPress
if ( ! ( req.url ~ "wp-(login|admin)" ) ) {
unset req.http.cookie;
}

# Handle compression correctly. Different browsers send different
# "Accept-Encoding" headers, even though they mostly all support the same
# compression mechanisms. By consolidating these compression headers into
# a consistent format, we can reduce the size of the cache and get more hits.
# @see: http://varnish.projects.linpro.no/wiki/FAQ/Compression
if ( req.http.Accept-Encoding ) {

if ( req.http.Accept-Encoding ~ "gzip" ) {
# If the browser supports it, we’ll use gzip.
set req.http.Accept-Encoding = "gzip";
}

else if ( req.http.Accept-Encoding ~ "deflate" ) {
# Next, try deflate if it is supported.
set req.http.Accept-Encoding = "deflate";
}

else {
# Unknown algorithm. Remove it and send unencoded.
unset req.http.Accept-Encoding;
}

}

}

sub vcl_fetch {
# Thiết lập cho cache live trong 10 tiếng, mặc định là 2 phút.
set beresp.ttl = 10h;
# Drop any cookies WordPress tries to send back to the client.
if ( ! req.url ~ "wp-(login|admin)" && ! req.http.cookie ~ "wordpress_logged_in" ) {
unset beresp.http.set-cookie;
}

}

sub vcl_miss {
if(req.request == "PURGE"){
purge;
error 200 "Purged";
}
}

sub vcl_hit {
if(req.request == "PURGE"){
purge;
error 200 "Purged";
}
}

sub vcl_deliver {
if(obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT ("+obj.hits+")";
} else {
set resp.http.X-Varnish-Cache = "MISS";
}
}

Lưu lại và khởi động lại Varnish.

[bash]service varnish restart[/bash]

Cấu hình Varnish cho NGINX

Kế tiếp là hãy đổi port của NGINX từ 80 thành 8080. Mở toàn bộ file trong thư mục  /etc/nginx/sites-available tìm:


listen   80;

Đổi thành


listen   8080;

Tốt nhất là hãy xóa file default luôn đi hoặc xóa dấu # ở phần listen vì mặc định nó sẽ listen cổng 80.

Sau đó khởi động lại NGINX và Varnish.

[bash]
service nginx restart
service varnish restart
[/bash]

Gõ lệnh netstat -ntlup kiểm tra xem NGINX đã sử dụng cổng 8080 chưa và varnishd có sử dụng cổng 80 chưa.

Bạn có thể test bằng cách truy cập vào website, nếu mà nó vẫn ra website bình thường là Varnish đã hoạt động rồi. Hoặc bạn có thể xem header của website.

[bash]
root@varnish:~# curl -I https://thachpham.com
HTTP/1.1 200 OK
Server: nginx/1.1.19
Content-Type: text/html; charset=UTF-8
X-Powered-By: PHP/5.3.10-1ubuntu3.15
X-Pingback: https://thachpham.com/xmlrpc.php
Date: Tue, 20 Jan 2015 17:47:55 GMT
X-Varnish: 2137287884 2137287883
Age: 2
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: HIT (1)
[/bash]

Thiết lập Varnish cho Apache

Đối với Apache, port của Apache từ 80 thành 8080. Mở file /etc/apache2/ports.conf tìm:


NameVirtualHost *:80
Listen 80

Đổi thành


NameVirtualHost *:8080
Listen 8080

Vào thư mục sites-available, mở toàn bộ các file có trong đó lên và tìm *:80 và đổi thành *:8080 hết.

Sau đó khởi động lại Apache và Varnish.

[bash]
service apache2 restart
service varnish restart
[/bash]

Cài plugin xóa cache Varnish cho WordPress

Nếu bạn sử dụng WordPress thì sẽ cần Varnish tự xóa cache của trang chủ, post,…khi đăng bài mới. Do vậy, bạn hãy cài plugin Varnish HTTP Purge vào và không cần tùy chỉnh gì thêm vì plugin này không có tùy chọn gì cả.

Plugin này sẽ xóa các cache:

  • Trang chủ.
  • Post/Page được chỉnh sửa.
  • Các tag và category chứa post được chỉnh sửa.

Ngoài ra nó cũng xóa cache khi:

  • Sửa/cập nhật permalink.
  • Đổi theme.
  • Ấn nút “Purege Varnish Cache” ở ngoài Dashboard.
  • Ấn nút “Purge Varnish” trên thanh Admin Bar.

Hãy nhớ rằng cache sẽ không xóa hết cùng lúc mà sẽ xóa từ từ nên ví dụ bạn vừa mới sửa bài thì cache có thể còn lưu bài đó thêm 1, 2 phút nữa.

Nếu bạn đang sử dụng các dịch vụ proxy như CloudFlare, Incapsula thì hãy thêm đoạn này vào file wp-config.php:

define(‘VHP_VARNISH_IP’,’127.0.0.1′);

Lời kết

Tới đây là bạn đã có được phần mềm Varnish 3 trên hệ điều hành Ubuntu và mình nghĩ là nó đã hoạt động rất tốt với các thiết lập trên, đây cũng chính là cách cấu hình Varnish cho WordPress mà mình đang áp dụng cho một số blog có lượng truy cập lớn như Triethocduongpho nên bạn có thể yên tâm sử dụng.

Đánh giá nội dung này
1 bình luận

Có thể bạn quan tâm

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.