您可以在不使用虚拟主机的情况下将 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) 在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 (显然将您的服务器主机名放在该网址中)。
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 服务器属性。