nginx referer模块

nginx referer模块

配置说明

| Syntax: | **valid_referers** none | blocked | server_names | *string* ...; |
| :------- | ------------------------------------------------------------ |
| Default: | — |
| Context: | server, location |

none 不带referer请求头,invalid_referer = “”,不支持单独只配置 none

blocked 包含所有不是以 http(s)/ 开头的referer请求头(包含 “referer:”),invalid_referer = “”,不支持单独只配置 blocked

server_names referer请求头包含当前配置的 server name 配置的其中一个,invalid_referer = “”

**任意字符串 ***范匹配 server name 或者 uri 前缀,可以配置在 server name 开头和结尾,invalid_referer = “”,注意:不允许配置重复的 uri 前缀(存在包含的情况)。例如

www.test.com``*.test.com``www.test.*``*.test.*

正则表达式 第一个符号应该是“~”。 需要注意的是,表达式将与“http://”或“https://”之后开始的文本进行匹配,匹配时 invalid_referer = “”。需要注意字符转义。

valid_referers ~\.baidu\.;

注意点:

(1)referer 长度需要大于等于 sizeof(“http://i.ru”) - 1 (nginx referer模块对处理的referer请求头有长度限制,未达到长度的一致将 invalid_referer 置为1)

(2)valid_referers 不支持只配置 none 或者 blocked ,加载配置时nginx报错

(3)不支持重复覆盖配置,加载配置时nginx报错,例如

valid_referers *.so.com *.so.com/aa;

(4)配置不支持 http(s)/ ,配置无效,例如

valid_referers http:``//www.so.com;

(5)配置 blocked 的时候区分 “referer:” 和 “referer:aaa” 的情况。通过set_by_lua处理这部分逻辑

set_by_lua_block $nilRef 
{
    local ngx_var = ngx.var;
    local ngx_req_set_header = ngx.req.set_header;
    if ngx_var.http_referer == "" then
        ngx_req_set_header("referer", nil);
    end
}

你可能感兴趣的:(nginx,nginx,lua,运维,referer)