Apache代理后面的试剂应用程序不呈现
我正在尝试在Apache代理后面运行一个试剂Web应用程序,以将HTTPS转发到运行它后面的试剂应用程序的HTTP Jetty服务器。以下是Apache规则:Apache代理后面的试剂应用程序不呈现,apache,proxy,jetty,clojurescript,reagent,Apache,Proxy,Jetty,Clojurescript,Reagent,我正在尝试在Apache代理后面运行一个试剂Web应用程序,以将HTTPS转发到运行它后面的试剂应用程序的HTTP Jetty服务器。以下是Apache规则: ProxyPass /bookmarx http://localhost:3000 ProxyPassReverse /bookmarx http://localhost:3000 当我在本地运行应用程序时,该应用程序运行良好,即http://localhost:3000。但是,当我通过Apache服务器运行应用程序时,例如https:
ProxyPass /bookmarx http://localhost:3000
ProxyPassReverse /bookmarx http://localhost:3000
当我在本地运行应用程序时,该应用程序运行良好,即http://localhost:3000。但是,当我通过Apache服务器运行应用程序时,例如https://example.com/bookmarx,它只返回HTML起始页(即下面带有代码片段的页面),而不执行Javascript(core/init!),因此我看到的只是一个空白页面
<div id="app"></div>
<script src="js/app.js" type="text/javascript"></script>
有趣的是,我可以调用它背后的Clojure服务,例如,它返回书签,因此我知道代理正在转发请求,但ClojureScript没有运行
我使用了重写规则和x-forwarded-proto头文件,这似乎没有任何区别
如果我将Apache服务器配置为使用HTTP而不是HTTPS运行它,也会得到相同的结果,因此我知道这不是SSL干扰
我需要做什么才能让应用程序通过代理运行?原则上,HTTPS在这里并不重要,唯一重要的是浏览器能否获取资产(HTML+javascript文件),javascript是否正确 要做的第一件事是打开浏览器开发人员控制台(视图->开发人员->javascript控制台)并查找错误。检查网络选项卡以确保已加载javascript文件。。。检查加载的javascript的另一种方法是查看HTML的源代码,然后单击或打开指向所包含javascript的链接 以下是一些需要检查的内容:
空白
替换高级
,以排除这种情况。如果这就是问题所在,那么您可能缺少一些javascript外部程序。请注意,如果您正在部署一个dev构建,那么还需要部署out编译文件。如果您有一个名为prod的构建,您可以使用lein cljsbuild once prod
在本地测试生产构建对于同样的问题,我只是加入了更多的规则,直到问题消失。这是我用来解决/api问题的方法:
ProxyPassReverse /api http://0.0.0.0:3001/api
ProxyPass /api http://0.0.0.0:3001/api
我使用的是Untangled,它更像是一个框架,而不是一个库。因此,当Chrome开发者控制台告诉我这个错误时——这实际上是我第一次意识到甚至存在
/api
问题。这是由于秘书/账户中的路线错误造成的。它正在寻找“/”的路由,这在本地时是正确的,但远程URL有“/bookmarx/”。因此,当我将路线改为“/bookmarx/”时,效果很好。我猜我是假设Apache在传递URL时正在重新编写URL
(经过相当长的消除回溯过程,才找到这个简单无害的答案。事后看来,我本可以马上发布代码,也许其他人也会看到。经验教训。感谢大家的帮助。)谢谢大家的建议。1.我可以加载js/app.js,当我尝试打开页面时,js控制台也会显示它已加载。2.我尝试过:空白,但不幸的是,它没有任何区别。3.当我通过Apache代理时,我在js控制台中看到的错误是:
错误呈现组件(在bookmarx.route.current_页面中)错误:断言失败:无效的Hiccup表单:[nil](在bookmarx.route.current_页面中)(有效标记?标记)
我不确定由于通过代理而无法渲染的内容。是否可以发布一些代码?看起来某个地方有一个组件在有条件地指定一个标记,但条件是空的,例如:[(当条件:div)“ok”]
,它在运行它的上下文中为false。我会查看所有组件引用,以检查它们是否有丢失的情况。再想一想,我开始怀疑我的问题是否与页面在呈现之前使用core.async调用服务器加载书签有关。当我直接转到localhost jetty服务器时,它会阻塞,直到返回结果。但是当我通过代理时,它不会阻塞并尝试在返回结果之前呈现页面。如果这确实是一个问题,我不确定如何立即解决这个问题。幸运的是,我对/api没有问题。即使页面没有呈现,它也会一如既往地返回结果。