NGINX 在位置获取请求的 http 版本

NGINX get http version of request in location

在 nginx 配置中,如果请求的 http 版本不存在或小于 1,我想 return 401。 类似下面的内容:-

location / {
   if ($requestHttpVersion = '' OR $requestHttpVersion != 1.1){
    return 401;
    }
}

我怎样才能做到这一点?

你应该检查一个 $request built-in nginx 变量,它包含完整的原始请求行,通常类似于 GET <URI> HTTP/<version>:

if ($request !~ \sHTTP/1\.1$) {
    return 401;
}

这行得通,我相信这是更好的解决方案

http{
    map $server_protocol $httpVersion {
            default "invalid";
            HTTP/1.1 "valid";
            HTTP/1.0 "valid";
            HTTP/2.0 "valid";
    }

    location / {
        if ( $httpVersion = "invalid" )
        {
            return 401;
        }
        proxy_pass ....
        ...
    }
}