- Varnish Cache là gì?
- Cài đặt CentOS 7, PHP-FPM, Nginx
- Cài đặt và sử dụng Varnish Cache
- Lệnh quản lý Varnish Cache
Giới thiệu về Varnish Cache
Varnish Cache là là một dịch vụ tăng tốc ứng dụng web, nó đứng trước các truy vấn đến ứng dụng web như là một HTTP reverse proxy, lưu cache để giảm tải cho ứng dụng web (cache toàn bộ trang). Như thông tin từ trang https://varnish-cache.org/, Varnish Cache tăng tốc ứng dụng web từ 300 - 1000 lần.
Varnish Cache thiếu hỗ trợ SSL/TLS (https) nên sử dụng thực tế cấu hình phức tạp hơn để ứng dụng web của bạn vẫn được cache bởi Varnish Cache và vẫn hỗ trợ truy cập giao thức https. Trong phần này, hướng dẫn cài đặt - cấu hình Varnish Cache làm việc cùng Nginx trên CentOS với sơ đồ làm việc như sau:
- Giả sử Server CentOS 7 có địa chỉ IP 192.168.10.56, bạn có thể triển khai Server này bằng cách sử dụng Vagrat (file Vagrant tham khảo) - cách dùng Vagrant xem tại Dùng Vagrant tạo máy ảo
- Trên Server này cài đặt Nginx, PHP-FPM, Varnish Cache phối hợp làm việc với quy tắc: Nginx làm FrontEnd nhận các truy vấn https (nếu truy vấn http sẽ redirect sang https). Frontend này sẽ truy chuyển yêu cầu đến Varnish (cổng 6081), nếu truy vấn chưa được Cache thì Varnish gửi truy vấn đến khối Backend (Ứng dụng - ứng dụng web dùng Nginx ...) để lấy nội dung và cache
- Trong ví dụ sủ dụng hai tên miền testvarnish1.net và testvarnish2.net trong đó cấu hình
chỉ cache testvarnish1.net. Hai tên miền ảo này trỏ vào server 192.168.10.56 bằng
cách thêm vào file
hosts
(/etc/hosts trên Linux, macOS hoặc C:\Windows\System32\Drivers\etc\hosts trên Windows)192.168.10.56 testvanish1.net 192.168.10.56 testvanish2.net
Sau đây là các bước cài đặt, cấu hình để các thành phần của sơ đồ trên.
Cài đặt CentOS 7, PHP-FPM, Nginx
Chuẩn bị máy chủ Linux CentOS 7
Bạn có thể sử dụng VPS CentOS 7 nếu có hoặc sử dụng các phần mềm ảo hóa VMWare, VirtualBox để
tạo máy ảo và cài đặt CentOS 7 để thực hành.
Nhanh chóng thì sử dụng Vagrant tạo máy tảo VirtualBox chạy CentOS 7,
chỉ việc lấy về
file Vagrant sau đó chạy lệnh vagrant up
để tạo tự động.
Lưu ý địa chỉ IP đã cấu hình của máy là 192.168.10.56
Sau khi có Server, ssh vào (xem thêm sử dụng ssh) bằng tài khoản root và tiến hành cài đặt các thành phần tiếp theo
Cài đặt php-fpm 8 cho CentOS 7
Thực hiện các lệnh sau để cài đặt PHP 8 trên CentOS 7:
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install yum-utils -y yum-config-manager --disable remi-php54 yum-config-manager --enable remi-php80 yum -y install php php-fpm php-mysqlnd php-zip php-devel \ php-gd php-mcrypt php-mbstring php-curl php-xml \ php-pear php-bcmath php-json php-pdo php-pecl-apcu php-pecl-apcu-devel systemctl start php-fpm systemctl enable php-fpm
Cài đặt nginx cho CentOS 7
Thực hiện các lệnh sau để cài đặt Nginx trên CentOS 7
# Install Nginx yum install epel-release -y yum install nginx -y systemctl start nginx systemctl enable nginx # Allow firewall firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Cấu hình PHP-FPM
Có thể cấu hình Nginx chạy PHP qua Socket hoặc qua cổng tpc 9200, ở đây chọn qua Socket, nên cần đảm bảo có file Socket khi PHP-FPM chạy, mở file cấu hình php-fpm ra
vi /etc/php-fpm.d/www.conf
Sửa listen có dạng (bỏ lắng nghe cổng 9200, thay bằng tạo file socket /var/run/php-fpm.sock)
; listen = 127.0.0.1:9000 listen = /var/run/php-fpm.sock
Đồng thời thêm vào cuỗi
listen.owner = nginx listen.group = nginx listen.mode = 0660
Sau đó kiểm khởi động lại php-fpm và xem trạng thái hoạt động của nó
systemctl restart php-fpm systemctl status php-fpm
Cấu hình nginx
Mở file cấu hình /etc/nginx/nginx.conf
xóa đi khối server
trong khối http
, để loại bỏ server mặc định, sau đó lưu lại
Tạo ssl certificate: Với mục đích dùng https, sẽ tạo ra tự xác thực ssl (nếu domain thật bạn dùng Let's Encrypt miễn phí ), chạy các lệnh sau:
yum install mod_ssl openssl -y mkdir /certs/ cd /certs/ openssl genrsa -out ca.key 2048 openssl req -new -key ca.key -out ca.csr openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
Bạn có 2 file /certs/ca.crt
và /certs/ca.key
để cấu hình SSL cho Nginx
Cấu hình kiểm tra testvanish2.net - trường hợp này cấu hình site chạy thông thường không có sử dụng cache
Tạo ra file /etc/nginx/conf.d/site2.conf
, nội dung file này như
tại
/etc/nginx/conf.d/site2.conf
Trong file này định nghĩa hai khối server, thứ nhất lắng nghe cổng 443 nhận các
yêu cầu https, file php thi hành bằng cách chuyển cho socket unix:/var/run/php-fpm.sock
, khối này sử dụng tự xác thực ssl ở trên.
Khối server thứ 2 chuyển hướng http://testvanish2.net sang https://testvanish2.net
Khởi động lại nginx
systemctl restart nginx
Tạo ra file /var/www/html/site2/index.php
để kiểm tra
<?php echo "\nTest site1\n"; echo date('l jS \of F Y h:i:s A'); echo "\n";
Truy cập địa chỉ https://testvanish2.net
để thấy rằng nginx và php-fpm đã làm việc chính xác
Cài đặt và sử dụng Varnish Cache cơ bản
Cài đặt Varnish Cache
Thực hiện các lệnh sau
yum install -y epel-release yum install varnish -y systemctl start varnish systemctl enable varnish systemctl status varnish
Mở file /etc/varnish/default.vcl
bằng lệnh vi, cập nhật, đảm bảo có khối
backend default { .host = "127.0.0.1"; .port = "8080"; }
Có nghĩa là Varnish Cache sẽ truy cập 127.0.0.1:8080 (nginx) để lấy nội dung nếu chưa cache
Tiếp theo, mở /etc/varnish/varnish.params
, cập nhật
VARNISH_LISTEN_ADDRESS=127.0.0.1 VARNISH_LISTEN_PORT=6081
Có nghĩa là Varnish Server lắng nghe ở 127.0.0.1:6081, sau đó khởi động lại Varnish
systemctl restart varnish
Có thể kiểm tra các dịch vụ đã chạy ở các cổng chính xác chưa với lệnh
netstat -pnltu
Nếu lệnh này chưa có, cài thêm vào bằng
yum install net-tools -y
Cấu hình Nginx sử dụng Varnish Cache
Tạo ra file /etc/nginx/conf.d/site1.conf
, nội dung file này như
tại
/etc/nginx/conf.d/site1.conf
Nó gồm có ba khối server với các chức năng
Cấu hình để testvanish1.net hoạt động ở cổng 8080, chỉ cho truy cập localhost, khối này nhận request từ Varnish Cache trả nội dung cho Varnish Cache
server { listen 127.0.0.1:8080; root /var/www/html/site1; index index.php index.html index.htm; server_name testvanish1.net; set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; location = /404.html { root /var/www/errors; internal; } # pass the PHP scripts to FastCGI server listening on socket location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; } location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ { expires 5d; } # deny access to . files, for security location ~ /\. { log_not_found off; deny all; } }
Khối tiếp theo, cấu hình cho https://testvanish1.net, nó truy vấn đến Varnish Cache để lấy nội dung trả về cho client
server { listen 443 ssl http2; listen [::]:443 ssl http2 ipv6only=on; ## listen for ipv6 root /var/www/html/site1; index index.php index.html index.htm; ssl_certificate /certs/ca.crt; ssl_certificate_key /certs/ca.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name testvanish1.net; # Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html sendfile off # Proxy Pass to Varnish # Add headers to recognize SSL location / { proxy_pass http://127.0.0.1:6081; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header X-Secure on; } }
Khối cuối chuyển hướng http sang https
server { listen 80; server_name testvanish1.net; return 301 https://testvanish1.net$request_uri; }
Tạo ra file /var/www/html/site1/index.php
để kiểm tra
<?php echo "\nTest Varnish Cache\n"; echo date('l jS \of F Y h:i:s A'); echo "\n";
Truy cập https://testvanish1.net để kiểm tra, bạn thấy nội dung đã được cache bởi Varnish
Vài lệnh quản lý Varnish Cache
varnishadm
Lệnh quản lý dịch vụ Varnish Cache, trong đó có các lệnh con quản lý Varnish, gõ help để xem các lệnh này và quit để thoát
Để xem log theo thời gian thực thực hiện lệnh
varnishlog
Ngoài ra còn có các lệnh thống kê, theo dõi Varnish theo thời gian thực như
varnishstat
, varnishhist
, varnishtop