Nginx - 子資料夾中的節點 api 和 / 上的靜態文件

Nginx - 子資料夾中的節點 api 和 / 上的靜態文件

我希望能夠從子資料夾存取我的 api 伺服器(在節點上運行)/api/並將所有其他請求發送到我的角度應用程式。

目前 api 正在不同的子網域上運行,我的配置如下所示——

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;
  }
}

我嘗試將 api 的位置更改為/api/而不是,/但隨後我無法存取我的應用程式。

不想從節點提供靜態文件,所以請不要建議這樣做。

答案1

我假設您想要http://app.site.com/api/xxx為您的路徑添加第二個位置區塊,將發送以代理開頭的/api/任何 URI ,並將其他任何內容傳送到您的角度應用程式。/api/

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;
  }
}

代理配置不會從路徑中刪除 /api/,且 URI 會完整呈現給您的 api 伺服器。這是由 中的尾部斜線控制的proxy_pass http://localhost:3000/。參考https://stackoverflow.com/questions/22759345/nginx-trailing-slash-in-proxy-pass-url有關此的更多資訊。

相關內容