前置条件为Apache 2.2
,Tomcat 7
都是通过apt-get install
来安装的版本。
1 2 3 |
$ sudo apt-get install apache2 $ sudo apt-get install tomcat7 |
1.开启Apache
的AJP
协议支持,Apache 2.2
已经默认在/var/lib/apache2/module
目录下面包含了AJP
协议模块,只要打开支持就可以了。
1 2 3 |
$ sudo a2enmod proxy_ajp $ sudo a2enmod proxy |
2.编辑VirtualHost
,在Ubuntu
下面这个目录在/etc/apache2/sites-available
下面
可以看到default.conf
跟default-ssl.conf
两个类似的文件,我这边的default.conf
莫名的被重命名成了000-default.conf
,倒也无妨。
1 |
$ sudo vim /etc/apache2/sites-available/000-default.conf |
在
1 |
<VirtualHost *:80></VirtualHost> |
之间增加
1 2 3 |
ProxyPass / ajp://127.0.0.1:8009/ ProxyPassReverse / ajp://127.0.0.1:8009/ ServerName localhost |
注意,此处的8009
端口,要对应下面的Tomcat 7
中配置的AJP
的端口。
3.修改Tomcat 7
的配置文件
1 |
$ sudo vim /var/lib/tomcat7/conf/server.xml |
去掉被注释掉的,如果没有则增加
1 2 3 4 |
<!-- 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
。最终结果如下:
1 2 |
<!-- 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
1 2 3 |
$ 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
出现:
1 |
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName. |
在/etc/apache2/apache2.conf
文件最后加上:
1 2 |
#ServerName XXX (XXX 为domain name) ServerName localhost |
7.出于安全原因,禁止外网访问Tomcat
的8080
端口
只允许Tomcat
在本地的8080
端口监听即可,修改
1 |
$ sudo vim /var/lib/tomcat7/conf/server.xml |
添加 address="127.0.0.1"
1 2 3 |
<Connector port="8080" address="127.0.0.1" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> |
重启Tomcat7
1 |
$ sudo service tomcat7 restart |
8.Apache2
对Tomcat
进行反向代理的时候,会发生重定向问题。
配置参考
在Ubuntu 12.04 LTS上安装OpenGrok浏览Android源码
具体的Apache2
的配置文件如下:"/etc/apache2/sites-available/default
"
1 2 3 4 |
#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
字段中增加
1 |
<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> |