
Ich habe eine solche Konfiguration in meiner haproxy.cfg
Datei:
acl is_api url_beg -i /api
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend api if is_api
use_backend nginx-frontend if is_frontend
Mein Ziel:
Wenn Sie auf klicken, subdomain.mydomain.com
werden Dateien bereitgestellt, nginx
es sei denn, sie path
beginnen mit /api
( subdomain.mydomain.com/api/*
) – dann sollte mein api
Backend verwendet werden.
Wenn ich den Dienst nun mit der aktuellen Konfiguration neu starte haproxy
, gibt es zwei Szenarien:
Ich gehe zu
subdomain.mydomain.com
– es funktioniertnginx-frontend
– großartig. Dann gehe ich zusubdomain.mydomain.com/api
– 404 (nginx
wurde verwendet).Ich gehe zu
subdomain.mydomain.com/api
seinem Serverapi
– großartig. Dann gehe ich zusubdomain.mydomain.com
– 404 (dasapi
Backend wurde verwendet).
Abhängig von der Reihenfolge meines ersten Besuchs auf der einen oder anderen Seite werden alle Anfragen an meine Subdomäne dem einen oder anderen Backend zugewiesen ...
Ich bin ein absoluter Neuling. Es tut mir leid, wenn das eine dumme Frage ist.
Irgendeine Hilfe?
Antwort1
OK, ich habe einen Weg gefunden ... aber in nginx
der Konfiguration ( /etc/nginx/sites-enabled/default
):
server {
listen 8080 default_server;
listen [::]:8080 default_server ipv6only=on;
server_name subdomain.mydomain.com;
location /api {
proxy_pass http://127.0.0.1:4001;
}
location / {
try_files $uri $uri/ =404;
}
}
und in haproxy.cfg
der Datei:
backend nginx
server nginx-1 127.0.0.1:8080 check
frontend all
bind *:80
mode http
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend nginx if is_frontend
# other frontends...
Wenn jemand kommentieren könnte, ob das ein guter Ansatz ist, wäre ich dankbar!
Antwort2
Es gibt 404 wegen url_beg
. Dies verwendet die vollständige URL und nicht den nachfolgenden Teil nach der Domäne, d. h. es gelangt "http..."
inhttp://subdomain.mydomain.com/api
url_beg Gibt true zurück, wenn die URL mit einer der Zeichenfolgen beginnt. Damit kann überprüft werden, ob eine URL mit einem Schrägstrich oder mit einem Protokollschema beginnt.
Verwenden Sie path_beg
stattdessen.
frontend fe
...
acl is_api path_beg -i /api
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend api if is_api
use_backend nginx-frontend if is_frontend !is_api