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 campo Host. Por tanto, puede incluir el puerto de conexión.

  • $server_name es el valor de la directiva server_name que provocó la elección del bloque server.

  • $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 campo Host o, si no, el valor de la variable $server_name. A diferencia de $http_host jamás incluirá el puerto de conexión.