Location có thể được xác định bằng cách sử dụng một chuỗi tiền tố hoặc bằng cách sử dụng regular expression.
- Nếu không có tiền tố nào trong một khối location thì chuỗi sau location sẽ được so khớp với phần đầu của URI được yêu cầu.
- Dấu
=
được sử dụng để so khớp chính xác location với URI được yêu cầu. - Dấu
~
được sử dụng để so sánh có phân biệt chữ hoa/thường với URI được yêu cầu. - Dấu
~*
được sử dụng để so sánh không phân biệt chữ hoa/thường với URI được yêu cầu. - Dấu
^~
được sử dụng để thực hiện so sánh chuỗi dài nhất của URI khớp với regular expression.
Cách Nginx chọn khối location
Tìm trên URI không phân biệt hoa/thường (~*
) rồi đến phân biệt hoa thường (~
) , không có regular expression trước.
- NGINX bắt đầu bằng việc tìm kiếm một kết hợp chính xác được chỉ định với location = /some/path/ và dừng ngay khi tìm được.
- Nếu không có khối location chính xác nào như vậy thì NGINX sẽ tiếp tục tìm kiếm chuỗi dài nhất trong URI (
^~
) khớp với regular expression. - Nếu location không có
^~
đi trước thì kết quả trùng khớp được lưu trữ tạm thời và tiến hành các bước sau. NGINX bây giờ chuyển tìm kiếm sang khối location chứa~
và~*
và chọn khối location đầu tiên phù hợp với URI và ngay lập tức được chọn để phục vụ yêu cầu.
Thí dụ về location
# location / sẽ khớp với tất cả URI nhưng sẽ được sử dụng như # phương sách cuối cùng nếu không tìm thấy kết quả phù hợp nào. location / { ... } # dấu = trong khối location buộc phải khớp chính xác với URI # và sau đó ngừng tìm kiếm thêm bất kỳ kết quả nào. # https://domain.com/images khớp # nhưng https://domain.com/images/index.html hoặc # https://domain.com/images/ không khớp location = /images { ... }
# Khối location sau sẽ khớp với bất kỳ URI bắt đầu bằng
# /images/ nhưng tiếp tục tìm kiếm khối cụ thể hơn của URI. location /images/ { ... } # ^~ trong khối location sau dẫn đến kết quả đối sánh regular # expression phân biệt chữ hoa chữ thường. # Do đó, URI /images hoặc /images/logo.png sẽ được so khớp # nhưng ngừng tìm kiếm ngay khi tìm thấy kết quả trùng khớp. location ^~ /images { ... } # ~* trong khối location tiếp theo khớp với bất kỳ URI nào # (không phân biệt hoa/thường) kết thúc bằng png, ico, gif, # jpg, jpeg, css hoặc js. location ~* .(png|ico|gif|jpg|jpeg|css|js)$ { ... } # ~ trong khối location sau dẫn đến kết quả đối sánh cụm từ có # phân biệt chữ hoa chữ thường nhưng không ngừng tìm kiếm đối # sánh tốt hơn. location ~ /images { ... } # ~* trong khối location sau dẫn đến kết quả đối sánh không # phân biệt hoa/thường nhưng việc tìm kiếm không dừng lại ở đây # để có kết quả phù hợp hơn. location ~* /images { ... }