Apache多域名多站点配置

前言

Apache多域名多站点配置

有时候,我们需要多个站点来实现多个需求。一般情况我们都会在站点根目录(如apache/htdocs)下创建多个文件夹:

服务器目录 访问地址 功能
apache/htdocs/a www.xxx.com/a/* a
apache/htdocs/b www.xxx.com/b/* b
apache/htdocs/c www.xxx.com/c/* c

然而这种做法的隔离效果不太好, 在我们只有一台服务器一个IP的情况下,理想的做法是这样的:

服务器目录 访问地址 功能
apache/htdocs/a a.xxx.com/* a
apache/htdocs/b b.xxx.com/* b
apache/htdocs/c c.xxx.com/* c

修改配置文件

打开apache/conf/http.conf, 在最后面加上:

NameVirtualHost *
<VirtualHost *:80>
ServerAdmin admin@xxx.com
DocumentRoot /usr/local/apache/htdocs/a
ServerName a.xxx.com
</VirtualHost>

#
NameVirtualHost *
<VirtualHost *:80>
ServerAdmin admin@xxx.com
DocumentRoot /usr/local/apache/htdocs/b
ServerName b.xxx.com
</VirtualHost>

#
NameVirtualHost *
<VirtualHost *:80>
ServerAdmin admin@xxx.com
DocumentRoot /usr/local/apache/htdocs/c
ServerName c.xxx.com
</VirtualHost>

保存重启appache即可。

拓展

Apache与Tomcat的整合中,已经用Apache连接了Tomcat,下面就为Java站点和PHP站点分配不同域名。

blog.tung7.com用于访问JAVA站点,而blog2.tung7.com用于访问PHP站点。

同样找到appache/conf/http.conf。在最后添加或修改(下面关于Log的配置自行修改):

# 设置虚拟主机
# For Tomcat
NameVirtualHost blog.tung7.com:80
<VirtualHost blog.tung7.com:80>
     #定义服务名称
     ServerName blog.tung7.com
     #定义站点项目所在路径。
     DocumentRoot "D:/Apache Software Foundation/Tomcat 7.0/webapps
     DirectoryIndex login.jsp index.html index.htm

     JkMount /* blog
     JkUnMount /*.html blog
     JkUnMount /*.htm blog

 </VirtualHost>
 <Directory "D:/Apache Software Foundation/Tomcat 7.0/webapps">  
     Options Indexes FollowSymLinks  
     AllowOverride None  
     Order allow,deny  
     Allow from all  
 </Directory> 

# For PHP
NameVirtualHost blog2.tung7.com:80
<VirtualHost blog2.tung7.com:80>
     ServerAdmin zhuyuandong@vip.qq.com
     ServerName blog2.tung7.com
     DocumentRoot "D:\AppServ\www"

     DirectoryIndex index.html index.htm index.php
     ErrorLog logs/blog2-error_log.txt
     CustomLog logs/blog2-access_log.txt common
</VirtualHost>

保存重启Apache,即可。

然而这里还有一个问题,就是我们如果直接使用IP访问结果会怎么样?

实际上,Apache有一个默认的VirtualHost用于IP访问,当httpconf中NameVirtualHost的时候,第一个声明的VirtualHost将用于IP访问。所以,现在如果直接使用IP访问的话,将会访问到JAVA站点。BUT, 我们一般都是禁止使用IP直接访问的,下面来实现禁止IP直接访问。

禁止IP直接访问

第一种方法

同样在http.conf中添加一个VirtualHost

# Forbidden IP
NameVirtualHost 121.121.121.121:80
<VirtualHost 121.121.121.121:80>
  #必需指定这个ip地址
     ServerName 121.121.121.121
     <Location />
     Order allow,deny  
     Deny from all  
     </Location>
</VirtualHost>

访问将返回403错误。

当然,我们可以很闷骚地自己设计错误页面。在<VirtualHost *:80>和加入以下代码:

ErrorDocument 500 /500.html
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html

第二种方法

第一种方法只是返回403,并没有确切告诉访问者禁止IP访问。

# Forbidden IP
NameVirtualHost 121.121.121.121:80
<VirtualHost 121.121.121.121:80>
     ServerName 121.121.121.121
     DocumentRoot "c:\AppServ\www\nosite"
     DirectoryIndex index.html
</VirtualHost>

相当于为该IP新建一个站点nosite,然后在里面新建一个设计好的index.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Forbidden View By IP</title>
</head>
<body>Your Nice Design</body>
</html>

然后直接访问IP就会访问到nosite站点下的index.html了。

Apache多域名多站点配置

上一篇:Typora自定义Gitee图床上传脚本


下一篇:Css布局样式调整记录