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