Win*_*hen 3 configuration 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
}
Run Code Online (Sandbox Code Playgroud)
我们如何在 nginx 中做到这一点?或者有更好的处理方法吗?
首先,请记住if 是邪恶的,避免将任何东西放在里面rewrite
或之外;建议使用和更改用于处理请求的位置的解决方法。return
if
error_page
return
正如这里已经回答的那样,在 nginx 中重用位置设置的方法是将它们移动到一个单独的文件和块中的include
那个文件location
。
结合这些解决方案会导致:
# a lot of validation code here
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
您还可以考虑为验证代码使用命名位置,而不是创建单独的文件;但是,您需要一些技巧来切换到该命名位置——例如,另一个error_page
/return
对,或类似的
try_files /nonexistent @validation
Run Code Online (Sandbox Code Playgroud)