Hướng dẫn cấu hình Reverse Proxy Cache trên Nginx


Nếu chúng ta có một hệ thống lớn, với dữ liệu khổng lồ và người truy cập đông. Bài toán đặt ra là hệ thống của bạn làm sao có thể đáp ứng được yêu cầu đó. Giải pháp thường được sử dụng là cache dữ liệu người dùng. Hôm nay vinasupport.com sẽ giới thiệu tổng Nginx Cache và cấu hình Reverse Proxy Cache trên Nginx.

Reverse Proxy là gì?

Để hiểu về Reverse Proxy trên Nginx vui lòng tham khảo bài viết sau:

Tổng quan về Nginx Cache

Nginx Cache là gì? Khi hệ thống cache của Nginx được kích hoạt, các yêu cầu tới máy chủ  Nginx sẽ được gửi đến bộ nhớ Cache trước. Nếu tồn tại dữ liệu được yêu cầu, nó sẽ trả lại dữ liệu cho người dùng ngay lập tức thay vì để máy chủ xử lý yêu cầu đó. Trường  hợp chưa dữ liệu, nó sẽ gửi yều cầu tới máy chủ, máy chủ xử lý, trả lại dữ liệu đồng thời tạo bản cache dữ liệu để các lần yêu cầu sau.

Mô hình Reserve Proxy Cache:

Lợi ích khi sử dụng Nginx Cache

  • Tăng hiệu năng ( Performance ) của các website / ứng dụng: Giảm xử lý các yêu cầu giống nhau.
  • Tăng khả năng chịu tải (Load) của các upstream server.
  • Tăng tính sẵn sàng (High availability) cho dịch vụ: nginx sẽ trả kết quả cache cho người dùng nếu như các upstream server gặp sự cố không truy cập được.

Hướng dẫn cấu hình Reverse Proxy Cache trên Nginx

Đầu tiên chúng ta định nghĩa proxy_cache_path trong block http của nginx.

Các bạn sửa file /etc/nginx/nginx.conf và thêm dòng sau vào:

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
    inactive=24h  max_size=1g;
    ...
}

Nó sẽ định nghĩa key của cache là STATIC và  lưu cache vào thư mục /var/nginx/cache

Sau đó trong Reverve Proxy của Nginx, chúng ta thực hiện cầu hình Reverve Proxy như sau:

Các bạn sửa file virtual host của Nginx, VD: file mặc định /etc/nginx/sites-available/default

server {
        location / {
            proxy_pass             http://vinasupport.com;
            proxy_set_header       Host $host;
            proxy_buffering        on;
            proxy_cache            STATIC;
            proxy_cache_valid      200  1d;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
        }
}

Như vậy Nginx Cache đã được kích hoạt.

Cấu hình năng cao Reverse Proxy Cache trên Nginx

Ở trên là cấu hình cơ bản Cache, bạn  có thể tham khảo cấu hình nâng cao, vinasupport.com sẽ giải thích các tham số cấu hình Cache

server {        
       location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
                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_pass http://vinasupport.com;

                proxy_set_header       Host $host;
                proxy_buffering        on;
                proxy_cache            STATIC;
                proxy_cache_valid      200  30m;
                proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
                proxy_cache_background_update on;
                proxy_cache_lock on;
                proxy_read_timeout 3600;
                proxy_connect_timeout 300s;
                proxy_request_buffering off;                
        }
}

Giải thích các tham số:

  • proxy_cache_valid: Thời gian tồn tại của cache. VD: Với các yêu cầu có http status trả về là 200 thì thời gian tồn tại của cache là 30 phút.
  • proxy_cache_use_stale: Trả lại nội dung đã cache thay vì lỗi từ máy chủ. VD: Trường hợp các lỗi http có status 500, 502, 503, 504, máy chủ gặp lỗi thì nó sẽ trả về nội dung đã cache.
  • proxy_buffering:  Lệnh này điều khiển bộ đệm cho buffering cho context và các context con của nó.
  • proxy_cache_background_update: Khi một item hết hạn, thay vì chờ dữ liệu trả về từ Server. Nó sẽ gửi bản cache lại cho người dùng. Đồng thời vẫn đồng bộ nội dung mới từ Server ở background.
  • proxy_cache_lock: Trường hợp nhiều client cùng request một file mà file đó đang không có trong cache (MISS), chỉ có request đầu tiên trong số những request đó được phép đẩy về server. Những request còn lại sẽ phải chờ cho đến khi request đầu tiên hoàn tất và dữ liệu được lưu vào cache, và chúng sẽ sử dụng dữ liệu từ file cache này. Nếu không có proxy_cache_lock được bật, tất cả request bị cache miss sẽ đi thẳng về server.

Ngoài ra còn có các tham số khác như:

proxy_cache_methods GET HEAD POST;
  • proxy_cache_methods: định nghĩa những http method mà bạn muốn cache. VD: GET, HEAD, POST
proxy_cache_min_uses 3;
  • proxy_cache_min_uses: Số lần được sử dụng của bản cache

Để theo dõi trạng thái cache, chúng ta dùng tham số add_header

add_header X-Cache-Status $upstream_cache_status;

Vô hiệu hóa Nginx Cache

để vô hiệu hóa nginx cache chúng ta thêm config

proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;

Trường hợp bạn chỉ muốn ngăn cache 1 số extension thì

set $no_cache "";
if ($request_uri ~* \.(gif|png|jpg|jpeg)$) {
       set $no_cache "1";
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;

Kết luận

Như vậy mình đã trình bày khá chi tiết về Reserver Proxy Cache trên Nginx. Nếu có thắc mắc gì các bạn vui lòng comment bên dưới.

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web