Skip to main content

[NGINX] luật matching khi chọn location để xử lý 1 request

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
khi nhận được 1 request, NGINX cần chọn location để xử lý request đó, quá trình này gọi là matching.

Vài từ khoá
Các dấu = ~ ~* ^~ gọi là các modifier.
Một location có thể được định nghĩa bởi một "prefix string" hoặc regular expression (regex - nếu không biết regex là gì hãy Google, giải thích khái niệm này nằm ngoài tầm của bài viết).
location /images  {
} # là một location dùng "prefix string"

location ~* \.(gif|jpg|jpeg)$ {
} # là một location dùng regex.
Regex
Để sử dụng các regex, cần dùng modifier ~ hoặc ~*.
~ : regex matching có phân biệt hoa thường. Tức
location meomeo
khác với
location MeoMeo
~*: regex matching không phân biệt hoa thường.

Thứ tự xử lý

1. Kiểm tra tất cả các prefix string location, NHỚ cái match dài nhất.
Tức nếu có:
location / {
}

location /image {
}
Thì một request xxx.com/image/logo.gif sẽ được xử lý ở location /image, bởi / match nhưng /image match dài hơn.

2. Sau khi kiểm tra các prefix string location, NGINX tiếp tục kiểm tra các regex, theo thứ tự nó xuất hiện trong configuration file. Quá trình kiểm tra này dừng lại ngay khi có 1 regex nào match với request. Nếu không có regex nào match, NGINX sẽ sử dụng prefix string location đã NHỚ nói trên.

Modifier ^~ và = 
Nếu  prefix string dài nhất match 1 request, và string đó dùng modifier ^~ thì NGINX sẽ dùng luôn prefix string đó và không kiểm tra các regex nữa.
Sử dụng modifier = để matching chính xác, nếu một location dùng modifier = match request, NGINX sẽ dùng luôn location đó và không thực hiện maching nữa.


Bài viết dựa trên document của NGINX ở bản 1.4

Tài liệu tham khảo
http://nginx.org/en/docs/http/request_processing.html
http://nginx.org/en/docs/http/ngx_http_core_module.html

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG