Cài đặt, cấu hình VPS sử dụng varnish làm reverse proxy

Varnish là một ứng dụng độc lập nên việc sử dụng Varnish để lưu và truy xuất cache trên website sẽ có những lợi thế như bạn có thể thoải mái tùy chỉnh để nó ghi và truy xuất như mong muốn, mặc dù sẽ hơi nâng cao và khó một chút, nhưng nếu bạn hiểu các quy tắt trong VCL (Varnish Configuration Language) thì sẽ rất linh hoạt trong sử dụng, có thể cấu hình cache cho bất cứ loại website nào. Việc Varnish trực tiếp làm proxy để gửi dữ liệu cache cũng sẽ có tốc độ tốt hơn so với hình thức lưu cache thông thường.
II. Cài đặt sử dụng  Varnish làm reverse proxy cho apache
1. Cài đặt và cấu hình Varnish
Để cài Varnish trước tiên bạn hãy nạp package của họ vào:
 
rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-3.0.el6.rpm
 
Và cài Varnish qua lệnh yum:
 
yum install varnish
 
Tiếp tục dùng lệnh chkconfig varnish on để varnish khởi động cùng vps sau khi reboot.
 
Dùng lệnh vi /etc/sysconfig/varnish để mở file  và tìm kiếm dòng :
 
VARNISH_LISTEN_PORT=6081
 
Đổi 6081 thành 80:
 
VARNISH_LISTEN_PORT=80
 
Dùng lệnh vi /etc/varnish/default.vcl tìm kiếm backend default thành thế này:
 
backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
Tiếp tục xóa toàn bộ đoạn bên dưới và thay thế bằng đoạn dưới đây (lưu ý cấu hình dưới đây chỉ áp dụng cho wp) : 
 
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";
        }
}

2. Cấu hình trên apache


Dùng lệnh vi /etc/httpd/conf/httpd.conf tìm kiếm các giá trị :

Listen 80
.....
NameVirtualHost *:80
 
Sửa thành :

Listen 8080
.....
NameVirtualHost *:8080

Bây giờ hãy khởi động lại Apache và Varnish:

service httpd restart
service varnish restart

Dùng lệnh netstart -nplt để kiểm tra xem Varnish đã dùng cổng 80 và apache dùng cổng 8080.

Tiếp đến dùng lệnh curl -I http://yourdomain.com để kiểm tra http header :

Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.36
X-Pingback: http://yourdomain.com/
Content-Type: text/html; charset=UTF-8
Content-Length: 7351
Accept-Ranges: bytes
Date: Tue, 20 Jan 2015 23:34:19 GMT
X-Varnish: 567877718 567877710
Age: 12
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: HIT (2)

Nếu kết quả hiện như trên là varnish đã cấu hình thành công.

3. Cấu hình phpmyadmin

Để loại bỏ cache cho thư mục chứa phpmyadmin nắm ở thư mục phpmyadmin có thể thêm cấu hình sau:

 if ( ! ( req.url ~ "/phpmyadmin" ) ) {
        unset req.http.cookie;
    }

vào file /etc/sysconfig/varnish sau đó khởi động lại varnish bằng lệnh  service varnish restart.

Chúc bạn thành công!

Powered by WHMCompleteSolution