J'utilise HAProxy pour l'équilibrage de charge et je souhaite uniquement que mon site prenne en charge https. Ainsi, j'aimerais rediriger toutes les demandes sur le port 80 vers le port 443.
Comment ferais-je ça?
Edit: Nous aimerions rediriger vers la même URL sur https, en préservant les paramètres de requête. Ainsi, http://foo.com/bar redirigerait vers https://foo.com/bar
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. La documentation pour la redirection http dans ALOHA HAProxy 7.0 mentionne même que " la syntaxe des deux directives est la même, cela dit, la redirection est maintenant considérée comme héritée et les configurations doivent passer au formulaire de redirection de requête http ". J'en déduis, sans être totalement sûr, que la même explication s'applique aux nouvelles versions de la version open source de HAProxy.Je n'ai pas assez de réputation pour commenter une réponse précédente, donc je poste une nouvelle réponse pour compléter la réponse de Jay Taylor. Fondamentalement, sa réponse fera la redirection, une redirection implicite cependant, ce qui signifie qu'elle émettra une 302 (redirection temporaire), mais puisque la question informe que l'ensemble du site Web sera servi en https, alors la redirection appropriée devrait être une 301 (redirection permanente ).
Cela semble un petit changement, mais l'impact peut être énorme en fonction du site Web, avec une redirection permanente, nous informons le navigateur qu'il ne devrait plus chercher la version http dès le début (en évitant les futures redirections) - un gain de temps pour https des sites. Cela aide également au référencement, mais ne divise pas le jus de vos liens.
la source
Pour rediriger tout le trafic:
redirect scheme https if !{ ssl_fc }
Pour rediriger une seule URL (en cas de frontend / backend multiple)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
la source
Selon http://parsnips.net/haproxy-http-to-https-redirect/, il devrait être aussi simple que de configurer votre haproxy.cfg pour qu'il contienne les éléments suivants.
la source
Le meilleur moyen garanti de rediriger tout http vers https est:
C'est un peu plus sophistiqué en utilisant le 'code 301', mais cela pourrait aussi bien faire savoir au client que c'est permanent. La partie «mode http» n'est pas essentielle avec la configuration par défaut, mais ne peut pas nuire. Si vous avez
mode tcp
dans la section par défaut (comme je l'ai fait), alors c'est nécessaire.la source
Une légère variation de la solution de user2966600 ...
Pour tout rediriger sauf une seule URL (en cas de frontend / backend multiple):
la source
Comme Jay Taylor l'a dit, HAProxy 1.5-dev a la
redirect scheme
directive de configuration, qui accomplit exactement ce dont vous avez besoin.Cependant, si vous ne parvenez pas à utiliser la version 1.5 et si vous êtes prêt à compiler HAProxy à partir des sources, j'ai rétroporté la
redirect scheme
fonctionnalité pour qu'elle fonctionne dans la version 1.4. Vous pouvez obtenir le correctif ici: http://marc.info/?l=haproxy&m=138456233430692&w=2la source
la source
Dans les versions plus récentes de HAProxy, il est recommandé d'utiliser
pour rediriger le trafic http vers https.
la source
Si vous souhaitez réécrire l'url, vous devez modifier l'hôte virtuel de votre site en ajoutant ces lignes:
Mais, si vous souhaitez rediriger toutes vos requêtes sur le port 80 vers le port 443 des serveurs web derrière le proxy, vous pouvez essayer cet exemple de conf sur votre haproxy.cfg:
J'espère que cela vous aidera
la source
Pourquoi n'utilisez-vous pas les ACL pour distinguer le trafic? au sommet de ma tête:
Cela s'ajoute à ce que Matthew Brown a répondu.
Consultez les documents ha , recherchez des éléments tels que hdr_dom et ci-dessous pour trouver plus d'options ACL. Il y a beaucoup de choix.
la source
Ajoutez ceci dans la configuration du frontend HAProxy:
la source
Peut être fait comme ça -
Tout trafic atteignant http sera redirigé vers https
la source
instruction de redirection est héritée
utilisez plutôt la redirection de requête http
la source
Simplement:
la source