问题描述:服务器上装配了Apache服务和Tomcat服务,Apache服务按照惯例分配80端口,Tomcat服务按照惯例占用8080端口,但是本人因为项目需要,开发了几个PHP的项目,需要Apache服务进行支持,而且需要不同的域名访问对应的项目。另外,主机上还存在JavaEE项目,自然Tomcat也是不可避免的,所以需要给Tomcat项目也分配对应的域名,但是Tomcat项目不希望带着端口号(比如http://domian:8080),所以该场景下将会用到Apache转发,即80端口转向8080,对外不公开端口号。
解决方案:
1.打开Apache安装位置的httpd.conf文件,一般位于
Apache安装根目录/conf/httpd.conf
2.找到以下代码:
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
去掉最前面的注释“#”,目的是启用apache的虚拟主机功能。
3.然后继续查找以下代码:
#Include conf/extra/httpd-vhosts.conf
去掉最前面的注释“#”,目的是启用多站点域名配置服务的配置文件。
4.然后找到以下代码
DocumentRoot "${SRVROOT}/htdocs" <Directory "${SRVROOT}/htdocs">
将双引号内的内容自己Apache服务站点部署的根目录替换,如上图,我的PHP项目全部放置于htdocs目录下。
5.然后在httpd.conf文件的同级目录extra目录下的httpd-vhosts.conf文件中修改虚拟站点域名访问配置。
<VirtualHost _default_:80> DocumentRoot "${SRVROOT}/htdocs" ServerName 127.0.0.1 </VirtualHost>
有的博客上说 127.0.0.1这组必须为第一组即默认组,否则会出现localhost不能访问的问题,这个题目也没有出现类似的问题,但是也提醒一下大家,剩下的站点部署如下所示:
# Add any other Virtual Hosts below
<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "${SRVROOT}/htdocs/项目目录"
ServerName -----域名-------#将域名替换为自己的站点域名
# ServerAlias www.dummy-host.example.com
ErrorLog "logs/-----域名--------error.log"#将域名替换为自己的站点域名
CustomLog "logs/-----域名-------.log" common##将域名替换为自己的站点域名
</VirtualHost>
6.好的,Apache的80端口服务部署完成,重启即可生效,访问域名即可访问到Apache的站点服务,接下来是80端口的Apache转发到8080端口的Tomcat项目,在httpd-vhosts.conf文件中配置如下:
<VirtualHost *:80> #ServerAdmin webmaster@dummy-host2.example.com ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:8080/项目名 ProxyPassReverse / http://localhost:8080/项目名 ServerName ---域名----#将域名替换为自己的站点域名 ErrorLog "logs/---域名-----error.log"#将域名替换为自己的站点域名 CustomLog "logs/---域名----.log" common#将域名替换为自己的站点域名 </VirtualHost>
7.重启Apache服务器,可以看到效果,8080端口不再出现,域名可以直接访问到Tomcat的站点服务。
实际配置例子:
1.部署Wordpress服务80端口
<VirtualHost *:80> ServerAdmin webmaster@example.com DocumentRoot "/www/wwwroot/blog.fangshuoit.com" ServerName da2823f7.blog.fangshuoit.com ServerAlias blog.fangshuoit.com errorDocument 404 /404.html ErrorLog "/www/wwwlogs/blog.fangshuoit.com-error_log" CustomLog "/www/wwwlogs/blog.fangshuoit.com-access_log" combined #DENY FILES <Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$> Order allow,deny Deny from all </Files> #PHP <FilesMatch \.php$> SetHandler "proxy:unix:/tmp/php-cgi-70.sock|fcgi://localhost" </FilesMatch> #PATH <Directory "/www/wwwroot/blog.fangshuoit.com"> SetOutputFilter DEFLATE Options FollowSymLinks AllowOverride All Require all granted DirectoryIndex index.php index.html index.htm default.php default.html default.htm </Directory> </VirtualHost>
2.部署JavaWeb项目81端口
<VirtualHost *:80> ServerAdmin 872123675@qq.com ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:81/ Keepalive=On ProxyPassReverse / http://localhost:81/ ServerName hsp.fangshuoit.com ErrorLog "logs/hsp.fangshuoit.com.error.log" CustomLog "logs/hsp.fangshuoit.com.log" common SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 </VirtualHost>
3.部署jenkins服务8080端口
<VirtualHost *:80> ServerAdmin 872123675@qq.com ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:8080/ Keepalive=On ProxyPassReverse / http://localhost:8080/ ServerName jenkins.fangshuoit.com ErrorLog "logs/jenkins.fangshuoit.com.error.log" CustomLog "logs/jenkins.fangshuoit.com.log" common SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 </VirtualHost>