แม้ว่าคุณจะสามารถทำสิ่งนี้ได้if
แต่สิ่งนี้ไม่ได้รับการสนับสนุนจากเอกสาร Nginxเนื่องจากif
ไม่สามารถทำงานได้ดีกับคำสั่งอื่น ๆ ตัวอย่างเช่นสมมติว่า GET ควรเปิดให้ทุกคนในขณะที่ POST ใช้สำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้องเท่านั้นโดยใช้ HTTP Basic Auth ที่จะต้องif
รวมกับauth_basic
ซึ่งไม่ทำงานอย่างถูกต้อง
นี่คือทางเลือกที่ใช้งานไม่if
ได้ เคล็ดลับคือการใช้ "GET" และ "POST" เป็นส่วนหนึ่งของชื่ออัปสตรีมดังนั้นสิ่งเหล่านี้สามารถแก้ไขได้ด้วยการแทนที่ตัวแปร:
http {
upstream other_GET {
server ...;
}
upstream other_POST {
server ...;
}
server {
location /service {
proxy_pass http://other_$request_method;
}
}
}
หากต้องการรวมสิ่งนี้กับ HTTP Basic Auth สำหรับทุกสิ่งยกเว้น GET เพียงเพิ่มlimit_except
บล็อก:
...
location /service {
proxy_pass http://other_$request_method;
limit_except GET {
auth_basic ...;
}
}
...