为Apache配置基于名称的虚拟主机,并使用代理和Tomcat协同工作

1. 背景介绍

我在个人的服务器上安装了Apache占用80端口运行Wordpress博客,另外我还安装了Tomcat占用8080端口来跑自己其他的小网站。服务器已经注册和备案了域名 www.alanzeng.cn。现在想通过域名也能访问到Tomcat中的站点,这时我就想要Apache和Tomcat协同工作。请教过同事说是可行,于是今天就做了一些研究,走了一些弯路。现在总结一下。

2. 准备工作

2.1 你需要先安装好JDK/Apache/Tomcat,保证Apache和Tomcat可以正常运行
2.2 下载mod_jk包( http://tomcat.apache.org/connectors-doc/ )——这个就是用来连接Apache和Tomcat的模块

3. 操作过程

3.1 Tomcat

     哈哈,不需要做任何处理

3.2 Apache

3.2.1 放置mod_jk包

将下载mod_jk包解压缩后,找到mod_jk.so文件,复制到Apache目录下的modules文件夹下。

注意,你解压缩出来的文件可能是mod_jk_xxx.so,带版本号的。

3.2.2 修改 httpd.conf配置文件
A) 使用Apache自带的proxy模块,去掉注释使其可用
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
B) 加载httpd-vhosts.conf 配置文件,去掉注释使其可用
Include conf/extra/httpd-vhosts.conf
B) 载入mod_jk 模块,加入以下配置
LoadModule jk_module modules/mod_jk.so
3.2.3 修改httpd-vhosts.conf配置文件

这里主要是配置虚拟目录,使得不同的域名进来可以访问Wordpress或者Tomcat。替换httpd-vhosts.conf中的内容如下:

<VirtualHost *:80>
    ServerName www.alanzeng.cn
    ServerAlias www.alanzeng.cn
    DocumentRoot D:/Wordpress/
</VirtualHost>

<VirtualHost *:80>
    ServerName second.alanzeng.cn
    ServerAlias second.alanzeng.cn
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    JkMount /*.action ajp13
</VirtualHost>

3.3  关于虚拟目录设置

3.3.1 二级域名设置

正如前面的配置,我们为second.alanzeng.cn配置了虚拟目录,直接指向了Tomcat根目录。这里要注意second.alanzeng.cn需要在DNS服务进行二级域名设置,否则DNS无法解析。

<VirtualHost *:80>
    ServerName second.alanzeng.cn
    ServerAlias second.alanzeng.cn
    ProxyPass / http://localhost:8080/second
    ProxyPassReverse / http://localhost:8080/second
    JkMount /*.action ajp13
</VirtualHost>

同样的,我们可以将域名指到Tomcat的一个具体网站下,如:

<VirtualHost *:80>
    ServerName third.alanzeng.cn
    ServerAlias third.alanzeng.cn
    ProxyPass / http://localhost:8080/third
    ProxyPassReverse / http://localhost:8080/third
    JkMount /*.action ajp13
</VirtualHost>
3.3.2 单域名多子目录配置

部分网站存在重定向问题,无法设置成二级域名。举个例子就是Jenkins,本来我还想把一个二级域名jenkins.alanzeng.cn直接转到http://localhost:8080/jenkins,但是没有成功,访问时会提示"此网页包含重定向循环",我也不是很理解底层的原理,没搞定。

<VirtualHost *:80>
    ServerName jenkins.alanzeng.cn
    ServerAlias jenkins.alanzeng.cn
    ProxyPass / http://localhost:8080/jenkins
    ProxyPassReverse / http://localhost:8080/jenkins
    JkMount /*.action ajp13
</VirtualHost>
但是这个非二级域名的方法可行,这样我可以通过www.alanzeng.cn/jenkins访问到Tomcat中的这个站点:
<VirtualHost *:80>
    ServerName www.alanzeng.cn
    ServerAlias www.alanzeng.cn
    ProxyPass /jenkins http://localhost:8080/jenkins
    ProxyPassReverse /jenkins http://localhost:8080/jenkins
    JkMount /*.action ajp13
</VirtualHost>
特别注意,我前面已经有一个VirtualHost设置了ServerName为www.alanzeng.cn,执行的是Wordpress博客。这两个ServerName相同的VirtualHost只有放在httpd-vhosts.conf配置文件前面的那个起作用,后面的就直接忽略了。(看过这篇文章前一个版本的,我说这两个ServerName同名的配置是匹配范围大和小的区别,是错误的,实际上只有前面的生效)。那么有什么办法能够让这两个设置同时生效呢? 看下面的 域名子目录终极配置
<VirtualHost *:80>
    ServerName www.alanzeng.cn
    ServerAlias www.alanzeng.cn
    DocumentRoot D:/Wordpress
    ProxyPass /app1 http://localhost:8080/app1
    ProxyPassReverse /app1 http://localhost:8080/app1
    ProxyPass /app2 http://localhost:8080/app2
    ProxyPassReverse /app2 http://localhost:8080/app2
    JkMount /*.action ajp13
</VirtualHost>

这样,www.alanzeng.cn就会进入到Wordpress博客,而www.alanzeng.cn/app1就会进入Tomcat的app1网站下,www.alanzeng.cn/app2就会进入Tomcat的app2网站下。

4. 参考

4.1 Apache 虚拟主机文档

4.2 apache 集成多个tomcat的方法

5. 结语

最后,这整个配置和Tomcat一点关系都没有,那么我想Apache似乎也可以和IIS或者其他的服务器协作哦,只要支持代理模式。

疑问:为何二级域名配置jenkins会有网页重定向问题,而域名子目录的方法却没有这个问题? 还没有答案,等大神帮我,谢谢!

总体来说,还是大功告成了!

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值