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

时间:2018-05-15 13:41:25

标签: angular varnish document-root

我的Angular 5应用程序将在清漆代理后面运行。假设我们的公司网站在test.corporate.com上运行,而我的本地计算机是dev5.local,那么现在,系统管理员现在将varnish配置为将https://test.corporate.com/albert指向http://dev5.local:4200/(但是他们可以把它指向我们喜欢的任何东西。这是代理,而不是重定向。在使用ng-serve运行的angular index.html中,我配置了documentroot:

<base href="/albert/">

当我在浏览器中访问https://test.corporate.com/albert/时,我的index.html的html会加载,但所有其他文件(css,javascript)都无法加载。当我去http://dev5.local:4200/时会发生同样的情况,但后者因为文件记录而无法正常工作。

我们尝试过上述varnish配置和documentroot的变体,但似乎没有任何效果。使用上面的配置,这是对我来说最有意义的变体,它尝试加载https://test.corporate.com/albert/inline.bundle.js失败。我似乎也无法手动编辑网址,看看我是否可以在浏览器中加载该js文件,例如https://test.corporate.com/albert/albert/inline.bundle.js还提供了“未找到”的重定向。

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

3 个答案:

答案 0 :(得分:1)

我不确定Varnish Proxy,但是我在apache-tomcat服务器中部署我的代码时遇到了同样的问题,并且不是从'/'而是从角度4中的'/ anotherPath /'提供网站。

我在构建应用程序时所做的是在构建命令

中添加了以下2个属性
ng build --prod --base-href "/" --deployUrl="/anotherPath/"

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

这是解决我的问题的解决方法。

一旦你解决了这个问题,你可能还会面临另一个问题,即重新加载将不起作用,因为你将从'/ anotherPath /'而不是'/'服务。例如,重新加载 https://test.corporate.com/albert/user/login您将收到错误。

为了在apache-tomcat中我们配置了重写规则。如果您需要更多信息,请与我们联系。

答案 1 :(得分:0)

您有两个选项可以遍历所有静态文件,并在index.html中添加相对路径。

OR

您可以使用Grunt之类的任务运行程序与grunt-injector等程序包一起使用,您可以使用它来检查要在项目文件夹中使用的所有静态文件,它会自动添加index.html文件中的相对路径。

答案 2 :(得分:0)

您可以执行以下操作(取决于路由器配置):

<!--angular routing-->
<script type="text/javascript">
   document.write('<base href="' + document.location.href.split('#')[0] + '" />');
</script>