問題:
服務器上同時安裝了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 [email protected]
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 [email protected]
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.