J'héberge un site Web derrière un proxy Cloudflare, ce qui signifie que toutes les demandes à mon serveur sont sur le port 80, même si Cloudflare gère le trafic HTTP (port 80) et HTTPS (port 443).
Pour distinguer les deux, Cloudflare inclut un X-Forwarded-Proto
en-tête défini sur "http" ou "https" en fonction de la connexion de l'utilisateur.
Je souhaite rediriger chaque demande avec un X-Forwarded-Proto: http
en-tête vers la version SSL de mon site. Comment puis-je y parvenir avec une configuration nginx?
La façon la plus simple de le faire est d'utiliser une directive if
. S'il existe un meilleur moyen, faites-le moi savoir, car les gens disent que la directive if
est inefficace. Nginx convertit les tirets en traits de soulignement dans les en-têtes, donc X-Forwarded-Proto
devient $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...
}
Essayez d'utiliser la directive map: http://nginx.org/en/docs/http/ngx_http_map_module.html#map
Quelque chose comme ca...
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;
}
}
Ce code est abstrait, mais vous pouvez essayer de cette façon ...