Nginx:如果标头不存在或错误,则拒绝请求

Nginx:如果标头不存在或错误,则拒绝请求,nginx,Nginx,如果我有头:X_HEADER1和X_HEADER2,我想拒绝所有请求,如果这些头中的任何一个没有设置或没有包含正确的值。最好的方法是什么 多谢您可以在位置块之前或中使用两个IF语句来检查标题,然后返回403错误代码(如果存在)。或者,您可以使用这些IF语句重写到特定位置块并拒绝该位置中的所有内容: if ($http_x_custom_header) { return 403; } 参考资料: 为每个评论/请求添加更多详细信息: if ($http_x_custom_header)

如果我有头:X_HEADER1和X_HEADER2,我想拒绝所有请求,如果这些头中的任何一个没有设置或没有包含正确的值。最好的方法是什么


多谢您可以在位置块之前或中使用两个IF语句来检查标题,然后返回403错误代码(如果存在)。或者,您可以使用这些IF语句重写到特定位置块并拒绝该位置中的所有内容:

if ($http_x_custom_header) {
    return 403;
}
参考资料:

为每个评论/请求添加更多详细信息:

if ($http_x_custom_header) {
    return 405;
}
查看标题是否存在

如果要检查是否存在正确的值,则首先需要将正确的值映射到变量

map $http_x_header $is_ok {
    default "0";
    Value1  "1";
    Value2  "1";
    Value3  "1";
}

if ($is_ok) {
    return 405; 
}
首先将标题值映射到其是否正常,然后检查变量是否正常。


编辑:删除了映射块后的分号,因为这会导致错误。

如果希望仅允许基于放置在响应标头内的一些有效标头值的HTTP请求,一种可能的方法是使用工具应用此类限制

以下示例仅允许访问具有header1值“name1”或“name2”的请求:

    header_filter_by_lua '
    local val = ngx.header["header1"]
    if val then
            if (val ~= "name1") and (val ~= "name2") then
                return ngx.exit(400)
            end
    end
    ';

为了解决一个简单的问题,我做了很多研究:仅当请求头中有特定令牌时才允许代理传递。我在这里尝试了所有的答案,但都没有达到我喜欢的效果。我的最终解决办法是:

location /api {
    proxy_http_version 1.1;

    if ($http_authorization != "Bearer 1234") {
        return 401;
    }

    proxy_pass http://app:3000/;
}
参考文献:


+1,如果你能举一些例子,那将非常感谢,:)。希望这个例子有帮助。这些链接似乎已经过时了。这些似乎是更新的替代方案。