您可以在不使用虚拟主机的情况下使用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服务器属性。
这解决了本地的问题,但我想从外部主机访问。我真的没有看到DNS记录是一种解决方案,我的机器已经在端口80和8089上运行了一些服务,这会很麻烦。 但现在我知道什么是失败(绝对路径),以及如何处理它(国防部重写)。谢谢 – Jesus 2014-09-25 08:52:39
VirtualHost的意义在于,您可以在端口80上运行多个服务,让Apache根据请求详细信息处理路由。每个服务都有自己的主机名,并且服务器根据您提供的主机名来决定ProxyPass通过哪个服务来请求您的请求。如果您希望您的服务能够从远程安全地使用,请使用https并将身份验证添加到VirtualHost。我有数十种服务在防火墙后的各种主机上监听各种端口,并且一台Apache服务器位于它们前面,所有服务器都基于VirtualHost管理外部访问者的访问。 – Kingdon 2014-09-25 12:48:15
也设置默认虚拟主机。如果您使用的是Debian或Ubuntu系统,请查看/ etc/apache2/sites-available和sites-enabled – Kingdon 2014-09-25 12:56:05