Thứ hai, 17/11/2014 | 00:00 GMT+7

Cách tăng tốc trang web Drupal 7 của bạn với Varnish 4 trên Ubuntu 14.04 và Debian 7

Drupal là một trong những hệ thống quản lý nội dung nguồn mở miễn phí phổ biến nhất.

Lý lịch

Vì nó sử dụng database cơ bản để lưu trữ và truy xuất dữ liệu như trang nội dung, mục tin tức, comment và bài đăng trên blog, Drupal cần một lượng sức mạnh xử lý đáng kể để phục vụ một lượt xem trang. Mỗi lần hiển thị trang liên quan đến việc chạy trình thông dịch PHP, xử lý tất cả các phần tử Drupal, truy cập database để lấy thông tin, chuẩn bị bố cục trực quan và cung cấp nội dung sẵn sàng cho user .

Quá trình chuyên sâu này gây khó khăn cho việc đối phó với số lượng người xem trang web đồng thời ngày càng tăng. Vì mỗi khách truy cập cần một lượng sức mạnh xử lý không đáng kể để được phục vụ, tài nguyên server của bạn có thể nhanh chóng trở thành nút cổ chai.

Có nhiều cách để thích ứng với sự tăng trưởng và đối phó với các vấn đề về hiệu suất, hầu hết trong số đó có thể được coi là một phương pháp mở rộng quy mô . Mở rộng về mặt phần mềm được coi là khả năng của hệ thống để đáp ứng việc tăng tải như tăng số lượng khách truy cập đồng thời.

Varnish giúp mở rộng quy mô ở cấp độ phần mềm, bằng cách thêm phần mềm bổ sung có thể giúp giải quyết các node thắt cổ chai.

Bài viết này đã được thử nghiệm trên Ubuntu 14.04 nhưng sẽ hoạt động với các thay đổi đường dẫn nhỏ trên Debian 7 . Nó cũng có thể hoạt động trên các bản phân phối khác với những thay đổi nhỏ.

Varnish Cache

Varnish là một bộ nhớ cache, nghĩa là role của nó là lưu trữ và ghi nhớ những gì một ứng dụng web phục vụ cho user trong lần đầu tiên nội dung được truy cập. Sau đó, nó có thể phân phát lại nội dung tương tự cho các yêu cầu tiếp theo mà không cần hỏi lại ứng dụng web.

Nó được dùng để phân phát nội dung tĩnh, chẳng hạn như hình ảnh, tập lệnh hoặc bảng định kiểu, bởi vì Varnish rất nhanh và đối phó với lưu lượng truy cập tốt hơn nhiều so với Apache . Nó cũng được dùng để lưu trữ nội dung gần như tĩnh ; nghĩa là nội dung được ứng dụng tạo động (sử dụng database và mất nhiều thời gian để chuẩn bị), nhưng nội dung đó không thay đổi trong một khoảng thời gian, làm cho nội dung phù hợp với bộ nhớ đệm.

Ví dụ, khi một bài báo trên trang web được xuất bản, nó hiếm khi được cập nhật. Sau đó, hoàn toàn không cần sử dụng tất cả các bit xử lý và các mảnh của Drupal để tính toán và hiển thị cùng một bài báo mỗi khi nó được yêu cầu. Sẽ hoàn toàn ổn nếu Varnish nhớ phục vụ lại cùng một trang mà không cần liên hệ với Drupal. Điều này giúp Varnish dễ dàng phân phối cùng một nội dung cho 10, 100 hoặc thậm chí 1000 người cùng một lúc - vì việc phân phát một trang được lưu trong bộ nhớ cache yêu cầu rất ít sức mạnh xử lý.

Trong hầu hết các trường hợp, việc sử dụng Varnish làm cho hầu hết mọi trang web nhanh hơn một cách khó tin. Nó cũng giúp bạn dễ dàng đối phó với sự quan tâm tăng đột biến (ví dụ: khi một bài báo rất phổ biến được xuất bản). Tất cả điều này giúp khách truy cập vui vẻ hơn, những người được phân phối nội dung của họ nhanh hơn và tin cậy hơn.

Yêu cầu

Bài báo giả định bạn có một trang web dựa trên Drupal đang hoạt động trên LAMP đã được cài đặt và chạy. Đây là các yêu cầu:

  • Một server Ubuntu 14.04 hoặc Debian 7 (được thử nghiệm trên Ubuntu 14.04)
  • Một user sudo
  • ĐÈN
  • Drupal

Bước 1 - Cấu hình lại Apache

Theo mặc định, Apache lắng nghe trên cổng 80.Điều này cho phép Apache xử lý các yêu cầu web như yêu cầu URL của trình duyệt cho http://example.com . Để sử dụng Varnish , nó phải có khả năng xử lý các yêu cầu đó. Đầu tiên ta phải yêu cầu Apache không xử lý các yêu cầu trên cổng 80 nữa.

Thay đổi Port Apache Listens trên

Cổng mà Apache lắng nghe theo mặc định được đặt trong một file có tên là port.conf , file này trên cả DebianUbuntu đều nằm trong /etc/apache2 .

Chỉnh sửa file :

sudo nano /etc/apache2/ports.conf 

Thao tác này sẽ chạy editor nano hiển thị nội dung mặc định của file đó, nội dung này sẽ tương tự như sau. Cập nhật dòng NameVirtualHostListen để sử dụng cổng 81 :

# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default # This is also true if you have upgraded from before 2.2.9-3 (i.e. from # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and # README.Debian.gz  NameVirtualHost *:81 Listen 81  <IfModule mod_ssl.c>     # If you add NameVirtualHost *:443 here, you will also have to change     # the VirtualHost statement in /etc/apache2/sites-available/default-ssl     # to <VirtualHost *:443>     # Server Name Indication for SSL named virtual hosts is currently not     # supported by MSIE on Windows XP.     Listen 443 </IfModule> 

Hãy lưu file bằng cách nhấn CTRL + x , rồi đến y , rồi Enter .

Thay đổi cổng cho server ảo

Theo mặc định, bản cài đặt Apache mới có một server ảo được chỉ định trong file cấu hình nằm trong /etc/apache2/sites-enabled/000-default . Nếu bạn có nhiều hơn một server ảo được cấu hình , bạn sẽ phải sửa đổi tất cả chúng.

Để sửa đổi cấu hình của server ảo Apache mặc định, hãy nhập:

sudo nano /etc/apache2/sites-enabled/000-default.conf 

Nội dung file bắt đầu bằng các dòng như sau:

<VirtualHost *:80>         ServerAdmin webmaster@localhost 

Giống như trước đây, ta phải thay đổi số từ 80 thành 81 :

<VirtualHost *:81>         ServerAdmin webmaster@localhost 

Lưu file bằng CTRL-x, sau đó là yEnter .

Reload cấu hình Apache

Sau những thay đổi đó, cấu hình Apache cần được reload :

sudo service apache2 reload 

Bây giờ Apache sẽ chấp nhận các yêu cầu đến trên cổng 81 mới chứ không phải trên 80 như trước.

Ta có thể xác nhận bằng cách mở trang web của bạn trong trình duyệt - trang web sẽ không mở được nếu không chỉ định cổng (như http://example.com ) nhưng hiển thị chính xác sau khi thêm cổng mới vào địa chỉ (như http: // example. com: 81 ).

Hiện ta đã sẵn sàng cài đặt và cấu hình Varnish để giúp ta làm cho trang web nhanh hơn.

Bước 2 - Cài đặt Varnish

Cả Debian và Ubuntu đều có các gói hệ thống với Varnish , nhưng ta khuyên bạn nên sử dụng các gói dựng sẵn do các tác giả của Varnish thực hiện. Nó sẽ đảm bảo Varnish được cập nhật, điều này sẽ không đúng với các gói hệ thống.

Trước tiên, hãy đảm bảo gói apt-transport-https đã được cài đặt, cho phép hệ thống cài đặt các gói qua kết nối an toàn:

sudo apt-get install apt-transport-https 

Điều này sẽ cài đặt gói cần thiết hoặc cho ta biết nó đã được cài đặt.

Khóa công khai của server gói Varnish cần được cài đặt để xác minh tính xác thực của các gói đã cài đặt. Đầu tiên, chuyển sang root :

sudo su 

Thêm khóa:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | apt-key add - 

Đối với Debian :

echo "deb https://repo.varnish-cache.org/debian/ wheezy varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list 

Đối với Ubuntu :

echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list 

Bạn có thể chuyển trở lại user sudo của bạn ngay bây giờ.

Cập nhật hệ thống của bạn:

sudo apt-get update 

Cài đặt Varnish:

sudo apt-get install varnish 

Điều này cài đặt và chạy Varnish!

Bước 3 - Làm Varnish Nghe trên Cổng 80

Theo mặc định, Varnish lắng nghe trên cổng 6081 . Thay vào đó, ta sẽ làm cho Varnish lắng nghe trên cổng 80 , tiếp nhận tất cả các yêu cầu đến từ user web của ta , giống như Apache đã làm trước đây.

Hãy mở file cấu hình Varnish bằng:

sudo nano /etc/default/varnish 

Tìm phần không có chú thích được hiển thị bên dưới:

. . .  ## Alternative 2, Configuration with VCL # # Listen on port 6081, administration on localhost:6082, and forward to # one content server selected by the vcl file, based on the request. # Use a 256MB memory based cache. # DAEMON_OPTS="-a :6081 \              -T localhost:6082 \              -f /etc/varnish/default.vcl \              -S /etc/varnish/secret \              -s malloc,256m"  . . . 

Cập nhật dòng DAEMON_OPTS = “- a: để sử dụng cổng 80 (hãy nhớ giữ cả \ ):

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

Lưu file bằng CTRL-xy, sau đó nhấn Enter .

Khởi động lại Varnish để các thay đổi có hiệu lực:

sudo service varnish restart 

Ta sẽ thấy các thông báo như sau không có lỗi:

[ ok ] Stopping HTTP accelerator: varnishd. [ ok ] Starting HTTP accelerator: varnishd. 

Bây giờ hãy kiểm tra trang web trong trình duyệt. Thay vì trang web Drupal của bạn đã có trước đây, bạn sẽ thấy một trang màu trắng với thông báo lỗi cho biết:

Error 503 Backend fetch failed  Backend fetch failed  Guru Meditation: XID: 131081  Varnish cache server 

Điều đó nghĩa là Varnish đã được cấu hình thích hợp để chấp nhận các kết nối đến, nhưng vẫn chưa khả dụng để phục vụ trang web Drupal của ta . Ta sẽ áp dụng các thay đổi đối với cấu hình để đưa trang web Drupal cũ trở lại trực tuyến trong các bước sau.

Cách hoạt động của Varnish

Một tài nguyên tuyệt vời để hiểu rõ về VarnishSách Varnish chính thức, nhưng ta sẽ trình bày một vài thông tin cơ bản về cách hoạt động của Varnish ở đây.

Bạn cũng có thể chuyển sang bước tiếp theo nếu muốn hoàn tất cài đặt ngay bây giờ và tìm hiểu thêm sau. Tuy nhiên, nếu bạn tìm hiểu cách hoạt động của Varnish, bạn sẽ hiểu rõ hơn về các bước tiếp theo.

Ngôn ngữ VCL

Cấu hình của Varnish được viết bằng ngôn ngữ gọi là VCL (Varnish Configuration Language). Đó là một ngôn ngữ lập trình đơn giản được chính Varnish biên dịch sang mã C root .

Cấu hình bao gồm các phương thức được thực thi trong các thời điểm khác nhau của việc xử lý các yêu cầu web đến, cùng với phần còn lại của nội dung cấu hình.

Một số hướng dẫn được Varnish thực thi khi nó nhận được yêu cầu từ trình duyệt, nhưng trước khi yêu cầu được xử lý, nó sẽ cho biết liệu chuyển tiếp yêu cầu đó đến ứng dụng thực tế hay phân phát nội dung được lưu trong bộ nhớ cache. Trong các hướng dẫn này, có thể thao tác với yêu cầu đến, thay đổi nội dung của nó hoặc đưa ra quyết định dựa trên yêu cầu (URL, tên file , tiêu đề hoặc cookie).

Các hướng dẫn khác được thực hiện khi Varnish quyết định lấy nội dung từ ứng dụng thực tế (trong trường hợp của ta là trang web Drupal). Các hướng dẫn đó được dùng để thao tác các nội dung nhận được từ ứng dụng.

Vẫn còn các hướng dẫn khác được thực thi khi Varnish phân phát nội dung đã lưu trong bộ nhớ cache mà không lấy nội dung mới từ ứng dụng.

Sử dụng VCL , có thể xây dựng một logic phức tạp đưa ra các quyết định bộ nhớ đệm khác nhau dựa trên nhiều yếu tố. Cũng có thể xây dựng một bộ hướng dẫn rất đơn giản.

Varnish đi kèm với một cài đặt mặc định hợp lý cho tất cả các phương thức của nó có thể được thay đổi nếu cần. Điều đó nghĩa là có thể chỉ định trong cấu hình một số phương thức và thậm chí sau đó, chỉ một số hướng dẫn, vẫn dựa vào các giá trị mặc định cho phần còn lại. Điều đó giúp bạn dễ dàng sử dụng các kỹ năng Varnish cơ bản, đồng thời có thể tạo các cấu hình rất phức tạp khi bạn thêm các hướng dẫn tùy chỉnh.

Cái gì được lưu vào bộ nhớ đệm và cái gì không?

Có lẽ điều khó nhất khi cấu hình Varnish hoặc bất kỳ cơ chế bộ nhớ đệm nào khác là quyết định khi nàocái gì nên lưu vào bộ nhớ cache. Hầu hết các vấn đề đến từ các quyết định không đúng - do bộ nhớ đệm quá nhiều hoặc không đủ.

Với cài đặt Drupal điển hình, điều này có thể dẫn đến hai tình huống sự cố khác nhau.

Đầu tiên là khi không có đủ trang được lưu vào bộ nhớ cache, điều này khiến Varnish gần như không cần thiết. Nó hoàn toàn không tăng tốc mọi thứ, vì hầu hết các trang đều được tải trực tiếp từ ứng dụng Drupal mỗi lần. Điều này không giúp ích cho các vấn đề về hiệu suất, nhưng nó cũng không làm hỏng bất cứ điều gì.

Điều thứ hai là khi quá nhiều trang được lưu vào bộ nhớ đệm. Trong trường hợp này, có thể không đăng nhập được vào bảng quản trị.Khách truy cập có thể nhận được nội dung cũ, không hợp lệ hoặc thậm chí là nội dung hỗn hợp khi nội dung khác nhau được phục vụ cho user ẩn danh và đã đăng nhập. Trong trường hợp này, có thể phá vỡ những thứ đã hoạt động tốt mà không cần Vecni.

Ta hãy xem xét một số yếu tố phổ biến để giúp ta quyết định liệu Varnish sẽ hay không lưu nội dung vào bộ nhớ cache.

Varnish lưu trữ mọi thứ

Trong một kịch bản mặc định, tiền đề cơ bản là Varnish lưu trữ mọi thứ . Bộ nhớ đệm trong Varnish là độc quyền , không bao gồm , nghĩa là mọi thứ sẽ được lưu vào bộ nhớ đệm trừ khi bạn đưa ra luật khác.

Yêu cầu phương thức

Phương thức yêu cầu là định nghĩa cơ bản của một yêu cầu. Varnish theo mặc định chỉ lưu vào bộ nhớ đệm các yêu cầu GETHEAD , không bao giờ lưu vào cache khác như POST , PUTDELETE . Điều này đảm bảo các yêu cầu nhằm thực hiện một số thay đổi đối với dữ liệu sẽ được chuyển đến ứng dụng một cách nguyên vẹn mà không bị lưu vào bộ nhớ đệm.

Ủy quyền

Theo mặc định, các yêu cầu đến các trang được bảo vệ bằng password hoàn toàn không được lưu vào bộ nhớ đệm. Điều này chỉ đúng đối với các trang được bảo vệ bằng Ủy quyền cơ bản HTTP . Varnish không biết về các cơ chế dành riêng cho ứng dụng, chẳng hạn như các trang đăng nhập Drupal. Ta sẽ phải thêm các luật của riêng mình đảm bảo các trang đăng nhập không được lưu vào bộ nhớ đệm.

Tiêu đề bộ nhớ đệm

Đôi khi các ứng dụng web trả về thông tin bộ nhớ đệm của riêng chúng trong tiêu đề. Varnish xem xét các tiêu đề đó, vì vậy khi một ứng dụng web như Drupal yêu cầu Varnish không bao giờ lưu vào bộ nhớ cache phản hồi của nó, đó chính xác là những gì sẽ xảy ra trừ khi ta lập trình một hành vi khác trong file VCL . Vì Drupal gửi thông tin bộ nhớ đệm của riêng mình, điều này sẽ trở nên quan trọng hơn nữa.

Bánh quy

Cookie có lẽ là phần quan trọng nhất và khó khăn nhất trong việc đưa ra các quyết định về bộ nhớ đệm với các ứng dụng web.

Theo mặc định, nếu có cookie yêu cầu hoặc phản hồi được đặt, trang sẽ không được lưu vào bộ nhớ đệm. Đó là một quyết định hợp lý, vì ví dụ: user đã đăng nhập được xác định bằng cookie phiên. Nếu các trang có cookie được lưu vào bộ nhớ cache, tất cả user đã đăng nhập sẽ nhận được cùng một nội dung và ứng dụng sẽ không thể phân biệt giữa những user . Tuy nhiên, nó cũng là một trong những nguồn root lớn nhất của vấn đề, vì việc sử dụng cookie phổ biến. Các cookie thường vô hại có trong các yêu cầu, chẳng hạn như mã thông báo Google Analytics , không được ứng dụng sử dụng, nhưng cũng sẽ làm cho nội dung không thể lưu vào bộ nhớ cache. Nếu không có quyết định cẩn thận về việc cookie nào nên cấm lưu vào bộ nhớ đệm và cái nào nên bị bỏ qua, với các ứng dụng web ngày nay, ta sẽ hầu như không có bộ nhớ đệm nào cả, vì có rất nhiều cookie trôi nổi xung quanh.

Hầu hết các phân đoạn của cấu hình dành riêng cho Drupal dành cho Varnish sẽ xử lý cookie thích hợp để loại bỏ các cookie không cần thiết và cho phép lưu vào bộ nhớ đệm, nhưng vẫn giữ lại những phần cần thiết để duy trì chức năng trang quản trị.

Bước 4 - Cấu hình Varnish cho Drupal

Có hiểu biết cơ bản về cách hoạt động của bộ nhớ đệm với Varnish, ta có thể tiến hành cấu hình Varnish để hoạt động với trang Drupal của ta .

Hãy mở file cấu hình Varnish VCL:

sudo nano /etc/varnish/default.vcl 

Nội dung mặc định hiển thị tất cả các phương thức Varnish trống, nghĩa là các giá trị mặc định đang được sử dụng.

Ta có thể thêm hướng dẫn cấu hình của riêng mình để đạt được policy bộ nhớ đệm cần thiết.

Khối đầu tiên hướng dẫn Varnish cách liên hệ với web server backend , trong trường hợp của ta là Apache có cài đặt Drupal . Ta sẽ thay đổi mã để phản ánh cổng 81 mà ta đã sử dụng để cấu hình Apache .

. . .  # Default backend definition. Set this to point to your content server. backend default {     .host = "127.0.0.1";     .port = "81"; }  . . . 

Bây giờ tìm phương thức giữ chỗ trống vcl_recv :

. . .  sub vcl_recv {     # Happens before we check if we have this in cache already.     #     # Typically you clean up the request here, removing cookies you don't need,     # rewriting the request, etc. }  . . . 

Mã trong phương pháp này được thực thi trước khi Varnish liên hệ với trang Drupal của ta . Đó là nơi mà ta có thể loại bỏ một số cookie đến từ trình duyệt, buộc lưu vào bộ nhớ đệm (hoặc không) đối với một số địa chỉ nhất định và đưa ra quyết định bộ nhớ đệm đầu tiên. Ta sẽ thêm một số luật để thực hiện những điều sau:

  1. Cho phép Varnish cung cấp nội dung bộ nhớ cache cũ (cũ) trong trường hợp Drupal bị lỗi. Nó sẽ làm cho trang web khả dụng một phần ngay cả khi Drupal không phản hồi
  2. Đảm bảo rằng không có trang quản trị nào được lưu trong bộ nhớ cache, buộc Varnish bỏ qua bộ nhớ cache cho các URL nhất định
  3. Đảm bảo bộ nhớ đệm của các file tĩnh - hình ảnh, tập lệnh, bảng định kiểu
  4. Loại bỏ tất cả các cookie ngoài một số cookie mà Drupal cần để hoạt động bình thường, bao gồm các tính năng đăng nhập của user

Để làm điều này, hãy thay thế khối mặc định bằng khối sau. Các dòng đứng trước dấu # là comment và sẽ không được Varnish tính đến, nhưng ở đây để giúp làm cho file cấu hình dễ hiểu. Toàn bộ khối này là mới và có thể được paste vào :

. . .  sub vcl_recv {      # Return (pass) instructs Varnish not to cache the request     # when the condition is met.      ## ADMIN PAGES ##      # Here we filter out all URLs containing Drupal administrative sections     if (req.url ~ "^/status\.php$" ||         req.url ~ "^/update\.php$" ||         req.url ~ "^/admin$" ||         req.url ~ "^/admin/.*$" ||         req.url ~ "^/user$" ||         req.url ~ "^/user/.*$" ||         req.url ~ "^/flag/.*$" ||         req.url ~ "^.*/ajax/.*$" ||         req.url ~ "^.*/ahah/.*$") {            return (pass);     }       ## BACKUP AND MIGRATE MODULE ##      # Backup and Migrate is a very popular Drupal module that needs to be excluded     # It won't work with Varnish     if (req.url ~ "^/admin/content/backup_migrate/export") {         return (pipe);     }      ## COOKIES ##      # Remove cookies for stylesheets, scripts, and images used throughout the site.     # Removing cookies will allow Varnish to cache those files.     if (req.url ~ "(?i)\.(css|js|jpg|jpeg|gif|png|ico)(\?.*)?$") {         unset req.http.Cookie;     }      # Remove all cookies that are not necessary for Drupal to work properly.     # Since it would be cumbersome to REMOVE certain cookies, we specify     # which ones are of interest to us, and remove all others. In this particular     # case we leave SESS, SSESS and NO_CACHE cookies used by Drupal's administrative     # interface. Cookies in cookie header are delimited with ";", so when there are     # many cookies, the header looks like "Cookie1=value1; Cookie2=value2; Cookie3..."      # and so on. That allows us to work with ";" to split cookies into individual     # ones.     #     # The method for filtering unnecessary cookies has been adopted from:     # https://fourkitchens.atlassian.net/wiki/display/TECH/Configure+Varnish+3+for+Drupal+7     if (req.http.Cookie) {         # 1. We add ; to the beginning of cookie header         set req.http.Cookie = ";" + req.http.Cookie;         # 2. We remove spaces following each occurence of ";". After this operation         # all cookies are delimited with no spaces.         set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");         # 3. We replace ";" INTO "; " (adding the space we have previously removed) in cookies         # named SESS..., SSESS... and NO_CACHE. After this operation those cookies will be          # easy to differentiate from the others, because those will be the only one with space         # after ";"            set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|SSESS[a-z0-9]+|NO_CACHE)=", "; \1=");         # 4. We remove all cookies with no space after ";", so basically we remove all cookies other         # than those above.         set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");         # 5. We strip leading and trailing whitespace and semicolons.         set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");          # If there are no cookies after our striping procedure, we remove the header altogether,         # thus allowing Varnish to cache this page         if (req.http.Cookie == "") {             unset req.http.Cookie;         }         # if any of our cookies of interest are still there, we disable caching and pass the request         # straight to Apache and Drupal         else {             return (pass);         }     } }  . . . 

Phương pháp tiếp theo là phản hồi backend vcl . Phương thức này chịu trách nhiệm xử lý phản hồi từ Apache và Drupal trước khi đưa nó vào bộ nhớ cache hoặc loại bỏ nó khỏi bộ nhớ cache. Ta có thể thay đổi những gì Drupal gửi để phù hợp với chiến lược bộ nhớ đệm của ta .

Phương thức mặc định trông như thế này:

. . .  sub vcl_backend_response {     # Happens after we have read the response headers from the backend.     #     # Here you clean the response headers, removing silly Set-Cookie headers     # and other mistakes your backend does. }  . . . 

Hãy thay thế nó bằng khối hoàn toàn mới này. Comment được bao gồm:

. . .  sub vcl_backend_response {     # Remove cookies for stylesheets, scripts and images used throughout the site.     # Removing cookies will allow Varnish to cache those files. It is uncommon for     # static files to contain cookies, but it is possible for files generated     # dynamically by Drupal. Those cookies are unnecessary, but could prevent files     # from being cached.     if (bereq.url ~ "(?i)\.(css|js|jpg|jpeg|gif|png|ico)(\?.*)?$") {         unset beresp.http.set-cookie;     } }  . . . 

Mã xóa cookie cho các file tĩnh bằng cách sử dụng cùng một phương pháp chọn file như trước đây, vì vậy cookie sẽ bị xóa cho các file giống nhau cả trong vcl recvvclbackend_response .

Hãy lưu file cấu hình bằng CTRL + x , rồi đến y , sau đó nhấn Enter . Thay đổi các phương pháp khác là không cần thiết.

Bước 5 - Khởi động lại Varnish

Khởi động lại Varnish để các thay đổi có hiệu lực:

sudo service varnish restart 

Server Varnish sẽ khởi động lại mà không có lỗi.

Đến đây bạn sẽ có thể xem lại trang web Drupal trong trình duyệt của bạn .

Tuy nhiên, còn một bước nữa mà ta nên thực hiện trước khi trang web Drupal của ta được lưu vào bộ nhớ đệm đúng cách. Ta cần kích hoạt bộ nhớ đệm trong chính Drupal.

Bước 6 - Bật bộ nhớ đệm trong Drupal

Theo mặc định, Drupal đã tắt các cơ chế bộ nhớ cache của nó. Điều này dẫn đến tiêu đề được gửi đến Varnish buộc các trang không được lưu vào bộ nhớ đệm. Vì vậy, cache Drupal bị vô hiệu hóa sẽ tự động chặn Varnish giúp ta tăng tốc trang web.

Để kích hoạt bộ nhớ đệm Drupal, hãy đăng nhập vào trang web Drupal của bạn với quyền administrator .

Chọn menu Cấu hình , sau đó chọn Hiệu suất .

Menu cấu hình Drupal

Trong phần Hiệu suất , định vị và kiểm tra các trang Bộ nhớ cache cho user ẩn danh và cài đặt khối Bộ nhớ cache .

Đặt Thời lượng bộ nhớ cache tối thiểu và Thời gian hết hạn của các trang được lưu trong bộ nhớ cache thành một giá trị hợp lý, chẳng hạn như 30 phút . Giá trị này mang lại hiệu suất đáng kể và vẫn đảm bảo bộ nhớ cache không cũ quá lâu. Cài đặt tốt nhất cho thời gian tồn tại của bộ nhớ cache phụ thuộc vào từng trang web và tần suất nó được cập nhật. Sau khi thay đổi các giá trị, nhấp vào Lưu cấu hình .

Cài đặt bộ nhớ đệm

Điều này hoàn thành cấu hình cần thiết để đặt Varnish vào bộ nhớ cache của trang web Drupal của ta .

Bước 7 - Xác minh cấu hình Varnish

Để chắc chắn rằng Varnish đang lưu vào bộ nhớ đệm của trang web, ta có thể sử dụng công cụ đơn giản có tên là Is Varnish Working? . Nhập địa chỉ trang web vào biểu mẫu. Bạn sẽ thấy một phản hồi như sau:

Vecni làm việc

Bạn có thể cần kiểm tra hai lần nếu bạn nhận được thông báo "loại" trong lần đầu tiên.

Đọc thêm

Các chủ đề được đề cập trong bài viết này chỉ là phần nổi của tảng băng chìm. Varnish là phần mềm rất mạnh mẽ và có thể giúp ích nhiều hơn là chỉ lưu vào bộ nhớ đệm đơn giản. Tài liệu chính thức của Varnish là một tài nguyên rộng lớn về các khả năng của Varnish và cú pháp VCL. Để tận dụng tối đa Varnish và Drupal, cách tốt nhất là bạn nên biết khả năng riêng của Drupal trong việc cải thiện hiệu suất. Tài liệu chính thức về hiệu suất của Drupal là một điểm khởi đầu tốt.

Varnish là một công cụ có thể giúp hiệu suất trang web vô cùng lớn, nhưng cuối cùng nó không phải là giải pháp kỳ diệu cho tất cả các node thắt về hiệu suất và đạt được kết quả tốt nhất bằng cách lập kế hoạch cẩn thận ở tất cả các giai đoạn. Phải nói rằng, ngay cả cấu hình Varnish đơn giản nhất cũng có thể làm cho trang web hoạt động tốt trong vài phút.


Tags:

Các tin liên quan

Cách nâng cấp Ubuntu 12.04 LTS lên Ubuntu 14.04 LTS
2014-11-17
Các bước được đề xuất bổ sung cho server Ubuntu 14.04 mới
2014-11-04
Cơ bản về quản lý gói Ubuntu và Debian
2014-11-03
Cách quản lý cụm của bạn với Chef và Knife trên Ubuntu
2014-10-31
Cách cài đặt Zentyal trên Ubuntu 14.04
2014-10-29
Cách cài đặt và cấu hình VNC trên Ubuntu 14.04
2014-10-23
Cách tạo module puppet để tự động cài đặt WordPress trên Ubuntu 14.04
2014-10-22
Cách thiết lập Mirror Director với MirrorBrain trên Ubuntu 14.04
2014-10-06
Cách cấu hình một cụm Mesosphere sẵn sàng sản xuất trên Ubuntu 14.04
2014-09-25
Cách thiết lập DNSSEC trên server tên NSD trên Ubuntu 14.04
2014-09-25