Thứ năm, 07/08/2014 | 00:00 GMT+7

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 .

Môi trường hiện tại

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

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:

Lỗi 503

Đ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 hostport 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:

Trang mặc định của Apache2 Ubuntu

Đế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:

Số liệu thống kê về Varnish

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_hitcache_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ó.


Tags:

Các tin liên quan

Giới thiệu về Ganglia trên Ubuntu 14.04
2014-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