在Angular 5.6.0中在Varnish代理后面设置文档根

在Angular 5.6.0中在Varnish代理后面设置文档根,angular,varnish,document-root,Angular,Varnish,Document Root,我的Angular 5应用程序将在varnish代理之后运行。假设我们的公司网站运行在test.corporate.com上,而我的本地计算机是dev5.local,那么varnish目前由系统管理配置为指向(但他们可以指向我们喜欢的任何东西)。这是一个代理,不是重定向。在使用ng serve运行的angular index.html中,我配置了documentroot: <base href="/albert/"> 当我在浏览器中转到时,会加载index.html的html,

我的Angular 5应用程序将在varnish代理之后运行。假设我们的公司网站运行在
test.corporate.com
上,而我的本地计算机是
dev5.local
,那么varnish目前由系统管理配置为指向(但他们可以指向我们喜欢的任何东西)。这是一个代理,不是重定向。在使用ng serve运行的angular index.html中,我配置了documentroot:

<base href="/albert/">

当我在浏览器中转到时,会加载index.html的html,但所有其他文件(css、javascript)都无法加载。当我转到时也会发生同样的情况,但后者不起作用是有道理的,因为documentroot

我们已经尝试了上述varnish配置和documentroot的变体,但似乎没有任何效果。对于上面的配置,这是对我来说最有意义的变量,它尝试加载,但失败了。我似乎也无法手动编辑url,看看是否可以在我的浏览器中加载该js文件,例如,还提供了一个带有重定向的“未找到”


当html加载时,它不应该与http与https相关。

您有两个选项,要么遍历所有静态文件,要么在index.html中添加它们的相对路径


您可以使用task runner like和packages like,通过它可以检查项目文件夹中要使用的所有静态文件,并且它将自动在index.html文件中添加相对路径

您可以这样做(取决于路由器配置):


文件。写(“”);

我对Varnish Proxy不太确定,但是,在apache tomcat服务器中部署我的代码,并不是从“/”而是从angular 4中的“/anotherPath/”为站点提供服务时,我遇到了同样的问题

我所做的是在构建应用程序时,在build命令中添加了以下2个属性

ng build --prod --base-href "/" --deployUrl="/anotherPath/"
发布此版本后,我已将新创建的dist文件夹中index.html文件中的
更新为
,然后将其部署到服务器

这是一个解决我问题的变通办法

一旦修复此问题,您可能还会面临另一个问题,即重新加载将无法工作,因为您将从“/anotherPath/”而不是“/”提供服务。对于乙二醇,重新装载 你会得到一个错误


为此,我们在ApacheTomcat中配置了重写规则。如果您需要更多信息,请告诉我。

那么您在提供的html中看到了
base
标记了吗?如果是这样,那么您需要确保静态文件是使用路径加载的,比如
static/js/app.js
,而不是
/static/js/app.js
/static/js/app.js
我在Varnish方面没有经验,但在某种程度上帮助我的一个变化是通过使路径相对化来使基本href服务文件。/albert/,并调整index.html中的所有注入文件以使用相对路径而不是绝对路径。此解决方案可能适用于生产版本。抱歉,我弄错了Angular版本,它应该是5.6.0。我不知道这是否会影响当前的评论和答案,但我将编辑这个问题。问题还在于我无法通过浏览器地址直接加载静态文件。因此,似乎根本没有提供静态文件。您是否尝试过在从URL中删除基本href的同时访问其中一个静态文件?我尝试过URL的变体,但是删除/albert/不起作用,因为varnish不会转发它。如果将URL与base href一起使用,则链接将始终被视为角度路由,而不是静态文件路径。您需要在varnish配置中为for
/albert/
添加一个过滤器。
ng build --prod --base-href "/" --deployUrl="/anotherPath/"