Mặc dù bạn có thể đạt được điều này với if
, nhưng điều này thường không được khuyến khích bởi tài liệu Nginx , vì if
không chơi tốt với các chỉ thị khác. Ví dụ: giả sử rằng GET phải được mở cho tất cả mọi người, trong khi POST chỉ dành cho người dùng được xác thực, sử dụng HTTP Basic Auth. Điều đó sẽ cần if
phải được kết hợp với auth_basic
, mà không hoạt động đúng.
Đây là một thay thế mà làm việc mà không có if
. Mẹo nhỏ là sử dụng "GET" và "POST" như một phần của tên ngược dòng, vì vậy chúng có thể được giải quyết bằng cách thay thế biến:
http {
upstream other_GET {
server ...;
}
upstream other_POST {
server ...;
}
server {
location /service {
proxy_pass http://other_$request_method;
}
}
}
Để kết hợp điều này với HTTP Basic Auth cho mọi thứ trừ GET, chỉ cần thêm một limit_except
khối:
...
location /service {
proxy_pass http://other_$request_method;
limit_except GET {
auth_basic ...;
}
}
...