我正在努力实现这样的目标:
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
}
最佳答案
首先,请记住if is evil并避免在重写之外放置任何内容或返回内部;解决方法建议使用error_page并返回更改用于处理请求的位置.
原文链接:https://www.f2er.com/nginx/435097.html在already answered here中,在Nginx中重用位置设置的方法是将它们移动到单独的文件中,并将该文件包含在位置块中.
结合这些解决方案可以:
/etc/Nginx/validation_code.conf
# 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;
}
您也可以考虑使用命名位置作为验证代码,而不是创建单独的文件;但是,您需要一些技巧来切换到该命名位置 – 例如,另一个error_page / return对,或类似的东西
try_files /nonexistent @validation