我正试图达到这样的事情:
location /location1/{ if ($arg_api_key = a_valid_api_key) { proxy_pass http://localhost:8080; } # else jump to location2 } location /location2/{ # a lot of validation code here }
我们如何在nginx中做到这一点? 还是有更好的方法来处理它?
首先要记住, 如果是邪恶的,并且避免把除了rewrite或return东西放在里面; 解决方法build议使用error_page并return更改用于处理请求的位置。
正如已经在这里回答的那样,在nginx中重用位置设置的方法是将它们移动到一个单独的文件并将该文件include在您的location块中。
结合这些解决scheme的结果是:
# a lot of validation code here
location /location1/ { error_page 418 = @proxy; recursive_error_pages on; if ($arg_api_key = a_valid_api_key) { return 418; } include /etc/nginx/validation_code.conf; } location /location2/ { include /etc/nginx/validation_code.conf; } location @proxy { proxy_pass http://localhost:8080; }
您也可以考虑使用指定位置作为validation码,而不是创build单独的文件; 然而,你需要一些技巧来切换到指定的位置 – 例如,另一个error_page / return对,或类似的东西
try_files /nonexistent @validation