7.2.2.2.1. Variables predefinidas¶
nginx tiene predefinidas un gran número de variables. Aquí trataremos solamente algunas de las más recurrentes:
7.2.2.2.1.1. Destacadas¶
- $args
Contiene los argumentos pasados a través de la URL. Es decir, si la petición fue:
GET /form.php?name=Pepe&age=21
el valor de esta variable será name=Pepe&edad=21
- $arg_xxx
Contiene el valor del argumento xxx pasado a través de la URL. En el caso de la petición anterior, $arg_age valdría 21.
- $cookie_xxx
Contiene el valor de la cookie «xxx».
- $host
Nombre que se usa para conectar al servidor. Véase el siguiente apartado para más información.
- $https
Vale on si la petición se hizo a través de HTTPs.
- $http_xxx
Valor del campo de cabecera xxx.
- $invalid_referer
Vale 1 si el
Referer
de la petición es inválido, y la cadena vacía si es correcto. Para definir la validez se usa la directiva valid_referers. Por ejemplo:server { # Configuración... location ~ \.(:?jpe?g|png|gif)$ { valid_referers server_names; if ($invalid_referer) { return 403; } } }
El código impide que se hagan enlaces calientes desde otros sitios web a las imágenes de nuestro sitio.
- $is_args
Vale ? si la línea de petición contenía argumentos y la cadena vacía si no los contenía. Es útil en redirecciones. Por ejemplo, si se quiere redirigir una petición no segura a segura:
return 301 https://$host$uri$is_args$args;
- $remote_addr
Dirección IP del cliente original. Tal dirección, si media un proxy no tiene por qué coincidir con la de la máquina que hace conexión con el servidor (véase cliente original más adelante). Para obtener la IP de la máquina que hace conexión directa existe realip_remote_addr.
- $request
Línea original de petición.
- $request_method
Método de petición.
- $request_uri
Línea original de petición, incluyendo argumentos.
- $uri
URL de la petición modificada por las redirecciones internas operadas por nginx.
- $scheme
Protocolo. Puede valer http o https.
- $server_name
Nombre del servidor
7.2.2.2.1.2. $host
, $http_host
y $server_name
¶
Las tres variables refieren el nombre del servidor con que puede ser algo confuso:
$http_host
es, tal cual, el valor del campoHost
. Por tanto, puede incluir el puerto de conexión.$server_name
es el valor de la directivaserver_name
que provocó la elección del bloqueserver
.$host
es el nombre como aparece en la primera línea de la petición (la que incluye el método) o, si no aparece ahí, el nombre que aparece en el campoHost
o, si no, el valor de la variable$server_name
. A diferencia de$http_host
jamás incluirá el puerto de conexión.