带有自定义 --base-href 和 Nginx 路由的 Angular SPA

Posted

技术标签:

【中文标题】带有自定义 --base-href 和 Nginx 路由的 Angular SPA【英文标题】:Angular SPA with Custom --base-href and Nginx Routing 【发布时间】:2020-02-12 13:24:39 【问题描述】:

我们有一个 Angular SPA 应用程序,我们需要从

更改基本路径

www.site.com 到 www.site.com/app

我们在 ng build 命令中添加了 --base-href=/app

运行 ng build --output-path=dist --base-href=/app/ --prod

我们的 nginx 配置中有这个:

location / 
 try_files $uri $uri/ /index.html;

我们把它改成

location /app/ 
 root /usr/share/nginx/html/app;
 try_files $uri $uri/ /app/index.html;

访问站点 localhost/consumerhub 会引发 500 错误。这是我在日志中看到的:

2019/10/15 19:53:51 [错误] 7#7: *1 重写或内部重定向周期,同时内部重定向到“/app/index.html”,客户端:172.17.0.1,服务器:,请求:“GET /app/ HTTP/1.1”,主机:“localhost:9182” 172.17.0.1 - - [15/Oct/2019:19:53:51 +0000] "GET /app/ HTTP/1.1" 500 572 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML,如 Gecko)Chrome/77.0.3865.90 Safari/537.36" "-"

应该是什么?提前致谢!

【问题讨论】:

从错误来看,似乎是内部重定向。这很正常,因为您的try_files 声明说:试试这个、这个或/app/index.html,它会再次开始一个新位置。我不确定您为什么需要在您的位置内使用root。不用那个你可以试试吗? 【参考方案1】:

使用ng build --prod --base-href /app/ --deploy-url /app/(更改为应用运行的端口号(80))

  location /app/ 
      rewrite ^/app/(.*) /$1 break;
      proxy_pass         http://localhost:80/app/;
      proxy_set_header   Host $http_host;
      proxy_set_header   X-Real-IP $remote_addr;
  

【讨论】:

【参考方案2】:

实际上,您可以在 angular.json 配置中为任何环境或所有环境添加这些参数(--baseHref 和--deployURL)。

【讨论】:

以上是关于带有自定义 --base-href 和 Nginx 路由的 Angular SPA的主要内容,如果未能解决你的问题,请参考以下文章

ng build --base-href的设定问题

尝试使用带有自定义 conf.d 的 docker-compose 运行 nginx 时出错

nginx自定义维护503页面

如何防止 NPM 自定义参数中的斜线扩展?

Nginx - 具有自定义边界的多部分请求失败(CRLF)

Angular 4 ng 构建 base-href 重复子目录