问题:
服务器上同时安装了Apache和Tomcat。
原本有个PHP web网站A,运行在Apache下,通过域名www.test.cn访问。
新增一个 SpringMvc 架构的网站B,运行在Tomcat下。
现在B项目也希望通过域名访问,可是80端口已经被Apache使用了。如何能让Tomcat下的网站也能对外呈现80端口,通过域名访问呢?
解决方法:
配置Apache反向代理Tomcat。
在原有域名下新增一个二级域名level2.test.cn,当用户访问B网站时,首先访问此二级域名(80端口),然后由Apache把该域名下的请求转发到Tomcat(8080端口)。
环境:
服务器:阿里云CentOs7;
Apache version :2.6.4。
Tomcat version: 8.5.45。
具体实现:
1)确认 Apache 启用了代理模块
打开httpd.conf文件:
vi /etc/httpd/conf/httpd.conf
看下面这段
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf
发现相关module的加载都在conf.module.d文件夹中。进入conf.module.d文件夹 :
[root@1234 conf]# cd ..
[root@1234 httpd]# ls
conf conf.d conf.modules.d logs modules run vhost-conf.d
[root@1234 httpd]# cd conf.modules.d
[root@1234 conf.modules.d]# ls
00-base.conf 00-lua.conf 00-proxy.conf 00-systemd.conf 10-php.conf
00-dav.conf 00-mpm.conf 00-ssl.conf 01-cgi.conf
打开 00-proxy.conf 文件(vi 00-proxy.conf)
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.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_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
代理所需模块都在里面了。
Ok,这一步其实神马都不必做,完成了。
2) 配置反向代理
打开 vhost-name.conf文件。
[root@1234 httpd]# ls
conf conf.d conf.modules.d logs modules run vhost-conf.d
[root@1234 httpd]# cd vhost-conf.d
[root@1234 vhost-conf.d]# ls
vhost-name.conf
[root@1234 vhost-conf.d]# vi vhost-name.conf
在文件末尾新增
<VirtualHost *:80>
ServerAdmin webmaster@test.cn
ServerName http://level2.test.cn
ProxyPreserveHost On
ProxyPass / http://xxx.xx.xxx.xxx:8080/
ProxyPassReverse / http://xxx.xx.xxx.xxx:8080/
</VirtualHost>
http://xxx.xx.xxx.xxx:8080/ 是Tomcat启动页网址。保存并关闭文件。重新启动Apache。
在浏览器中输入http://level2.test.cn,就可以访问Tomcat启动页。
3)访问Tomcat下Web项目
该项目以war文件发布,在Tomcat下直接访问url是:
http://xxx.xx.xxx.xxx:8080/project-war-name
如果用Apache反向代理该项目地址,上面第2)步VirtualHost 需要新增一点内容:
<VirtualHost *:80>
ServerAdmin webmaster@test.cn
ServerName http://level2.test.cn
ProxyPreserveHost On
ProxyPass / http://xxx.xx.xxx.xxx:8080/
ProxyPassReverse / http://xxx.xx.xxx.xxx:8080/
ProxyPreserveHost On
ProxyPass /project-war-name http://xxx.xx.xxx.xxx:8080/project-war-name
ProxyPassReverse /project-war-name http://xxx.xx.xxx.xxx:8080/project-war-name
</VirtualHost>
保存并关闭文件。重新启动Apache。
在浏览器中输入http://level2.test.cn/project-war-name,就可以访问该项目了。
That’s All ,Thank you.