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:

我正在尝试在Apache代理后面运行一个试剂Web应用程序,以将HTTPS转发到运行它后面的试剂应用程序的HTTP Jetty服务器。以下是Apache规则:

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的链接

以下是一些需要检查的内容:

  • 是否加载了js/app.js?尝试导航到(索引页的根与js的根匹配的地方)。有时,由于配置原因,在部署到主机时,资产会从不同的路由提供服务
  • 您部署的app.js是否使用优化高级编译构建?事情可能会出错!在部署构建中,尝试用
    空白
    替换
    高级
    ,以排除这种情况。如果这就是问题所在,那么您可能缺少一些javascript外部程序。请注意,如果您正在部署一个dev构建,那么还需要部署out编译文件。如果您有一个名为prod的构建,您可以使用
    lein cljsbuild once prod
    在本地测试生产构建

  • javascript控制台中是否报告了任何错误?这里可能有很好的线索


  • 对于同样的问题,我只是加入了更多的规则,直到问题消失。这是我用来解决/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没有问题。即使页面没有呈现,它也会一如既往地返回结果。