Nội dung
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Ở bài trước mình có hướng dẫn cách tăng tốc wordpress bằng WP Super Cache plugin. Trong bài hôm nay, mình sẽ nói về varnish cache, một trong những phần mềm cache tốt nhất hiện nay. Bạn sẽ nắm được từng bước cài đặt và cấu hình varnish và tích hợp vào WordPress site. Nào chúng ta hãy bắt đầu nhé!
Trước khi đọc tiếp, yêu cầu bạn đã có cài đặt wordpress trên hosting hoặc sử dụng localhost. MÌnh sẽ sử dụng hệ điều hành Ubuntu LTS 16.04, Varnish Cache 4.1 and WordPress 4.4.
1. Cài đặt Varnish
Nếu bạn chưa cài đặt Varnish, hãy cài đặt varnish trên VPS của bạn hoặc test với máy ảo vagrant nếu bạn muốn.
2. Cài plugin varnish
Sau khi cài đặt varnish, chúng ta sẽ chỉ dẫn cho wordpress cách xóa nội dung content đã cache khi bất cứ lúc nào bạn đăng hay sửa bài trong wordpress. Bạn có thể sử dụng cách plugin sau.
Trong bài này, chúng ta sử dụng Varnish HTTP Purge Plugin. Truy cập vào WordPress dashboard, nhấn vào Plugins > Add New và tìm plugin “Varnish HTTP purge”, rồi nhấn Install Now. Sau đó kích hoạt plugin.
3. Kích hoạt mod_rewrite
Để plugin Varnish HTTP Purge có thể hoạt động, bạn cần kích hoạt mod_rewrite cho web server và cần thiết lập tùy biến permalinks trong wordpress, lưu ý không sử dụng mặc định URL trong WordPress. Trong trang quản trị WordPress, chọn mọi cấu trúc URL, ngoại trừ ‘Plain’.
Ở trường custom, nhập giá trị /%year%/%monthnum%/%post_id%
, và nhấn ‘Save Changes’. Tại console, gõ:
a2enmod rewrite
4. Đổi apache port
Trước khi chúng ta cấu hình varnish cho phép mọi traffix đến từ wordpress site, bạn cần đổi cổng port cho apache web server. Hãy đổi cổng 80 sang 8080.
/etc/apache2/ports.conf
Và các files trong thư mục /etc/apache2/sites-enabled/
.
Điều này sẽ đảm bảo, apache sử dụng port 8080 để chạy wordpress, và varnish nhận traffix sử dụng HTTP(s) với cổng 80 khi người dùng truy cập website.
5. Cấu hình varnish backend
Varnish sử dụng khái niệm backend, định nghĩa nội dung nhận từ nguồn nào nếu nội dung truy cập bởi người dùng chưa được cache. Trong TH này, chúng ta sẽ sử dụng cấu hình apache ở bước 4. Sửa lại /etc/varnish/default.vcl như dưới đây:
backend default { .host = “127.0.0.1”; .port = “80”; }
6. Kích hoạt
Khởi động lại varnish và apache. Sau khi restart, mọi traffix đến vào wordpress sẽ đều được thông qua Varnish, trước khi vào apache server. Mở cửa sổ lệnh và chạy dòng sau:
sudo systemctl restart varnish.service sudo systemctl restart apache2.service
7. Loại bỏ COOKIES
Loại bỏ cookie. Varnish không cache nội dung có kèm cookie hoặc header, responses có chứa Set-Cookie
. WordPress thiết lập nhiều cookies , trong số đó một vài cookie cần được bảo mật an toàn. Sửa lại file /etc/varnish/default.vcl và thêm dòng sau vào hàm vcl_recv
.
#unsetting wordpress cookies sub vcl_rec{ .. set req.http.cookie = regsuball(req.http.cookie, "wp-settings-\d+=[^;]+(; )?", ""); set req.http.cookie = regsuball(req.http.cookie, "wp-settings-time-\d+=[^;]+(; )?", ""); set req.http.cookie = regsuball(req.http.cookie, "wordpress_test_cookie=[^;]+(; )?", ""); if (req.http.cookie == "") { unset req.http.cookie; } }
8. Loại bỏ URLs
Hầu hết các ứng dụng web, có một vài URL không nên cache. Với WordPress, chúng ta sẽ loại bỏ cache ở trang admin & trang đăng nhập. Một lần nữa, sửa lại file /etc/varnish/default.vcl và thêm dòng sau đây trước phần xóa cookie ở bước trên.
# exclude wordpress url if (req.url ~ "wp-admin|wp-login") { return (pass); }
9. Kéo dài thời gian cache
Varnish sử dụng tham số max-age để thiết lập thời gian tối đa nội dung được cache trong varnish, trước khi lấy nội dung mới từ backend. Mặc định giá trị này là 120 s, nếu không chỉ định tham số max-age. Bạn có thể tăng lên tới 1h, bằng cách sửa lại file cấu hình như dưới đây:
# extending caching time sub vcl_backend_response { if (beresp.ttl == 120s) { set beresp.ttl = 1h; } }
10. Xóa cache
Khi nội dung trong wordpress được cập nhật, Varnish HTTP purge được sử lý và gọi đến Varnish để yêu cầu xóa nội dung từ cache mà bạn mới sửa đổi. Và kết quả , những lần truy cập tiếp theo nội dung cũ sẽ được update từ backend bởi varnish.
Để làm điều này, chúng ta sẽ thêm một đoạn code ở đầu hàm vcl_recv
trong file /etc/varnish/default.vcl
Phần đầu tiên, sẽ liệt kê IPs cho phép truy cập.
acl internal { "192.x.x.x"/24; xxx.xxx.xx.xx; } # Allowing which address can access cron.php or install.php, # add the following in acl.
Tiếp đến, bạn sẽ sử lý purge nội dung cache từ varnish, thêm nội dung sau vào.
#handling purge requsets sub vcl_recv{ ... if (req.method == "PURGE") { if (req.http.X-Purge-Method == "regex") { ban("req.url ~ " + req.url + " && req.http.host ~ " + req.http.host); return (synth(200, "Banned.")); } else { return (purge); } } }
11. Bảo mật Purge HTTP
Ở bước trước, bạn đã học cách làm có thể xóa nội dung cache trong varnish thông qua http. Tuy nhiên, bất kỳ ai biết được URL này có thể can thiệp và sửa đổi dữ liệu cache trên website của bạn, bước này bạn sẽ cần bảo mật nó. Bằng cách giới hạn truy cập IP hoặc hostname.
Sau phần backend thêm dòng acl
vào default.vcl. Xem ví dụ mẫu:
acl purge { "localhost"; server ip address or hostname; } ... if (req.method == "PURGE") { if (client.ip !~ purge) { return (synth(405)); }
12. Khởi động varnish
Trước khi mọi thay đổi của bạn được varnish cập nhật, bạn cần nạp lại cấu hình varnish server. Mở dòng lệnh và chạy:
#reload varnish systemctl reload varnish.service
13. Xóa cache
WordPress có plugin Varnish HTTP Purge giúp bạn dễ dàng xóa nội dung varnish cache. Sau khi kích hoạt plugin, truy cập admin và nhấn nút ‘Purge Varnish Cache’ trên toolbar.
Nếu bạn sử dụng wp-cli plugin có hỗ trợ, lệnh purge cache.
wp varnish purge
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype