
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 ;-).