Unterstützt HAProxy mehrere Subdomains innerhalb eines Servers?

Unterstützt HAProxy mehrere Subdomains innerhalb eines Servers?

Ich habe derzeit eine Struktur mit einem Apache 2-Server mit mehreren Subdomänen. Wie im folgenden Beispiel:

<VirtualHost *:80>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www/main
</VirtualHost>

<VirtualHost *:80>
 ServerName subdomain-1.example.com
 ServerAlias subdomain-1.example.com
 DocumentRoot /var/www/sbd1
</VirtualHost>

<VirtualHost *:80>
 ServerName subdomain-2.example.com
 ServerAlias subdomain-2.example.com
 DocumentRoot /var/www/sbd2
</VirtualHost>

Ich denke darüber nach, diesen Server zu duplizieren und einfach einen neuen mit HAProxy zu erstellen, um den Lastenausgleich durchzuführen.

Leitet HAProxy alle Anfragen an den untergeordneten Server mit derselben IP weiter oder benötige ich für jede Subdomäne einen bestimmten Server mit einer bestimmten IP?

Antwort1

Sie müssen Backends für jede Subdomäne konfigurieren oder möglicherweise ein Standard-Backend verwenden, wenn die meisten Anfragen einen bestimmten Server erreichen sollen. Wenn Sie mehrere Backends konfigurieren, hindert nichts sie daran, auf denselben Webserver zu verweisen.

Antwort2

Ich fürchte, das ist nicht wirklich das, was Sie wollen/brauchen. HAproxy ist ein großartiges Tool, das als Proxy* fungiert, aber der Anwendungsfall, den Sie als Beispiel angeben, bezieht sich nicht auf einen Proxy, sondern auf einen normalen HTTP-Server*. Falls Sie Apache ersetzen möchten, könnte die Option z. B. nginx sein.


Proxy- Anwendung, die die Anfrage überprüft und / oder Unteranfragen durchführt, um den Inhalt bereitzustellen

HTTP-Server- Anwendung, die den Inhalt bereitstellt


Es ist möglich, HAproxy als Frontend und nginx als Backend zu verwenden, sogar auf demselben Knoten. Die Konfiguration von HAproxy würde ungefähr so ​​aussehen (ohne https, wie angefordert):

frontend http_front
    maxconn 1000
    mode http
    option http-server-close
    option forwardfor
    bind *:80

    acl top_domain hdr(host) -m str www.example.com
    acl top_domain hdr(host) -m str example.com

    acl subdom1 hdr(host) -m str www.subdomain-1.example.com
    acl subdom1 hdr(host) -m str subdomain-1.example.com

    acl subdom2 hdr(host) -m str www.subdomain-2.example.com
    acl subdom2 hdr(host) -m str subdomain-2.example.com


    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto http if !{ ssl_fc }

    use_backend local if subdom1
#   ...
    default_backend local

backend local
    fullconn 1000
    mode http
    timeout http-keep-alive 3000
    server local1 127.0.0.1:8080 check maxconn 100

Es kann mehrere Backends geben, die auf verschiedenen Servern enden … Ich bin einfach dem Beispiel gefolgt ;-).

verwandte Informationen