NGINX $request_uri vs $uri

后端 未结 2 1230
囚心锁ツ
囚心锁ツ 2021-01-31 08:03

How do you determine when to use $request_uri vs $uri?

According to NGINX documentation, $request_uri is the original request (for

相关标签:
2条回答
  • 2021-01-31 08:32

    $uri is not equivalent to $request_uri.

    The $uri variable is set to the URI that nginx is currently processing - but it is also subject to normalisation, including:

    • Removal of the ? and query string
    • Consecutive / characters are replace by a single /
    • URL encoded characters are decoded

    The value of $request_uri is always the original URI and is not subject to any of the above normalisations.

    Most of the time you would use $uri, because it is normalised. Using $request_uri in the wrong place can cause URL encoded characters to become doubly encoded.

    Use $request_uri in a map directive, if you need to match the URI and its query string.

    0 讨论(0)
  • 2021-01-31 08:39

    Another difference about $uri and $request_uri in proxy_cache_key is $request_uri will include anchor tags part, but $uri$is_args$args will ignore it

    Do a curl operation : curl -I static.io/hello.htm?id=1#/favor/goods :

    proxy_cache_key $scheme://$host$uri$is_args$args; => Cache KEY: http://static.io/hello.htm?id=1
    proxy_cache_key $scheme://$host$request_uri; => Cache KEY: http://static.io/hello.htm?id=1#/favor/goods
    

    Nginx Document: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_uri

    • $request_uri : full original request URI (with arguments)
    • $uri: current URI in request, normalized The value of $uri may change during request processing, e.g. when doing internal redirects, or when using index files.

    Proxy Cache key: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key

    0 讨论(0)
提交回复
热议问题