我知道 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>
这部分有效。但我在查询时遇到了问题:
- jsessionid 不应显示 - 仅适用于不允许使用 cookie 的客户端。我猜 cookie 信息会丢失在某个地方,例如 favicon 中...?
- 将显示一个附加目录 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] 标志,使用它并看看您得到了什么。