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?
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...
}
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...
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