通过 Apache2 在 Web 应用程序(在 Tomcat 中)上映射外部域

通过 Apache2 在 Web 应用程序(在 Tomcat 中)上映射外部域

我知道 serverfault 上可能存在重复,但我读了很多(不仅仅是最近几天的),但我无法让它 100% 正常工作。

我有域名http://jetwick.de通过 Strato 购买,然后我有一个具有静态 IP 的服务器。我可以在 Strato 上配置 jetwick.de 的 DNS 设置:IP 直接通过 A-Record 指向我们服务器的 IP。这有效。

现在我希望我的应用程序可以在 localhost:8080/jetwick 下的 tomcat 下使用,并显示在 jetwick.de 下 - 仅此而已:)

我在我们的服务器 /etc/apache2/vhosts/jetwick 上有以下 apache 配置

<Virtualhost *:80>
      ServerName http://jetwick.de
      ServerAlias jetwick.de www.jetwick.de jetwick.com www.jetwick.com

      ProxyRequests Off
      ProxyPreserveHost On   

      ProxyPass / http://localhost:8080/jetwick/
      ProxyPassReverse / http://localhost:8080/jetwick/

</Virtualhost>

这部分有效。但我在查询时遇到了问题:

  1. jsessionid 不应显示 - 仅适用于不允许使用 cookie 的客户端。我猜 cookie 信息会丢失在某个地方,例如 favicon 中...?
  2. 将显示一个附加目录 jetwick.de/jetwick(在以下请求中,jsessionid 消失)

您将如何解决这个问题?当然,您也可以向我指出一个描述此案例的网站/副本!

我是否需要 mod_jk 来使 cookies 正常工作,就像答案一样这里建议

更新 以下设置解决了第一个(cookie)问题:

ProxyPassReverseCookiePath /jetwick/

答案1

嗯。首先尝试迁移到 mod_proxy_ajp 配置(假设您已将其包含在内 - 它是许多现代 Apache 安装中的库存模块)以查看是否可行。首先,确保您的端口 8009 AJP 连接器在 Tomcat 的 server.xml 中被取消注释:

<Connector enableLookups="false" port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

然后以几乎相同的方式设置 Apache;您可以考虑使用单节点池,以便让它“看到”jsessionid。然后添加一些重写规则来屏蔽目录名称:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/jetwick/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /jetwick/$1

ProxyPass /jetwick/ balancer://local/ stickysession=JSESSIONID|jsessionid
<Proxy balancer://local>
  BalancerMember ajp://127.0.0.1:8009
</Proxy>

我现在手边没有 Tomcat 引擎来测试它,但是当我读到它时它看起来是正确的...:) 您可能需要在重写规则上使用 [PT] 标志,使用它并看看您得到了什么。

相关内容