Nginx - 子文件夹中的 Node API 和 / 上的静态文件

Nginx - 子文件夹中的 Node 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了解更多信息。

相关内容