apache基于域名和端口的虚拟主机

转自http://blog.chinaunix.net/space.php?uid=12247636&do=blog&id=2953447


为一个同事安装apache+php+mysql环境,安装完成后,apache启动后反应非常慢,折腾了好几天的时间都不见好,只能用自己的电脑当主机,让她访问进行工作,借鉴了如下这篇文章的内容,表示感谢


一.基于域名的虚拟主机是根据客户端提交的HTTP头中标识主机名的部分决定的。使用这种技术,很多虚拟主机可以共享同一个IP地址。基于域名的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。


比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

当然,你可以用一个固定的IP地址来代替NameVirtualHost和<VirtualHost>指令中的"*"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。

很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入<VirtualHost>小节中来解决这个问题。比如说在上面的第一个<VirtualHost>配置段中ServerAlias指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:

ServerAlias domain.tld *.domain.tld

这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerName或ServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。

最后,你可以把其他一些指令放入<VirtualHost>段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些<VirtualHost>段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有<VirtualHost>配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。

这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的<VirtualHost>段,并尝试找出一个与请求的主机名相同的ServerName或ServerAlias配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机。

综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot将永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到<VirtualHost>段中,并把它放到配置文件的最前面就可以了。


二,基于端口的虚拟主机
listen 800
listen 8080

<virtualhost 192.168.1.200:800>;
    documentroot /www/v-host1
</virtualhost>;
<virtualhost 192.168.1.200:6666>;
    documentroot /www/v-host2
</virtualhost>;
保存推出
mkdir -p /www/v-host1
mkdir -p /www/v-host2
echo "test 1">; /www/v-host1/index.html
echo "test 2">; /www/v-host2/index.html
apachectl restart
在浏览其中输入192.168.1.200:800


NameVirtualHost 222.73.*.*:8080
<VirtualHost 222.73.*.*:8080>
  ServerAdmin abc@abc.com
  DocumentRoot C:/AppServ/www/abc
  ServerName www.abc.net
  ErrorLog logs/xoops.54sy.com-error_log
  CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>

<VirtualHost 222.73.*.*:80>
  ServerAdmin abc@abc.com
  DocumentRoot C:/AppServ/www/abcdef
  ServerName www.abcdef.net
  ErrorLog logs/xoops.54sy.com-error_log
  CustomLog logs/xoops.54sy.com-access_log common
</VirtualHost>
 

Apache配置虚拟主机出现“错误403,你无权查看该页”的问题

配置多个域名绑在同一个IP上的虚拟主机时,会出现403错误,“禁止访问, 您无权查看该网页”,您可能没有权限用您提供的凭据查看此目录或网页。

自己的配置、权限都没有问题,查了一下网上 资料,原来是apache2的默认安全机制的问题,这样处理:

在httpd.conf中找到:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    deny from all
</Directory>

改为:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

或:

<Directory />
    Options FollowSymLinks ExecCGI Indexes
    AllowOverride None
    Order deny,allow
    deny from all
    Satisfy all
</Directory>



<Directory />
    Options FollowSymLinks ExecCGI Indexes
    AllowOverride None
    Order allow,deny
    allow from all
    Satisfy all
</Directory>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值