我们可以从nginx的某个位置跳转到另一个位置吗?

我正试图达到这样的事情:

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中做到这一点? 还是有更好的方法来处理它?

首先要记住, 如果是邪恶的,并且避免把除了rewritereturn东西放在里面; 解决方法build议使用error_pagereturn更改用于处理请求的位置。

正如已经在这里回答的那样,在nginx中重用位置设置的方法是将它们移动到一个单独的文件并将该文件include在您的location块中。

结合这些解决scheme的结果是:

/etc/nginx/validation_code.conf

 # a lot of validation code here 

主要configuration

 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