Mod_Proxy没有正确显示OpenRefine App

时间:2014-09-24 08:37:24

标签: mod-proxy openrefine

我在OpenRefine(由jetty托管的webapp)上运行:

http://127.0.0.1:3333

看起来像这样:

Web OK

一切都很完美。

现在我想通过Apache2进行隧道传输(出于安全性和重命名的原因),所以我更改了我的http.conf文件并对其进行了修改:

ProxyPass /refine http://127.0.0.1:3333
ProxyPassReverse /refine http://127.0.0.1:3333

现在,如果我尝试通过代理打开页面,这就是我所看到的:

Web Bad

看起来所有动态内容都无法正常运行。我该如何解决这个问题?

备注:

  • 我确保mod_proxy已更新并正常工作。使用Tomcat中的其他Web应用程序进行测试。

2 个答案:

答案 0 :(得分:2)

可以在不使用虚拟主机的情况下将mod_proxy与OpenRefine一起使用。

今天我需要做同样的事情。我有一个SSL门户,用户必须通过一些复杂的PKI和LDAP跟踪进行身份验证,我需要OpenRefine在其后面托管,因为它可以访问一些数据。在这个线程和其他地方给出的这个问题的答案根本不可接受,所以我通过了预期修补此行为的源代码 - 但我没有必要!

我注意到因为OpenRefine用完了WEB-INF目录,所以它可能是一个典型的java web应用程序。当然,当我查找如何在服务器上设置上下文时,我在Refine.java中找到了这个:

final String contextPath = Configurations.get(“refine.context_path”,“/”);

这就是你所做的:

注意:StackOverflow不会让我写出看起来像URL的东西,因为我在这里没有任何声誉。因此,当您阅读http:\时,这实际上意味着http://。

1)在refine.ini中,确保JAVA_OPTIONS包含“-Drefine.context_path = / refine”。 (不用说你将refine.host更改为0.0.0.0而不是127.0.0.1并且你还设置了refine.headless = true。)现在重启OpenRefine时,你将在http:\ your.refine访问它。 .server:3333 / refine(显然将你的服务器主机名放在那个url中)。

2)现在,举一个简单的例子,我们将https:\ your.apache.server / refine代理转换为http:\ your.refine.server:3333 / refine。

在你的一个httpd配置文件中(可能在/etc/httpd/conf.d中创建一个openrefine.conf)在启用mod_proxy之后添加以下行:

ProxyPass /refine http:\\your.refine.server:3333/refine
ProxyPassReverse /refine http:\\your.refine.server:3333/refine

这里的不同之处在于OpenRefine不在全局上下文中,因此可以代理应用程序的根目录。 OpenRefine根据上下文的设置方式,使用绝对路径生成对资源的请求。因此,如果您不这样做,OpenRefine将生成不属于您的代理位置的javascript文件,正如此线程中的其他人之前所遇到的那样,

在现实生活中,您可能希望mod_proxy在多个OpenRefine实例上使用负载均衡器,并且您可能希望提供一些关于允许哪些用户使用此代理隧道的逻辑。

希望这有助于其他人!

我还建议您查看同样位于Refine.java中的未记录的Refine服务器属性。

答案 1 :(得分:1)

您已将应用位置从http://your.server:3333/更改为http://your.server/refine

您可以看到,例如href="/resource.css"的链接不再有效,因为该资源现已移至"/refine/resource.css"。我想如果你去挖掘HTML源代码,你会发现许多这些带有绝对路径的链接。

此配置将破坏任何绝对路径引用。解决此问题的复杂方法称为URL重写,并且有关于如何使用URL重写设置Mod-Proxy和Reverse的深入教程。解释起来很复杂,容易做错;而是添加一个VirtualHost,以便绝对路径链接不需要重写。

<VirtualHost *>
    ServerName refine

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://127.0.0.1:3333/
    ProxyPassReverse / http://127.0.0.1:3333/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

您不太可能找到localhost:3333的绝对链接,因此这可能对您有用。更改您的/etc/hosts,以便refine解析为127.0.0.1,您将成为金牌。您现在可以使用http://refine/时没有问题的精简。

127.0.0.1    localhost refine

如果您尝试从外部主机启用访问权限,稍微复杂的设置将涉及新的DNS记录,应该很容易从这里想象。