apache下单ip绑定多域名笔记

需求:好比用户有一个二级域名test.test.com和一个顶级域名try.com,只有一台主机一个ip,怎样实现使用test.test.com访问的是主机的/data/www/test下的内容,使用try.com访问的是/data/www/try下面的内容。html


1. 最简单的转发linux

修改httpd.conf(通常是/etc/httpd/conf/httpd.conf),首先下面两行若是被用#注释掉了就去掉#让其生效:
# 确保Apache在监听80端口
Listen 80

# 为虚拟主机在全部IP地址上监听
NameVirtualHost *:80url

接着添加下面的语句:
spa

<VirtualHost *:80>
DocumentRoot /data/www/test
ServerName test.test.com
</VirtualHost>htm

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName try.com
</VirtualHost>ip

2. 让www.try.com也能访问
get

这样完了吗?没完,使用www.try.com访问会惊奇的发现,居然内容和test.test.com同样,这是为何呢?由于这个配置文件之中越前面的优先级越高,若是没有匹配的,则以第一条为准,因而www.try.com就访问到/data/www/test目录去了。域名

解决办法就是添加这样一句:
it

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName www.try.com
</VirtualHost>test

3. 错误的url应该有提示

这回使用www.try.com访问的是try.com的内容了,可是还没完,你使用www2.try.com试试,又跑去/data/www/test目录了!

好吧,咱们在最前面添加这样一条:

<VirtualHost *:80>
DocumentRoot /data/www/default
</VirtualHost>

而后在default目录下放一个index.html文件提示url错误

这样使用www2.try.com或是其余任何无效的url好比fuck.try.com等等就能够被引到/data/www/default目录去了。


4. 不一样的Url有不一样的错误页面

ok,如今咱们有有新的要求了,假设咱们有一个二级域名test.test.com,两个顶级域名try.com和example.com,按照上面的规则,咱们的http.conf应该这样配置:

<VirtualHost *:80>
DocumentRoot /data/www/default
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/test
ServerName test.test.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName try.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName www.try.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/example
ServerName example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/example
ServerName www.example.com
</VirtualHost>

看似可以知足要求,咱们用test.test.com访问的是/data/www/test,用www.try.com和try.com访问的内容是/data/www/try,用www.example.com和example.com访问的是/data/www/example

可是,还有一个问题,fuck.try.com访问的是/data/www/default,而fuck.example.com访问的也是/data/www/default!这怎么能行呢?若是咱们在default下面设置的错误页面内容是“页面找不到,点我返回www.try.com”,同时一点按钮能够回到www.try.com首页,对于访问到fuck.try.com的无知游客来讲,这也许是个能起到做用的错误页面,可是对于那些访问到fuck.example.com的用户来讲,也显示什么“返回到www.try.com”就有些莫名其妙了。

也就是说这时候咱们的需求是为每个域名设置一个单独的错误页面。

因而咱们须要用到ServerAlias这个字段,按照以下的方法设置http.conf:

<VirtualHost *:80>

DocumentRoot /data/www/test
ServerName test.test.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName try.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/try
ServerName www.try.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/try/error
ServerName *.try.com

ServerAlias *.try.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/example
ServerName example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/example
ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /data/www/example/error
ServerName *.example.com

ServerAlias *.example.com
</VirtualHost>

注意蓝字的地方是咱们新加的,并且咱们去掉了本来转发到/data/www/default的那一条,由于没用了。红字的地方和以前的规则相比多了ServerAlias,能够使用通配符匹配多个域名,ServerAlias *.try.com即表示相似fuck.try.com、shit.try.com、damn.try.com都会匹配到这条规则(注意相似ServerAlias *.try.com的规则必定要放在同域名的规则的最后一条,若是放在前面,全部对该域名的访问都会按照该规则来转发了),经过这样的设定,fuck.try.com会被转发到/data/www/try/error,而fuck.example.com会被转发到/data/www/example/error,这样就作到了不一样的域名错误页面也不一样。


final. 使用ip能够访问到/data/www

最后,咱们加上一条规则,当使用ip访问的时候能够访问到/data/www,假设咱们的ip是127.0.0.1,那么127.0.0.1/try访问的就是/data/www/try,127.0.0.1/example访问的就是/data/www/example,一个主机绑定不少域名的时候,用这种管理上仍是比较方便的,要作到这一点,咱们只须要加上这么一条:

<VirtualHost *:80>
DocumentRoot /data/www
ServerName 127.0.0.1
</VirtualHost>



参考连接以下:

http://lamp.linux.gov.cn/Apache/ApacheMenu/vhosts/examples.html

相关文章
相关标签/搜索