加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

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

发布时间:2020-12-13 21:08:45 所属栏目: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中做到这一点?还是有

我正在努力实现这样的目标:

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

最佳答案
首先,请记住if is evil并避免在重写之外放置任何内容或返回内部;解决方法建议使用error_page并返回更改用于处理请求的位置.

在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读