Cách cấu hình Varnish Cache 4.0 với SSL Termination trên Ubuntu 14.04
Trong hướng dẫn này, ta sẽ trình bày cách sử dụng Varnish Cache 4.0 để cải thiện hiệu suất của web server hiện có của bạn. Ta cũng sẽ chỉ cho bạn một cách để thêm hỗ trợ HTTPS cho Varnish, với việc Nginx thực hiện việc chấm dứt SSL. Ta sẽ giả định bạn đã cài đặt một server ứng dụng web và ta sẽ sử dụng một server LAMP chung (Linux, Apache, MySQL, PHP) làm điểm khởi đầu.Varnish Cache là một Reverse Proxy HTTP trong bộ nhớ đệm, hoặc bộ tăng tốc HTTP, giúp giảm thời gian cung cấp nội dung cho user . Kỹ thuật chính mà nó sử dụng là lưu vào bộ nhớ đệm các phản hồi từ web server hoặc ứng dụng trong bộ nhớ, vì vậy các yêu cầu tương tự trong tương lai có thể được phục vụ mà không cần phải truy xuất nội dung đó từ web server . Hiệu suất có thể được cải thiện đáng kể trong nhiều môi trường khác nhau và nó đặc biệt hữu ích khi bạn có các ứng dụng web động nặng về nội dung. Varnish được xây dựng với bộ nhớ đệm là tính năng chính của nó nhưng nó cũng có những công dụng khác, chẳng hạn như cân bằng tải Reverse Proxy .
Trong nhiều trường hợp, Varnish hoạt động tốt với mặc định của nó nhưng hãy nhớ rằng nó phải được điều chỉnh để cải thiện hiệu suất với một số ứng dụng nhất định, đặc biệt là những ứng dụng sử dụng cookie. Điều chỉnh độ sâu của Varnish nằm ngoài phạm vi của hướng dẫn này.
Yêu cầu
Trong hướng dẫn này, ta giả định bạn đã có một server ứng dụng web đang lắng nghe HTTP (cổng 80) trên địa chỉ IP riêng của nó. Nếu bạn chưa cài đặt web server , hãy sử dụng liên kết sau để cài đặt LAMP của bạn : Cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 14.04 . Ta sẽ gọi server này là LAMP_VPS .
Bạn cần tạo một VPS Ubuntu 14.04 mới sẽ được sử dụng để cài đặt Varnish của bạn. Tạo user không phải root với quyền sudo bằng cách hoàn thành các bước 1-4 trong hướng dẫn cài đặt server ban đầu cho Ubuntu 14.04 . Ta sẽ gọi server này là Varnish_VPS .
Lưu ý server Varnish sẽ nhận được yêu cầu của user và phải có kích thước phù hợp với lưu lượng truy cập mà bạn mong đợi nhận được.
Mục tiêu của ta
Mục tiêu của ta là cài đặt Varnish Cache phía trước server ứng dụng web của ta , do đó, các yêu cầu có thể được phục vụ nhanh chóng và hiệu quả. Sau khi bộ nhớ đệm được cài đặt , ta sẽ hướng dẫn bạn cách thêm hỗ trợ HTTPS vào Varnish, bằng cách sử dụng Nginx để xử lý các yêu cầu SSL đến. Sau khi cài đặt xong, cả truy cập HTTP và HTTPS của bạn đều sẽ thấy những lợi ích về hiệu suất của bộ nhớ đệm.
Đến đây bạn đã cài đặt các yêu cầu và bạn biết những gì bạn đang cố gắng xây dựng, hãy bắt đầu!
Cài đặt Varnish
Cách được khuyến khích để tải version mới nhất của Varnish 4.0 là cài đặt gói có sẵn thông qua repository chính thức.
 Ubuntu 14.04 đi kèm với apt-transport-https , nhưng chỉ cần chạy lệnh sau trên Varnish_VPS để chắc chắn:
sudo apt-get install apt-transport-https Bây giờ hãy thêm khóa Varnish GPG vào apt:
curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add - Sau đó, thêm repository Varnish 4.0 vào danh sách các nguồn apt của bạn:
sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list' Cuối cùng, cập nhật apt-get và cài đặt Varnish bằng các lệnh sau:
sudo apt-get update sudo apt-get install varnish Theo mặc định, Varnish được  cấu hình  để lắng nghe trên cổng 6081 và mong đợi  web server  của bạn ở trên cùng một  server  và nghe trên cổng 8080 . Mở trình duyệt và truy cập cổng 6081 của  server  của bạn (thay thế phần được đánh dấu bằng địa chỉ IP hoặc domain  công khai của bạn):
http://varnish_VPS_public_IP:6081 Vì  ta  đã cài đặt Varnish trên một VPS mới nên việc truy cập vào cổng 6081 trên địa chỉ IP công cộng hoặc domain  của  server  của bạn sẽ trả về trang lỗi sau: 
Điều này cho thấy rằng Varnish đã được cài đặt và đang chạy, nhưng nó không thể tìm thấy web server mà nó được cho là đang lưu vào bộ nhớ đệm. Hãy cấu hình nó để sử dụng web server của ta làm backend ngay bây giờ.
Cấu hình Varnish
Đầu tiên, ta sẽ cấu hình Varnish để sử dụng LAMP_VPS của ta làm chương trình backend .
 Tệp cấu hình Varnish nằm ở /etc/varnish/default.vcl . Hãy chỉnh sửa nó ngay bây giờ:
sudo vi /etc/varnish/default.vcl Tìm các dòng sau:
backend default {     .host = "127.0.0.1";     .port = "8080"; } Và thay đổi các giá trị của host và port tương ứng với địa chỉ IP riêng của  server  LAMP và cổng lắng nghe.  Lưu ý   ta  đang  giả định  ứng dụng web của bạn đang lắng nghe địa chỉ IP riêng và cổng 80. Nếu không đúng như vậy, hãy sửa đổi cấu hình để phù hợp với nhu cầu của bạn:
backend default {     .host = "LAMP_VPS_private_IP";     .port = "80"; } Varnish có một tính năng được gọi là “chế độ gia hạn”, khi được bật, Varnish sẽ hướng dẫn Varnish phân phát bản sao được lưu trong bộ nhớ cache của các trang được yêu cầu nếu chương trình  backend   web server  của bạn gặp sự cố và không khả dụng. Hãy kích hoạt nó ngay bây giờ. Tìm khối sub vcl_backend_response sau và thêm các dòng được đánh dấu sau vào đó:
sub vcl_backend_response {     set beresp.ttl = 10s;     set beresp.grace = 1h; } Điều này đặt thời gian gia hạn của các trang được lưu trong bộ nhớ cache thành một giờ, nghĩa là Varnish sẽ tiếp tục cung cấp các trang được lưu trong bộ nhớ cache trong tối đa một giờ nếu nó không thể kết nối với web server của bạn để tìm kiếm bản sao mới. Điều này có thể hữu ích nếu server ứng dụng của bạn gặp sự cố và bạn muốn nội dung cũ được cung cấp cho user thay vì một trang lỗi (như lỗi 503 mà ta đã thấy trước đây), trong khi bạn khôi phục web server của bạn .
 Lưu và thoát khỏi file  default.vcl .
  Ta  sẽ muốn đặt Varnish lắng nghe trên cổng HTTP mặc định (80), vì vậy  user  của  bạn có thể  truy cập  trang web  mà không cần thêm số cổng bất thường vào URL của bạn. Điều này có thể được đặt trong file  /etc/default/varnish . Hãy chỉnh sửa nó ngay bây giờ:
sudo vi /etc/default/varnish Bạn sẽ thấy rất nhiều dòng, nhưng hầu hết chúng đều được  comment  ra ngoài. Tìm dòng DAEMON_OPTS sau (dòng này sẽ được bỏ ghi chú):
DAEMON_OPTS="-a :6081 \ Tùy chọn -a được sử dụng để gán địa chỉ và cổng mà Varnish sẽ lắng nghe các yêu cầu trên đó. Hãy thay đổi nó để lắng nghe cổng HTTP mặc định, cổng 80. Sau khi sửa đổi, nó sẽ giống như sau:
DAEMON_OPTS="-a :80 \ Lưu và thoát.
Bây giờ hãy khởi động lại Varnish để các thay đổi có hiệu lực:
sudo service varnish restart Bây giờ hãy kiểm tra nó bằng trình duyệt web, bằng cách truy cập server Varnish của bạn theo địa chỉ IP công khai của nó, trên cổng 80 (HTTP) lần này:
http://varnish_VPS_public_IP Bạn sẽ thấy cùng một thứ được cung cấp từ LAMP_VPS của bạn. Trong trường hợp của ta , đó chỉ là một trang Ubuntu Apache2 đơn giản:
Đến đây, Varnish đang lưu vào bộ nhớ đệm của server ứng dụng của ta - hy vọng bạn sẽ thấy lợi ích về hiệu suất trong thời gian phản hồi giảm. Nếu bạn có một domain trỏ đến server ứng dụng hiện tại của bạn , bạn có thể thay đổi mục nhập DNS của nó để trỏ đến Varnish VPS public_IP của bạn.
Bây giờ ta đã cài đặt bộ nhớ đệm cơ bản, hãy thêm hỗ trợ SSL với Nginx!
Hỗ trợ SSL với Nginx (Tùy chọn)
Varnish không hỗ trợ kết thúc SSL nguyên bản, vì vậy ta sẽ cài đặt Nginx cho mục đích duy nhất là xử lý truy cập HTTP S. Ta sẽ trình bày các bước để cài đặt và cấu hình Nginx với certificate SSL tự ký và đảo ngược lưu lượng proxy từ kết nối HTTPS đến Varnish qua HTTP.
Nếu bạn muốn được giải thích chi tiết hơn về cách cài đặt certificate SSL tự ký với Nginx, hãy tham khảo liên kết này: SSL với Nginx cho Ubuntu . Nếu bạn muốn dùng thử certificate từ StartSSL, đây là hướng dẫn bao gồm điều đó .
Hãy cài đặt Nginx.
Cài đặt Nginx
Trên Varnish_VPS , hãy cài đặt Nginx bằng lệnh apt sau:
sudo apt-get install nginx Sau khi cài đặt xong, bạn sẽ nhận thấy rằng Nginx không chạy. Điều này là do nó được cấu hình để nghe trên cổng 80 theo mặc định, nhưng Varnish đã sử dụng cổng đó. Điều này là tốt vì ta muốn nghe trên cổng HTTPS mặc định, cổng 443.
Hãy tạo certificate SSL mà ta sẽ sử dụng.
Tạo certificate SSL tự ký
Trên Varnish_VPS , hãy tạo một folder nơi có thể đặt certificate SSL:
sudo mkdir /etc/nginx/ssl Tạo khóa SSL 2048 bit tự ký và cặp chứng thực:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt Đảm bảo rằng bạn đặt common name chung  trùng với  domain   của bạn . Chứng chỉ cụ thể này sẽ hết hạn sau một năm.
Bây giờ ta đã có certificate của bạn , hãy cấu hình Nginx để sử dụng nó.
Cấu hình Nginx
Mở cấu hình khối server Nginx mặc định để chỉnh sửa:
sudo vi /etc/nginx/sites-enabled/default Xóa mọi thứ trong file  và thay thế bằng file  sau (và thay đổi server_name để  trùng với  domain  của bạn):
server {         listen 443 ssl;          server_name example.com;         ssl_certificate /etc/nginx/ssl/nginx.crt;         ssl_certificate_key /etc/nginx/ssl/nginx.key;          location / {             proxy_pass http://127.0.0.1:80;             proxy_set_header X-Real-IP  $remote_addr;             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;             proxy_set_header X-Forwarded-Proto https;             proxy_set_header X-Forwarded-Port 443;             proxy_set_header Host $host;         } } Lưu và thoát. Cấu hình trên có một vài dòng quan trọng mà ta sẽ giải thích chi tiết hơn:
- ssl_certificate : chỉ định vị trí certificate SSL
- khóa chứng chỉ ssl : chỉ định vị trí khóa SSL
- Listen 443 ssl : cấu hình Nginx để nghe trên cổng 443
- server_name : chỉ định tên server của bạn và phải trùng với tên chung của certificate SSL của bạn
-  proxy_pass http://127.0.0.1:80 ; : chuyển hướng lưu lượng truy cập đến Varnish (đang chạy trên cổng 80 của 127.0.0.1 (tức là localhost)
 Các dòng proxy_set_header khác proxy_set_header Nginx chuyển tiếp thông tin, chẳng hạn như địa chỉ IP của  user  ban đầu, cùng với bất kỳ yêu cầu nào của  user .
Bây giờ, hãy khởi động Nginx để server của ta có thể xử lý các yêu cầu HTTPS.
sudo service nginx start Bây giờ, hãy kiểm tra nó bằng trình duyệt web, bằng cách truy cập server Varnish của bạn theo địa chỉ IP công cộng của nó, trên cổng 443 (HTTPS) lần này:
https://varnish_VPS_public_IP Lưu ý: Nếu bạn đã sử dụng certificate tự ký, bạn sẽ thấy cảnh báo có nội dung như “Chứng chỉ bảo mật của trang web không tin cậy ”. Vì bạn biết mình vừa tạo certificate nên có thể an toàn để tiếp tục.
, bạn sẽ thấy cùng một trang ứng dụng như trước. Sự khác biệt là bạn đang thực sự truy cập server Nginx, server xử lý mã hóa SSL và chuyển tiếp yêu cầu chưa được mã hóa tới Varnish, xử lý yêu cầu như bình thường.
Cấu hình web server backend
Nếu web server backend của bạn ràng buộc với tất cả các network interface của nó (tức là network interface công cộng và riêng tư), bạn cần sửa đổi cấu hình web server của bạn để nó chỉ nghe trên giao diện riêng tư của nó. Điều này là để ngăn user truy cập trực tiếp vào web server backend của bạn thông qua địa chỉ IP công cộng của nó, điều này sẽ bỏ qua Varnish Cache của bạn.
 Trong Apache hoặc Nginx, điều này sẽ liên quan đến việc gán giá trị của các chỉ thị listen để liên kết với địa chỉ IP riêng của  server   backend  của bạn.
Khắc phục sự cố Varnish
Nếu bạn đang gặp sự cố để Varnish phân phát các trang của bạn một cách chính xác, thì đây là một số lệnh sẽ giúp bạn biết được những gì Varnish đang thực hiện đằng sau mức thấp .
Số liệu thống kê
 Nếu bạn muốn biết bộ nhớ cache của bạn đang hoạt động tốt như thế nào,  bạn cần  xem lệnh varnishstat . Chạy nó như thế này:
varnishstat Bạn sẽ thấy một màn hình giống như sau:
 Có rất nhiều số liệu thống kê được đưa ra và việc sử dụng mũi tên lên / xuống để cuộn sẽ hiển thị cho bạn mô tả ngắn về từng mục. cache_hit kê cache_hit cho bạn biết có bao nhiêu yêu cầu được phân phát với một kết quả được lưu trong bộ nhớ cache – bạn muốn con số này càng gần với tổng số yêu cầu của  ứng dụng client  ( client_req ) càng tốt.
 Nhấn q để thoát.
Nhật ký
 Nếu bạn muốn có cái nhìn chi tiết về cách Varnish đang xử lý từng yêu cầu riêng lẻ, ở dạng log  phát trực tuyến,  bạn cần  sử dụng lệnh varnishlog . Chạy nó như thế này:
varnishlog Khi nó đang chạy, hãy thử và truy cập server Varnish của bạn thông qua trình duyệt web. Đối với mỗi yêu cầu bạn gửi đến Varnish, bạn sẽ thấy một kết quả chi tiết được dùng để giúp khắc phục sự cố và điều chỉnh cấu hình Varnish của bạn.
 Nhấn CTRL + C để thoát.
Kết luận
Bây giờ web server của bạn có server Varnish Cache phía trước, bạn sẽ thấy hiệu suất được cải thiện trong hầu hết các trường hợp. Lưu ý Varnish rất mạnh mẽ và dễ điều chỉnh, và nó có thể yêu cầu các chỉnh sửa bổ sung để có được lợi ích đầy đủ từ nó.
Các tin liên quan
Giới thiệu về Ganglia trên Ubuntu 14.042014-08-05
Cách thực hiện chấm dứt SSL với HAProxy trên Ubuntu 14.04
2014-07-10
Cách sử dụng WP Super Cache và Jetpack Photon để tối ưu hóa hiệu suất WordPress trên Ubuntu 14.04
2014-06-27
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 14.04
2014-06-18
Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
2014-06-17
Cách cài đặt và cấu hình Syncthing để đồng bộ hóa các thư mục trên Ubuntu 14.04
2014-06-16
Cách sử dụng Icinga để giám sát server và dịch vụ của bạn trên Ubuntu 14.04
2014-06-13
Cách sử dụng Logstash và Kibana để tập trung log trên Ubuntu 14.04
2014-06-11
Cách cài đặt Graylog2 và tập trung log trên Ubuntu 14.04
2014-06-06
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên server Ubuntu 14.04
2014-06-05
 

