我在运行OpenRefine(由jetty托管的Web应用程序):

http://127.0.0.1:3333


看起来像这样:



一切正常。

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

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


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



似乎所有动态内容均无法正常工作。我该如何解决?

笔记:


我确保mod_proxy已更新并且可以正常工作。已与Tomcat的其他Web应用程序一起测试。

最佳答案

您可以将Mod_proxy与OpenRefine一起使用,而无需使用虚拟主机。

我今天需要做同样的事情。我有一个SSL门户,用户必须通过它通过一些复杂的PKI和LDAP跟踪进行身份验证,并且由于它可以访问某些数据,因此我需要将OpenRefine托管在此后面。这个线程和其他地方给出的这个问题的答案是完全不可接受的,因此我遍历了希望修补此行为的源代码,但我不必这样做!

我注意到,由于OpenRefine用尽了WEB-INF目录,因此它可能是作为典型的Java Web应用程序构建的。确实,当我寻找如何在服务器上设置上下文时,我在Refine.java中发现了这一点:

最终字符串contextPath = Configurations.get(“ refine.context_path”,“ /”);

所以这就是你要做的:

注意:StackOverflow不允许我写类似URL的内容,因为我在这里没有任何声誉。因此,当您阅读http:\时,这实际上意味着http://。

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

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

在启用mod_proxy之后,在您的一个httpd配置文件中(可能在/etc/httpd/conf.d中创建一个openrefine.conf):

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服务器属性。

07-24 18:51