Cómo hacer redireccionamiento nginx basado en el valor de un encabezado?


Estoy alojando un sitio web detrás de un proxy de Cloudflare, lo que significa que todas las solicitudes a mi servidor están sobre el puerto 80, a pesar de que Cloudflare maneja el tráfico HTTP (puerto 80) y HTTPS (puerto 443).

Para distinguir entre los dos, Cloudflare incluye un encabezado X-Forwarded-Proto que se establece en "http" o "https" según la conexión del usuario.

Me gustaría redirigir cada solicitud con un encabezado X-Forwarded-Proto: http a la versión SSL de mi sitio. ¿Cómo puedo lograr esto con un nginx configuración?

Author: Kevin Burke, 2014-10-06

2 answers

La forma más sencilla de hacerlo es con una directiva if. Si hay una mejor manera, por favor hágamelo saber, ya que la gente dice que la directiva if es ineficiente. Nginx convierte guiones en guiones bajos en encabezados, por lo que X-Forwarded-Proto se convierte en $http_x_forwarded_proto.

server {
    listen 80;
    server_name example.com; # Replace this with your own hostname
    if ($http_x_forwarded_proto = "http") {
        return 301 https://example.com$request_uri;
    }

    # Rest of configuration goes here... 
}
 32
Author: Kevin Burke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-06 19:48:20

Intente usar la directiva map: http://nginx.org/en/docs/http/ngx_http_map_module.html#map

Algo así...

map $http_x_forwarded_proto     $php_backend {
    "https"          "https_php_backend named loc";
    default        "default_php_backend named loc";
}
server{
    location / {
         proxy_pass http://$php_backend;
    }
}

Este código es abstracto, pero puedes probar tht way...

 3
Author: user989840,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-19 13:31:31