Nginx - Node-API im Unterordner und statische Dateien auf /

Nginx - Node-API im Unterordner und statische Dateien auf /

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/xxxDurch 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.

verwandte Informationen