it-swarm.com.de

HAProxy-Umleitung von http zu https (ssl)

Ich verwende HAProxy für den Lastausgleich und möchte nur, dass meine Website https unterstützt. Daher möchte ich alle Anforderungen an Port 80 an Port 443 umleiten. 

Wie würde ich das machen?

Bearbeiten: Wir möchten auf https dieselbe URL umleiten, wobei die Abfrageparameter erhalten bleiben. Daher würde http://foo.com/bar zu https://foo.com/bar umleiten.

79
Jon Chu

Ich habe festgestellt, dass dies die größte Hilfe ist :

Verwenden Sie HAProxy 1.5-dev13 oder neuer und fügen Sie der Frontend-Konfiguration einfach die folgende Zeile hinzu:

redirect scheme https code 301 if !{ ssl_fc }
118
Jay Taylor

Ich habe nicht genug Ruf, um eine vorherige Antwort zu kommentieren. Deshalb werde ich eine neue Antwort posten, um die Antwort von Jay Taylor zu ergänzen. Im Wesentlichen wird seine Antwort die Weiterleitung durchführen, eine implizite Weiterleitung, was bedeutet, dass eine 302 (temporäre Weiterleitung) ausgegeben wird. Da die Frage jedoch darauf hinweist, dass die gesamte Website als https bereitgestellt wird, sollte die entsprechende Weiterleitung eine 301 (permanente Weiterleitung) sein ).

redirect scheme https code 301 if !{ ssl_fc }

Es scheint eine kleine Änderung zu sein, die Auswirkungen können jedoch je nach Website sehr groß sein. Mit einer permanenten Weiterleitung informieren wir den Browser, dass er von Anfang an nicht mehr nach der http-Version suchen sollte (zukünftige Weiterleitungen vermeiden) - eine Zeitersparnis für https Websites. Es hilft auch bei SEO, teilt aber nicht den Saft Ihrer Links.

61
Marcos Abreu

So leiten Sie den gesamten Datenverkehr um:

redirect scheme https if !{ ssl_fc }

So leiten Sie eine einzelne URL um (bei mehreren Frontends/Backends)

redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }

37
user2966600

Gemäß http://parsnips.net/haproxy-http-to-https-redirect/ sollte es so einfach sein wie das Konfigurieren Ihrer haproxy.cfg, um Folgendes zu enthalten.

#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com

#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
14
Matthew Brown

Der beste garantierte Weg, alles http zu https umzuleiten, ist:

frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

Dies ist ein wenig schicker mit dem Code 301, kann aber auch den Kunden wissen lassen, dass es permanent ist. Der Teil "mode http" ist bei der Standardkonfiguration nicht unbedingt erforderlich, kann jedoch nicht schaden. Wenn Sie mode tcp in der Standardeinstellung haben (wie ich es getan habe), ist es notwendig.

10
Maitreya

Eine kleine Variante der Lösung von user2966600 ...

So leiten Sie alle außer eine einzige URL (bei mehreren Frontends/Backends) um:

redirect scheme https if !{ hdr(Host) -i www.mydomain.com } !{ ssl_fc }
9
Josh Currier

Wie Jay Taylor bereits sagte, verfügt HAProxy 1.5-dev über die Konfigurationsanweisung redirect scheme, die genau das ausführt, was Sie benötigen.

Wenn Sie jedoch nicht 1.5 verwenden können und HAProxy aus dem Quellcode kompilieren können, habe ich die redirect scheme-Funktionalität zurückportiert, sodass sie in 1.4 funktioniert. Den Patch erhalten Sie hier: http://marc.info/?l=haproxy&m=138456233430692&w=2

4
rusty
frontend unsecured *:80
    mode http
    redirect location https://foo.bar.com
2
sanyi

Wenn Sie die URL neu schreiben möchten, müssen Sie den virtuellen Host der Site ändern, indem Sie folgende Zeilen hinzufügen:

### Enabling mod_rewrite
Options FollowSymLinks
RewriteEngine on

### Rewrite http:// => https://
RewriteCond %{SERVER_PORT} 80$
RewriteRule ^(.*)$ https://%{HTTP_Host}$1 [R=301,NC,L]

Wenn Sie jedoch alle Ihre Anforderungen an Port 80 an Port 443 der Webserver hinter dem Proxy umleiten möchten, können Sie dieses example conf auf Ihrer haproxy.cfg versuchen:

##########
# Global #
##########
global
    maxconn 100
    spread-checks 50
    daemon
    nbproc 4

############
# Defaults #
############
defaults
    maxconn 100
    log global
    mode http
    option dontlognull
    retries 3
    contimeout 60000
    clitimeout 60000
    srvtimeout 60000

#####################
# Frontend: HTTP-IN #
#####################
frontend http-in
    bind *:80
    option logasap
    option httplog
    option httpclose
    log global
    default_backend sslwebserver

#########################
# Backend: SSLWEBSERVER #
#########################
backend sslwebserver
    option httplog
    option forwardfor
    option abortonclose
    log global
    balance roundrobin
    # Server List
    server sslws01 webserver01:443 check
    server sslws02 webserver02:443 check
    server sslws03 webserver03:443 check

Ich hoffe das hilft dir

0
Flat

Fügen Sie dies in die HAProxy-Frontend-Konfiguration ein:

acl http      ssl_fc,not
http-request redirect scheme https if http

HAProxy - Umleiten von HTTP-Anforderungen

0
Nick Tsai

Warum verwenden Sie keine ACLs, um den Verkehr zu unterscheiden? auf meinem Kopf:

acl go_sslwebserver path bar
use_backend sslwebserver if go_sslwebserver

Das geht über das, was Matthew Brown antwortete.

In den ha-Dokumenten können Sie nach Optionen wie hdr_dom und unten suchen, um weitere ACL-Optionen zu finden. Es gibt viele Möglichkeiten.

0
Glenn Plas