Capire nginx $request_uri
Poiché noi stessi ci siamo imbattuti spesso in questa domanda, ho deciso di scrivere un breve articolo sulla gestione di $request_uri di nginx. Secondo la documentazione ngx_http_core_module, la variabile è definita come:
full original request URI (with arguments) (URI della richiesta originale completa (con argomenti)
Esempi pratici di $request_uri
Anche se questo sembra chiaro a prima vista, non è ben definito. Abbiamo fatto alcune prove e possiamo spiegarlo meglio con esempi usando casi reali:
- Per l’URL:
https://www.webhosting24.it/capire-nginx-request_uri/
la variable nginx $request_uri è popolate come segue:
/capire-nginx-request_uri/ - Per l’URL:
https://console.webhosting24.com/cart.php?a=add&domain=register
la variabile nginx $request_uri è popolata come segue:
/cart.php?a=add&domain=register - Per l’URL:
https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2
la variabile nginx $request_uri verrebbe comunque popolata solo come segue:
/Protocols/rfc2616/rfc2616-sec3.html
poiché #sec3.2 è solo un frammento/commento/ancora e non fa parte dell’URI.
In poche parole, $request_uri contiene il percorso completo (/capire-nginx-request_uri/ nell’esempio 1 o /cart.php nell’esempio 2 sopra) e qualsiasi stringa di argomento presente (“?a=add&domain=register” nell’esempio 2 sopra), ma esclude lo schema (https:// e la porta (implicita 443) in entrambi gli esempi sopra) come definito da RFC per l’URL:
http_URL = "http(s):" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Uniform Resource Identifiers
(Identificatori di risorse uniformi)
Negli RFC gli URI hanno molti nomi: indirizzi WWW, Universal Document Identifier, Universal Resource Identifier e infine la combinazione di Uniform Resource Locator (URL). Per quanto riguarda HTTP, gli Uniform Resource Identifier sono semplicemente stringhe formattate che identificano, tramite nome, posizione o qualsiasi altra caratteristica, una risorsa.
Ulteriori fonti:
https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2
http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_uri