虚拟主机(Virtual Host)是指在一个机器上运行多个网络站点 (比如:www.company1.com和www.company2.com)。 如果每个网络站点拥有不同的IP地址,则虚拟主机可以是"基于IP"的; 如果只有一个IP地址,也可以是"基于主机名"的, 其实现对最终用户是透明的。具体细节可以查看Apache官方说明 。
一. “基于主机名”虚拟主机的配置
Listen 81
NameVirtualHost *:81
<VirtualHost *:81 >
ServerAdmin example@company.com
DocumentRoot yourRoot
<Directory "yourRoot ">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
配置说明:
81 : 为端口号,可以是其他现在系统未用的端口
yourRoot : linux下格式形如: /export/www 注意最后没有"/"
将上面的添加到apache的配置文件httpd.conf(linux下在/usr/local/apache2/conf/,视具体情况而定),然后重新启动Apache .
注意:
要配置基于主机名的虚拟主机,必须保留原有的80端口。
二. 查看配置是否成功
在浏览器中输入 http://localhost:81 查看是否配置成功。
三. 常见问题常见解决方案
当在浏览器中查看配置成功与否出现问题时,可优先到Apache官方网站的FAQ 上或用搜索引擎搜索你的问题。
我这里就最常见403问题:
Forbidden
You don't have permission to access / on this server.
提供几种常见的解决方法:
1.按上面的配置正确,特别是:
Order allow,deny
Allow from all
2. 确保youRoot文件夹下有index.html文件(或名为index而后缀为其他形式(如.jsp .php等)的文件) ,因为Apache默认以index.html为网站首页,如果没有这个文件就会出现上面的403错误。
注:如果你想以其他形式的文件(如:index.jsp或index.php等)作为出现的网页,可将Apache的配置文件中的:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
改为(如你想用index.jsp):
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
如果需要浏览该文件夹下的内容,可以在</Directory>前添加:
Options Indexes
就可以了。
3. 针对linux用户,windows或其他用户一般没这种情况。linux系统中一般会自带apache,在修改了配置文件后,最好到安装Apache的目录下重启Apache。
如果是CentOS系统,则有可能以下原因
检查了一圈httpd.conf和目录权限,均没有发现问题。
最后,看了这篇文章,发现是因为系统启动了SELINUX导致的。
关闭SELINUX
setenforce 0
或
vim /etc/selinux/config
修改
SELINUX=enforcing
改成
SELINUX=disabled
细检查了一遍配置文件httpd.conf,找到这么一段:
代码如下 | 复制代码 |
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow deny from all Satisfy all </Directory> |
然后试着把deny from all中的deny改成了allow,保存后重起了apache,然后再一测试我的网页
apache
解决Apache下403 Forbidden错误
正 文:
今天在公司电脑上安装Apache,版本2.2.8,装完刚测试可以;配置了下php的php.in文件再次localhost打开发现错误:HTTP 错误 403 - 禁止访问,即403 Forbidden:You don't have permission to access / on this server.权限又不够了?
马上打开apache的配置文件httpd.conf,逐行检查。在大约快一半的地方有以下这段代码:
代码如下 | 复制代码 |
|
发现了吧。由于配置了php后,这里的“Deny from all”已经拒绝了一切连接。把该行改成“allow from all”,修改后的代码如下,问题解决。
代码如下 | 复制代码 |
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow allow from all </Directory> |
系统是centos,You don't have permission to access / on this server.
在google上搜索了一下,大部分的解决方法就是。
代码如下 | 复制代码 |
<Directory /> Options FollowSymLinks <Directory /> |
>
我改了之后还是会出现上面的错误,于是看一下自己设定的工作目录权限。
代码如下 | 复制代码 |
Options ExecCGI Includes |
改成下面这行设置后,显示正常。
代码如下 | 复制代码 |
Options Indexes FollowSymLinks |
当访问类unix操作系统上的/usr/local/apache2/htdocs/foo/bar.htm文件时,你收到了Permission Denied的错误。
首先,查看文件的访问权限:
代码如下 | 复制代码 |
$ cd /usr/local/apache2/htdocs/foo |
如果须要的话,就修复它们:
代码如下 | 复制代码 |
$ chmod 644 bar.html |
对文件夹以及每个父文件夹做相同的操作
代码如下 | 复制代码 |
(/usr/local/apache2/htdocs/foo,/usr/local/apache2/htdocs,/usr/local/apache2,/usr/local/,/usr): $ ls -la |
在一些系统上,可使用工具namei来列出各个路径上的不同组件的访问权限,然后去发现是否有权限问题:
代码如下 | 复制代码 |
$ namei -m /usr/local/apache2/htdocs/foo/bar.html |
3、最后,如果还是没有解决问题,那么需要查看扩展的访问权限。
使用setenforce 0关闭SELinux,看是否解决问题