Ich möchte von einem Unterordner aus auf meinen API-Server (der auf Node läuft) zugreifen /api/
und alle anderen Anfragen an meine Angular-App senden können.
Derzeit läuft die API auf einer anderen Subdomäne und meine Konfiguration sieht folgendermaßen aus:
server {
listen 80;
server_name appapi.site.com;
location / {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
server {
listen 80;
server_name app.site.com;
index index.html;
root /var/www/html/app.site.com/;
location / {
try_files $uri /$uri /index.html;
}
}
Ich habe versucht, den Speicherort für die API von zu ändern, kann dann aber meine App nicht erreichen /api/
./
Ich möchte keine statischen Dateien vom Knoten bereitstellen, schlagen Sie das also bitte nicht vor.
Antwort1
Ich gehe davon aus, dass Sie Folgendes bereitstellen möchten: http://app.site.com/api/xxx
Durch das Hinzufügen eines zweiten Standortblocks für Ihren /api/
Pfad werden alle URIs, die mit beginnen, /api/
an den Proxy und alles andere an Ihre Angular-App gesendet.
server {
listen 80;
server_name app.site.com;
index index.html;
root /var/www/html/app.site.com/;
location / {
try_files $uri /$uri /index.html;
}
location /api/ {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
}
Die Proxy-Konfiguration entfernt /api/ nicht aus dem Pfad und die URI wird Ihrem API-Server vollständig präsentiert. Dies wird durch den abschließenden Schrägstrich in gesteuert proxy_pass http://localhost:3000/
. Siehehttps://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-urlfür weitere Informationen hierzu.