今天接到个任务,要求把一个php项目(部署在apache上)和java项目(部署在tomcat上)放在同一台服务器上,实现ip和域名访问。
ip访问
ip访问就简单多了,只要把项目成功启动,ip加上端口号就可以访问了,如果外网访问不了,就要考虑是不是以下的原因了:
1.服务器的防火墙把端口号给拦住了,可以选择关掉服务器的防火墙或者配置防火墙的入站规则,开放项目的端口号,允许项目的端口号通过防火墙。(百度上有详细教程,而且简单,这里就不多讲了)
2.如果服务器是用第三方服务器,如阿里云,同样也是端口问题,阿里云服务器后台默认开放80端口,如果项目用到8080端口,那就要到阿里云服务器后台开放8080端口。
域名访问
其实,域名访问也和IP访问一样简单,后面加上端口号就可以实现域名,只是不美观罢了!那要美观怎么办?端口号改成80,浏览器默认隐藏80端口,只显示域名,本质上,还是域名加上端口访问。但是俩个项目怎么办?
两个项目,显然需要俩个不同的域名,因为两个项目放在同一个服务器上,而一个服务器只能对应一个IP的地址,所以俩个域名只能指向同一个IP地址。
这就需要apache实现反向代理了,具体操作可以参考篇博客apache代理phpWeb项目,tomcat,iis,共用80端口
apache负责监听80端口,根据不同的域名指向相应项目的ip加端口,就可以实现俩个项目共用80端口,实现域名访问。
本来以为按照上面的博客就可以完成今天的任务了,奈何这个php项目不简单,部署在apache上还集成了zendServer,结果操作到把“#Include conf/extra/httpd-vhosts.conf”的“#”去掉后,apache死活启动不成功,导致php项目运行不了。
于是乎,就马上开始在网上找“#”去掉后,apache启动不了的原因,找到都是说
httpd-vhosts.conf配置不对造成的,但仔细检查没有有错,毕竟按照上面博客操作有过成功案例的,就把这个原因排除掉。又注意到了这个php项目部署在apache上还集成了zendServer,想来想去觉得是zendServer这个东西在搞鬼,然后又在网上找zendServer的部署相关知识,不过没有找到有用的东西。又想来想去,突然灵光一闪,我干嘛不用新的apache来反向代理这个php项目的apache?越想越觉得这个php项目集成zendServer把apache搞得不“纯粹”了,不是原来的样子,无法使用httpd-vhosts.conf配置来做反向代理,既然这样那就让新的apache来。
说干就干,下载新的apache,还是按照上面的博客来配置apache,httpd-vhosts.conf做以下配置修改
##旧apache的php项目
##旧apache的php项目域名
##旧apache的php项目访问地址
<VirtualHost *:80>
ServerName www.bbb.com
ProxyPass / http://localhost:90/
ProxyPassReverse / http://localhost:90
</VirtualHost>
##tomcat
##tomcat项目域名
##tomcat项目访问地址
<VirtualHost *:80>
ServerName www.ccc.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080
</VirtualHost>
新的apache监听80端口,反向代理到90和8080端口,旧的apache端口改为90,tomcat端口为8080,配置完成,重启俩个apache,修改host文件,测试成功,终于搞定任务。
![](/qrcode.jpg)
总结
发现apache做反向代理真的好方便,开启相应的模块(就是去掉注释的部分),然后配置一下httpd-vhosts.conf即可,但做apache反向代理配置之前,先做好一下几点:
1.服务器防火墙开放端口
2.阿里云服务器开放端口(用到第三方服务器的话)
3.确保http://localhost:8080/能够访问到项目