使用 mod_proxy 从 80 上的 Apache 转发到 8080 上的 Tomcat 6 [关闭]
Posted
技术标签:
【中文标题】使用 mod_proxy 从 80 上的 Apache 转发到 8080 上的 Tomcat 6 [关闭]【英文标题】:Forward connection from Apache on 80 to Tomcat 6 on 8080 with mod_proxy [closed] 【发布时间】:2012-01-10 10:19:43 【问题描述】:我有一个域名 www.example.com,现在我正在尝试将浏览器连接转发到 http://myserveripaddress:8080/MyAppName,以便让用户在浏览器上键入 www.example.com 时浏览 MyApp。 .
为此,我在 Apache (2.2.20) 的 httpd.conf 文件中编写了这个标签:
<VirtualHost *:80>
ServerName www.example.com
ProxyRequest Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://myserveripaddress:8080/MyAppName/
ProxyPassReverse / http://myserveripaddress:8080/MyAppName/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
然后我在tomcat的server.xml文件中使用了以下标签:
... ...
问题是当我在浏览器上输入 www.example.com 时,我得到了这个答案 您无权访问此服务器上的 /。 Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/0.9.8r DAV/2 服务器位于 www.example.com 端口 80
如果我尝试连接到 www.example.com/MyAppName,它可以工作....
最后,我如何在网络浏览器中输入 www.example.com 来连接到 MyApp??
更新于 21.41 CET 1/1/11
这是我的配置:
httpd.conf
<VirtualHost *:80>
DocumentRoot /var/www/MyAppName
ServerName www.example.com
</VirtualHost>
<IfModule mod_jk.c>
JKWorkersFile /etc/apache2/workers.properties
JkShmFile /var/log/apache2/mod_jk.shm
JKLogFile /var/log/apache2/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /MyAppName/* worker1
</IfModule>
我也试过了:
JkMount /* worker1
在 server.xml 中
<Connector port="8009" protocol="AJP/1.3" />
<Host name="www.example.com" appBase="/var/www/"
unpackWARs="true" autoDeploy="true" deployOnStartup="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/var/www/MyAppName"/>
在worker.properties中
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
我的配置是 Apache 2.2.20,Tomcat 6,在 Mac Mini Server OS X Lion 上运行......
如果我尝试访问 www.example.com,我正确地看到了我的 index.html 页面,但是当我单击链接到我的项目中的另一个页面或 Servlet 或 JSP 的按钮时,这就是消息:
404 Not Found Error
Not Found
The requested URL /MyAppName/RegistrationPage was not found on this server.
Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/0.9.8r DAV/2 mod_jk/1.2.30 Server at www.example.com Port 80
此外,如果 JSP 直接在 MyAppName 页面中(而不是在子目录中),它会打印代码,java 引擎不会解释代码。
【问题讨论】:
通常这种部署是使用Tomcat Connectors (mod_jk) 而不是 mod_proxy 完成的。如果没有特别的理由使用 mod_proxy,当然…… 我使用它是因为如果我需要部署另一个tomcat应用程序,我可以添加新的虚拟主机,对吗? mod_jk 不关心有多少应用程序,在 apache 中,您只需为每个 tomcat 应用程序添加另一个虚拟主机,并且对于 Tomcat 中的每个应用程序,您将另一个主机配置为如果没有特定理由使用 mod_proxy 来部署您的应用程序,那么Tomcat Connectors / mod_jk 是更合适的解决方案。
请参考
Tomcat connectors howto
了解如何在 Apache 端设置连接器。请注意,JkMount /examples/* worker1
按上下文挂载 worker(因此示例中的所有内容都将由 Tomcat 处理),在您的配置中,您可能希望通过扩展挂载(甚至只是 *
),如下所示:
JkMount /*.jsp worker1
JkMount /*.do worker1
JkMount /*.whatever worker1
这样所有匹配 *.jsp *.do 和 *.whatever 的东西都将由 Tomcat 处理,其余的由 apache 处理。 注意: JkMount 行需要在您的定义中(在某些情况下)。
mod_jk 不使用 HTTP 连接到 Tomcat,因此您可以禁用 HTTP 连接器(默认侦听 8080 的连接器)。您将需要使用server.xml
中的一行来启用 AJP 连接器(不确定是否默认启用):
<Connector port="8009"
enableLookups="false" redirectPort="8443"
protocol="AJP/1.3"/>
要让 Tomcat 识别哪个应用程序应该响应调用,您需要执行 Host configuration 并使用与您的站点名称匹配的 name
定义一个 Host
。
然后定义一个 apache 虚拟主机,DocumentRoot
匹配 Tomcat 应用程序的 docBase
,ServerName
匹配 Tomcat 主机名,如下所示:
httpd.conf:
<VirtualHost *:80>
DocumentRoot /var/www/yoursite.com
ServerName www.yoursite.com
</VirtualHost>
server.xml:
<Host name="www.yoursite.com" appBase="/var/www"
unpackWARs="false" autoDeploy="false" deployOnStartup="false"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/var/www/yoursite.com"/>
请注意,此设置不适用于 WAR 文件部署,而是用于解压(分解、提取)的 WAR 文件。 WAR 是一个 ZIP 存档,以防您不知道。
我很抱歉让它有点含糊,但它确实有效,这是在 Apache HTTPD 后面部署 Tomcat 应用程序的正确方法。
如果你用谷歌搜索它,你会找到带有演练的手册,this one 似乎是一个不错的选择。
【讨论】:
所以如果我想让 Tomcat 处理 .jsp 文件和 .html,我需要在 httpd.conf 中编写: JkMount /*.jsp worker1 JkMount /*.html worker1 是的,不幸的是,我还没有听说过每行语法有多个模式 然后在 tomcat 的 server.xml 文件中我写以上是关于使用 mod_proxy 从 80 上的 Apache 转发到 8080 上的 Tomcat 6 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Apache + Node.js + mod_proxy。如何将一个域路由到:3000,将另一个域路由到:80
在 apache http 服务器上设置 mod_proxy
在 apache http 服务器上设置 mod_proxy
带有 mod_ssl 和 mod_proxy 的 Apache 返回 413 Request Entity Too Large