J'ai un serveur qui reçoit du trafic d'un équilibreur de charge de terminaison SSL, auquel cas il arrive en HTTP sur le port 80 avec a http_x_forwarded_proto
= "https"
Je veux une règle mod_rewrite qui autorise uniquement le trafic HTTPS direct ou le trafic HTTPS transféré.
J'ai ceci jusqu'à présent:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
mais je reçois
RewriteCond: délimiteurs de drapeau incorrects
Erreur.
Que dois-je corriger pour que cela fonctionne, et est-ce la meilleure approche?
apache-2.2
mod-rewrite
Yarin
la source
la source
Si l'équilibreur de charge utilise toujours SSL lors de la communication avec le serveur, vous devez omettre la première vérification car elle sera toujours vraie. (Si vous déchargez SSL sur l'équilibreur de charge, la première ligne est toujours vraie, sauf si quelqu'un parvient à frapper directement votre serveur en utilisant SSL, auquel cas ce serait faux et n'essayez pas de rediriger car
X-Forwarded-Proto
il manquerait.)Le code que j'utilise car nous communiquons toujours via SSL entre l'ELB et le serveur Web:
la source