Cách bật bộ nhớ Cache FastCGI phía máy chủ với Nginx và PHP

Tác giả NetworkEngineer, T.Mười 25, 2021, 08:42:21 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách bật bộ nhớ Cache FastCGI phía máy chủ với Nginx và PHP


Nginx là một máy chủ web mã nguồn mở và hiệu suất cao có thể được sử dụng để tăng tốc độ phân phối nội dung và ứng dụng.

Nginx tăng cường bảo mật, cải thiện khả năng mở rộng và cũng có thể được sử dụng như một bộ cân bằng tải tính khả dụng cao.

Nó có thể được sử dụng như một proxy ngược và một trong những ứng dụng quan trọng nhất của Nginx là bộ nhớ Cache nội dung.

Một trong những cách tiếp cận tốt nhất là sử dụng Nginx làm bộ nhớ Cache nội dung.

Trong bài viết này, chúng ta sẽ thảo luận về bộ nhớ Cache nội dung của Nginx FastCGI để có hiệu suất tốt hơn cho các trang web.

1. Bật bộ nhớ Cache FastCGI trong Nginx.

Trong bài viết này, chúng ta giả định rằng bạn đã cài đặt Nginx với PHP trên máy Linux của mình.

Để bắt đầu bật bộ nhớ Cache FastCGI, hãy chỉnh sửa tập tin cấu hình virtual host mà bộ nhớ Cache sẽ được bật.

Mã nguồn [Chọn]
$ cd /etc/nginx/conf.d
Mã nguồn [Chọn]
$ vi example.conf
Thêm nội dung sau vào đầu tập tin. Hãy nhớ rằng các dòng phải nằm ngoài thẻ server {}

Mã nguồn [Chọn]
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";


  • fastcgi_cache_path - vị trí của bộ nhớ cache
  • levels - cấp độ phân cấp của bộ nhớ cache, nó thiết lập phân cấp thư mục hai cấp theo /etc/nginx/cache
  • key_zone - tên vùng bộ nhớ (Trong ví dụ này, mình đã sử dụng MYAPP. Bạn có thể có tùy chọn của riêng mình)
  • inactive  - chỉ định thời gian mà sau đó dữ liệu được lưu trong bộ nhớ cache không được truy cập trong thời gian được chỉ định sẽ bị xóa khỏi bộ nhớ cache. Trong ví dụ này, thời gian không hoạt động được đặt là 60 phút, có thể tăng hoặc giảm.
  • fastcgi_cache_key - Nó chỉ định cách các tên tập tin bộ Cache sẽ được băm.

Các biến được sử dụng trong factcgi_cache_key

  • $ Scheme - yêu cầu lược đồ HTTPS hoặc HTTP
  • $ request_method - chỉ định các phương thức yêu cầu như GET hoặc POST
  • $ host - Tên của máy chủ phù hợp với yêu cầu
  • $ request_uri - URI yêu cầu đầy đủ

Vị trí của tập tin bộ Cache có thể ở bất kỳ đâu trên đĩa cứng nhưng kích thước phải nhỏ hơn RAM + swap của hệ thống để tránh vấn đề "Không thể cấp phát bộ nhớ".

Bây giờ hãy chuyển đến thẻ location nơi yêu cầu PHP được chuyển tới php-fpm. Bên trong "location ~ \ .php $ {}" thêm các dòng sau.

Mã nguồn [Chọn]
fastcgi_cache MYAPP;
Mã nguồn [Chọn]
fastcgi_cache_valid 200 1m;
Trong đó MYAPP là tên vùng bộ nhớ và fastcgi_cache_valid 200 lưu trữ tất cả các phản hồi HTTP 200.

Nếu chỉ xác định thời gian, thì các phản hồi 200, 301 và 302 sẽ được lưu vào bộ nhớ Cache.


Chạy lệnh sau để kiểm tra cấu hình Nginx vhost.

Mã nguồn [Chọn]
$ nginx -t

Bây giờ khởi động lại dịch vụ Nginx.

Mã nguồn [Chọn]
$ systemctl restart nginx
Tập tin cấu hình vhost hoàn chỉnh trông giống như sau.

Mã nguồn [Chọn]
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
  listen 80;
  root /usr/share/nginx/html;
  index index.php index.html index.htm;
  server_name your_server_name;
  location / {
    try_files $uri $uri/ /index.html;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_cache MYAPP;
    fastcgi_cache_valid 200 60m;
  }
}


2. Kiểm tra bộ nhớ Cache FastCGI.

Tạo một tập tin PHP đơn giản trong thư mục gốc của tài liệu.

Mã nguồn [Chọn]
$ vi /usr/share/nginx/html/info.php
Dán nội dung sau và lưu.

Mã nguồn [Chọn]
<? php
phpinfo ();
?>

Bây giờ yêu cầu tập tin bằng lệnh curl hoặc sử dụng trình duyệt. Nếu bộ nhớ Cache hoạt động tốt, thì bạn có thể liệt kê thư mục bộ nhớ Cache trong /etc/nginx/cache.


Thêm dòng sau vào phía thẻ server{} để cho biết bộ nhớ cache có bị thiếu hoặc HIT.

Mã nguồn [Chọn]
add_header X-Cache $upstream_cache_status;
Khởi động lại Nginx và chạy lệnh curl như sau.

Mã nguồn [Chọn]
$ curl -I http: //localhost/info.php

3. Đặt ngoại lệ bộ nhớ cache trong Nginx fastCGI.

Đôi khi chúng ta có thể không cần lưu nội dung động như các trang xác thực cơ bản. Có thể tránh lưu các loại nội dung này vào bộ nhớ Cache dựa trên các biến khác nhau như "$ request_method" "" $ request_uri "" $ http_cookie ", v.v.

Dưới đây là cấu hình mẫu cho ngoại lệ bộ nhớ cache và sẽ được sử dụng bên trong thẻ server{}

Mã nguồn [Chọn]
#Cache everything by default

set $no_cache 0;

#Don't cache POST requests
if ($request_method = POST)
{
set $no_cache 1;
}


#Don't cache if the URL contains a query string
if ($query_string != "")
{
set $no_cache 1;
}


#Don't cache the following URLs
if ($request_uri ~* "/(cp/)")
{
set $no_cache 1;
}

#Don't cache if there is a cookie called PHPSESSID
if ($http_cookie = "PHPSESSID")
{
set $no_cache 1;
}


Trong bài viết này, chúng ta đã học cách cấu hình Nginx với PHP để lưu vào bộ nhớ Cache nội dung động. Ngoài ra, chúng ta đã tìm hiểu về các mẹo khác nhau để thiết lập ngoại lệ cho bộ nhớ cache.