前置条件为Apache 2.2,Tomcat 7都是通过apt-get install来安装的版本。
|
|
$ sudo apt-get install apache2 $ sudo apt-get install tomcat7 |
1.开启Apache的AJP协议支持,Apache 2.2已经默认在/var/lib/apache2/module目录下面包含了AJP协议模块,只要打开支持就可以了。
|
|
$ sudo a2enmod proxy_ajp $ sudo a2enmod proxy |
2.编辑VirtualHost,在Ubuntu下面这个目录在/etc/apache2/sites-available下面
可以看到default.conf跟default-ssl.conf两个类似的文件,我这边的default.conf莫名的被重命名成了000-default.conf,倒也无妨。
|
|
$ sudo vim /etc/apache2/sites-available/000-default.conf |
在
|
|
<VirtualHost *:80></VirtualHost> |
之间增加
|
|
ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/ ServerName localhost |
注意,此处的8009端口,要对应下面的Tomcat 7中配置的AJP的端口。
3.修改Tomcat 7的配置文件
|
|
$ sudo vim /var/lib/tomcat7/conf/server.xml |
去掉被注释掉的,如果没有则增加
|
|
<!-- Define an AJP 1.3 Connector on port 8009 --> <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --> |
注意是增加或去掉原来的配置信息,不是修改默认的8080端口上的“HTTP 1.1”部分
另外注意,如果直接去掉注释,那么根据The AJP Connector中的介绍说明(注意address部分),如果没有指定IP地址的话,默认是绑定任意地址,这样就导致外网也可以访问这个端口。因此出于安全考虑,我们需要增加这个address的设置,并且绑定到127.0.0.1。最终结果如下:
|
|
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" /> |
4.重启Tomcat 7跟Apache 2
|
|
$ sudo service apache2 restart $ sudo service tomcat7 restart |
5.验证是否成功
在Tomcat的ROOT目录(/var/lib/tomcat7/webapps)下面创建一个index.jsp里面随便写点东西即可,不需要是JSP,比如可以写 "Hello JSP"
然后访问http://127.0.0.1/index.jsp如果能正常显示出来,则代表配置成功。
6.如果重启Apache2出现:
|
|
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName. |
在/etc/apache2/apache2.conf文件最后加上:
|
|
#ServerName XXX (XXX 为domain name) ServerName localhost |
7.出于安全原因,禁止外网访问Tomcat的8080端口
只允许Tomcat在本地的8080端口监听即可,修改
|
|
$ sudo vim /var/lib/tomcat7/conf/server.xml |
添加 address="127.0.0.1"
|
|
<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
重启Tomcat7
|
|
$ sudo service tomcat7 restart |
8.Apache2对Tomcat进行反向代理的时候,会发生重定向问题。
配置参考
在Ubuntu 12.04 LTS上安装OpenGrok浏览Android源码
具体的Apache2的配置文件如下:"/etc/apache2/sites-available/default"
|
|
#for Tomcat 7 openGrok ProxyPass /AndroidXRef/ ajp://127.0.0.1:8009/AndroidXRef/ ProxyPassReverse /AndroidXRef/ ajp://127.0.0.1:8009/AndroidXRef/ ServerName localhost |
则在正常访问http://www.mobibrw.com/AndroidXRef的时候是正常的,但是在点击里面按钮的时候会报告404跳转错误。ProxyPass后面必须携带"/",否则就会出现404问题。
产生这个错误的原因是:Apache2进行代理的时候更改了URL路径,而Tomcat7并不知道URL发生变化了,因此没有在跳转时候携带Apache2增加的跳转地址。
解决方法是在Tomcat7的配置文件/var/lib/tomcat7/conf/server.xml中的Host字段中增加
|
|
<Context path="/AndroidXRef" docBase="source/"/> |
即可。
如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/AndroidXRef" docBase="source/"/> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> |