eXist-db:无法在关闭的端口上启动 webstart 客户端,通过 apache 反向代理

eXist-db:无法在关闭的端口上启动 webstart 客户端,通过 apache 反向代理

我正在配置一个 Apache HTTP 服务器,以便它将以 /app/ 开头的请求反向代理到在 Tomcat 服务器中运行的 eXist-db 实例,端口为 8082。此端口已在防火墙中关闭,外部世界无法访问。按照eXist 文档,我的 httpd.conf 文件中有以下规则:

ProxyPass           /apps/  http://localhost:8082/
ProxyPassReverse    /apps/  http://localhost:8082/
ProxyPassReverseCookiePath /apps/ /

一切顺利,例如“http://mydomain/apps/exist/index.xml'。但是,webstart 客户端(可从 'http://localhost:8082/exist/webstart/exist.jnlp' 在 Web 服务器上)在代理后面不起作用。虽然 'http://mydomain/apps/exist/webstart/exist.jnlp' 确实生成了有效的 exist.jnlp 文件,但该文件无法执行。原因似乎很明显:显然,生成 exist.jnlp 文件的 eXist-db 实例仅将代理请求视为:'http://localhost:8082/exist/webstart/exist.jnlp'。但是,由于 exist.jnlp 文件是在客户端上执行的,因此该引用毫无意义(除非客户端计算机恰好在该端口上运行 eXist-db 实例)。因此,执行 exist.jnlp 文件会失败,并出现“连接被拒绝”错误。

然而,使用 URL xmldb:exist://mydomain/apps/exist/xmlrpc 将本地 eXist-db Java 客户端连接到代理 eXist 实例完全没有问题。问题在于生成webstart exist.jnlp 文件,该文件似乎需要访问可公开访问的 URL。但是,打开端口 8082 并替换对“http://本地主机:8082' 和 'http://我的域名:8082'在我看来,这反而破坏了反向代理的意义。

其他人是否已成功在 Apache 后面的封闭端口上反向代理 eXist-db?是否有一些我忽略的代理配置设置(我根本不是专家)可以让 eXist 看到原始请求而不是代理请求?

亲切的问候,

罗恩

答案1

您需要ProxyPreserveHost On,它将收到的相同 Host: 标头发送到后端服务器。更多信息这里

相关内容