Tôi gặp sự cố khi đối sánh một từ cụ thể trong biến nginx $ request_body. Tôi muốn để proxy vượt qua nếu yêu cầu cơ thể có một từ đặc biệt trong đó,nginx khớp từ cụ thể tại vị trí
Vì vậy, cách tiếp cận của tôi là thế này:
location ~ \.php$ {
if ($request_body ~* (.*)) {
proxy_pass http://test.proxy;
break;
}
# other case...
}
này phù hợp với tất cả mọi thứ và nếu công trình tuyên bố, nhưng nếu tôi thay đổi regexp theo bất kỳ cách nào, tôi không thể bị trúng đòn.
Vì vậy, câu hỏi của tôi bây giờ là:
Làm thế nào để tôi cần phải xác định regexp trong nginx một cách chính xác để phù hợp với "mục tiêu" cho ví dụ?
Cảm ơn trước!
Không giữ hơi thở của bạn. Bạn có thể chuyển đổi http://wiki.nginx.org/HttpCoreModule#client_body_in_single_buffer nếu nó được tính. Nhưng tôi không nghĩ rằng bạn có thể phù hợp với yêu cầu cơ thể – rzab
Tôi bây giờ hiểu rằng vấn đề không phải là trong regexp, nhưng $ request_body dường như trống rỗng vào thời điểm này, tôi thậm chí đã thử các mô-đun echo cung cấp một phương pháp read_request_body, nhưng vẫn còn trống: ( – sharpner
Chính xác) http://wiki.nginx.org/EmbeddedPerlModule gợi ý doc rằng $ request_body có sẵn khi nginx giữ cơ thể trong bộ nhớ như trái ngược với trong một tệp tạm thời. "Nó là cần thiết để hạn chế [ body] size với sự trợ giúp của client_max_body_size và gán đủ kích thước cho buffer bằng cách sử dụng client_body_buffer_size. "Tôi đoán nó được đề nghị đặt client_max_body_size thành giá trị client_body_buffer_size thấp hơn giá trị client_body_buffer_size" – rzab