apache虚拟主机配置
Apache 虚拟主机的配置方法总结

Apache 虚拟主机的配置方法总结:虚拟主机1. 在httpd.conf中找到Include conf/extra/httpd-vhosts.conf 把前面的#去除2. 添加监听如:Listen 8080Listen 192.168.0.100:803. 删除或注掉DocumentRoot "D:/Apache2.2/htdocs"# DocumentRoot: The directory out of which you will serve your# documents. By default, all requests are taken from this directory, but# symbolic links and aliases may be used to point to other locations.##DocumentRoot "D:/Apache2.2/htdocs"4. 在配置extra/httpd-vhosts.conf时,如果要保留原来httpd.conf中默认的访问目录和域名,必须为默认域名也创建一个virtualHost,样例如下(监听端口是8080):5. httpd-vhosts.conf配置如下:NameVirtualHost *:8080NameVirtualHost 192.168.0.100:80在文档底部接着添加:<VirtualHost 192.168.0.100:80>ServerName njumasoftDocumentRoot F:/php/UmasoftFrw<Directory />Options FollowSymLinksAllowOverride NoneOrder allow,denyAllow from allSatisfy all</Directory>DirectoryIndex index.html index.phpCustomLog "logs\njumasoft-access.log" commonErrorLog "logs\njumasoft-error.log"</VirtualHost><VirtualHost 192.168.0.100:8080>ServerName mysqldDocumentRoot D:/Apache2.2/htdocs<Directory />Options FollowSymLinksAllowOverride NoneOrder allow,denyAllow from allSatisfy all</Directory>DirectoryIndex index.html index.phpCustomLog "logs\mysqld-access.log" commonErrorLog "logs\mysqld-error.log"</VirtualHost>其它设置参见:/Apache/ApacheMenu/vhosts/index.html虚拟目录1.找到"conf/httpd.conf" 文件,按如下示例设置:<IfModule dir_module>DirectoryIndex index.html index.html.var index.phpAlias /mysql D:/Apache2.2/htdocs/phpMyAdmin<Directory D:/Apache2.2/htdocs/phpMyAdmin>Options MultiViewsAllowOverride NoneOrder allow,denyAllow from all</Directory></IfModule>注:以上配置均需重启Apache。
如何在Linux上安装和配置Apache服务器

如何在Linux上安装和配置Apache服务器Apache是一个流行的开源Web服务器软件,被广泛用于搭建和管理网站。
在Linux系统上安装和配置Apache服务器是一项基本的技能。
本文将介绍如何在Linux操作系统下安装和配置Apache服务器。
一、安装Apache服务器首先,打开终端窗口,并使用以下命令来更新软件包列表:sudo apt update接下来,使用以下命令来安装Apache服务器:sudo apt install apache2安装过程中,您需要输入管理员密码进行确认。
安装完成后,Apache服务器将自动启动。
二、配置Apache服务器1. 配置文件路径Apache的配置文件位于/etc/apache2目录下。
在终端中使用cd命令进入该目录:cd /etc/apache22. 主配置文件编辑主配置文件apache2.conf,使用以下命令打开该文件:sudo nano apache2.conf在打开的文件中,可以找到一些常用的配置选项,您可以根据需要进行修改。
例如,您可以更改服务器名称、监听端口等。
3. 虚拟主机配置虚拟主机配置允许您在同一台服务器上运行多个网站。
默认情况下,Apache服务器已经为您配置了一个默认的虚拟主机。
如果您想添加更多的虚拟主机,您可以在/etc/apache2/sites-available目录下创建配置文件。
使用以下命令进入该目录:cd /etc/apache2/sites-available使用以下命令创建一个新的虚拟主机配置文件,例如mywebsite.conf:sudo nano mywebsite.conf在此配置文件中,您可以设置您的网站的域名、目录路径和其他相关设置。
保存并关闭文件。
接下来,使用以下命令启用新的虚拟主机配置文件:sudo a2ensite mywebsite.conf最后,重新加载Apache服务器以应用配置更改:sudo service apache2 reload您的新虚拟主机现在应该已经生效了。
虚拟机中如何在Linux上安装和配置Apache服务器

每日一句:I am a slow walker, but I never walk backwards.(我走得很慢,但从来不后退。
)一、本次配置a)操作系统:Linuxb)服务器:httpd-2.4.3.tar.gzc)APR:apr-1.4.6.tar.gzd)APR-Util:apr-util-1.5.1.tar.gze)PCRE:pcre-8.31.tar.gz二、Linux安装程序的基本步骤1、./configure --prefix=安装目录2、make3、make install三、Linux安装apache服务器步骤:1、gzip -d httpd- NN.tar.gz (阿帕奇服务器安装包)2、tar xvf httpd- NN.tar(执行第一步后出现这个文件)3、cd httpd- NN(执行完第二步后会产生一个服务器的目录,使用cd命令进入)4、安装程序的基本步骤5、安装目录/bin/apachectl -k start (启动服务器)6、测试。
打开浏览器输入http://服务器IP,如果出现It Works,则服务器安装成功7、安装过程中遇到的问题a)安装服务器时提示缺少apr文件(到官网下载后进行安装(还是按照安装步骤))b)安装apr时提示确实apr-util(到官网下载后进行安装(还是按照安装步骤))c)安装服务器时提示确实pcre(到官网下载后进行安装(还是按照安装步骤))四、配置apache的虚拟主机a)将“安装目录\conf\httpd.conf ”中“#Include etc/extra/httpd-vhosts.conf ”的#去掉。
这样才能使httpd-vhosts.conf文件起作用,或者直接在httpd.conf中写配置也可以(不建议这么做)b)在httpd-vhosts.conf中配置VirtualHost(注:Apache在接受到请求时,首先会默认第一个VirtualHost,然后再找匹配的,如果没有匹配的,默认就是第一个VirtualHost起作用)<VirtualHost *:80> #主机名ServerAdmin admin@ #如果服务器有任何问题将发信到这个地址DocumentRoot /www/ #虚拟主机的指向目录ServerName #访问主机的域名[:端口号]ServerAlias * #- -这个不知道是啥。
CentOS7Apache服务的安装与配置

CentOS7Apache服务的安装与配置⼀、Apache简介Apache 是⼀个知名的开源Web服务器。
早期的Apache服务器由Apache Group来维护,直到1999年6⽉Apache Group在美国德拉⽡市成⽴了⾮盈利性组织的公司,即Apache软件基⾦会(Apache Software Foundation,ASF)。
⽹站需要web服务器来架构,⽹页设计美⼯⼈员(flash,dreamweaver,firework,photoshop等),⽹页开发⼈员(php,.net,jsp等),⽹站建⽴好后,需要我们维护,优化,排错,架构延伸扩容等。
简单点说就是我们如果要浏览⼀个⽹页的话,基本上所有的⽹站都使⽤的是http协议来进⾏数据传输的!⾄于怎么样传输,我们做为运维来说就没有必要去深究了,那是做html前端开发⼈员要去考虑的事情!Apache由内核、标准模块和第三⽅提供的模块三个层次组成。
通常Apache在默认安装时,只安装图中的1、2两部分。
根据⽤户需要,⽤户可以通过修改配置去掉⼀些默认安装的标准模块;也可以通过修改配置安装⼀些默认不安装的模块。
同时,如果⽤户需要,也可以安装⼀些第三⽅提供的模块。
[此⽹站会有每⽉份的世界上⽹站使⽤的WEB服务器的使⽤率统计](https:///archives/category/web-server-survey/)Apache是世界上应⽤最⼴泛的web服务器之⼀[ Apache官⽹](/)⼆、CentOS下的Apache1. ⽹站分为两种静态⽹站:Apache,Nginx,html动态⽹站:php/perl/python,jsp(java), .net2. Apache服务概览软件包: httpd, httpd-devel, httpd-manual服务类型:由systemd启动的守护进程配置单元: /usr/lib/systemd/system/httpd.service守护进程: /usr/sbin/httpd端⼝: 80(http), 443(https)配置: /etc/httpd/Web⽂档: /var/www/html/Apache⽇志记录⽬录:/var/log/httpd/该⽬录下有两种⽂件:access_log # 记录客户端访问Apache的信息,⽐如客户端的iperror_log # 记录访问页⾯错误信息Apache服务启动的记录⽇志:/var/log/messages # 这个⽇志是系统的⼤集合3. 配置Apache服务器的准备⼯作系统平台: CentOS 7.3DHCP Server: 192.168.1.20第1步:服务器设置静态IP第2步:更改主机名,写/etc/hosts记录[root@Apache ~]# echo "192.168.1.20 Apache" >> /etc/hosts --往/etc/hosts添加ip和主机名[root@Apache ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.20 Apache第3步:关闭防⽕墙[root@Apache ~]# systemctl stop firewalld --临时关闭防⽕墙[root@Apache ~]# systemctl disable firewalld --永久关闭防⽕墙第4步:关闭selinux临时关闭:[root@Apache ~]# setenforce 0setenforce: SELinux is disabled永久关闭:[root@Apache ~]# vim /etc/selinux/configSELINUX=disabled # 将enforcing改为disabled[root@Apache ~]# reboot --重启系统永久⽣效三、Apache服务的搭建与配置1. 使⽤yum包安装Apache软件[root@Apache ~]# yum -y install httpd*[root@Apache ~]# rpm -qa | grep httpd --查看安装的http包httpd-manual-2.4.6-67.el7.centos.6.noarchhttpd-tools-2.4.6-67.el7.centos.6.x86_64httpd-2.4.6-67.el7.centos.6.x86_64httpd-devel-2.4.6-67.el7.centos.6.x86_64安装成功后,会产⽣下⾯两个⽂件/etc/httpd/conf/httpd.conf # 主配置⽂件/var/www/html # 默认⽹站家⽬录2. 认识配置⽂件⾥的主要参数[root@Apache ~]# vim /etc/httpd/conf/httpd.conf31 serverRoot "/etc/httpd" # 存放配置⽂件的⽬录42 Listen 80 # Apache服务监听端⼝66 User apache # ⼦进程的⽤户67 Group apache # ⼦进程的组86 ServerAdmin root@localhost # 设置管理员邮件地址119 DocumentRoot "/var/www/html" --⽹站家⽬录# 设置DocumentRoot指定⽬录的属性131 <Directory "/var/www/html"> # ⽹站容器开始标识144 Options Indexes FollowSymLinks # 找不到主页时,以⽬录的⽅式呈现,并允许链接到⽹站根⽬录以外151 AllowOverride None # none不使⽤.htaccess控制,all允许156 Require all granted # granted表⽰运⾏所有访问,denied表⽰拒绝所有访问157 </Directory> # 容器结束164 DirectoryIndex index.html # 定义主页⽂件,当访问到⽹站⽬录时如果有定义的主页⽂件,⽹站会⾃动访问316 AddDefaultCharset UTF-8 # 字符编码,如果中⽂的话,有可能需要改为gb2312或者gbk,因你的⽹站⽂件的默认编码⽽异3. 启动Apache⽹站[root@Apache ~]# systemctl start httpd.service[root@Apache ~]# lsof -i:80 --查看httpd服务是否启动COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEhttpd 20585 root 4u IPv6 402909 0t0 TCP *:http (LISTEN)httpd 20586 apache 4u IPv6 402909 0t0 TCP *:http (LISTEN)httpd 20587 apache 4u IPv6 402909 0t0 TCP *:http (LISTEN)httpd 20588 apache 4u IPv6 402909 0t0 TCP *:http (LISTEN)httpd 20589 apache 4u IPv6 402909 0t0 TCP *:http (LISTEN)httpd 20590 apache 4u IPv6 402909 0t0 TCP *:http (LISTEN)启动成功后使⽤浏览器:输⼊⾃⼰的IP地址会看到⼀个红帽的欢迎页⾯:[root@Apache ~]# firefox 192.168.1.20每次打开浏览器不是很⽅便,因此我们可以使⽤⽂本浏览器,⽅便测试。
apache下配置详解

Apache下关于虚拟主机的配置关于虚拟主机的概述:配置虚拟主机主要应用场景:多站点访问,一个服务器放置了多个站点服务。
主要的三种配置方法:1、基于IP 2、基于端口3、基于主机名步骤详解:1.虚拟主机使用的话,必须将中心服务关闭,在/etc/httpd/conf/httpd.conf文件里,将DocumentRoot一行注释掉来关闭中心服务。
2.可以在httpd.conf文件最后面直接添加虚拟主机的配置内容,也可以在/etc/httpd/conf.d/下面创建一个自己的配置文件,如:my.conf文件。
3.my.conf文件配置详解1)基于IP配置<VirtualHost 192.168.0.112:80>ServerName DocumentRoot "/www/"</VirtualHost><VirtualHost 192.168.0.113:80>ServerName DocumentRoot "/www/"</VirtualHost>以上2个虚拟主机配置的IP分别为192.168.0.113和192.168.0.112,端口同为80端口。
这样在浏览器分别输入不同的ip或域名时就会访问到不同的站点。
Tips:如果只有一块网卡可以同过ipaddr add 192.168.0.112 dev eth0来添加辅助ip。
如果是域名方式访问,还需要在windows和linux下的hosts文件里面自行添加域名解析。
关于辅助ip的设置:ipaddr add 192.168.0.112/24 dev eth0这是为网卡设置一个辅助ip。
假如一个网卡的ip地址为192.168.0.22,执行上面的命令,在用ifconfig 查看,会发现有两个ip地址,而192.168.0.22称为主地址(Primary IP address),而192.168.0.112称为辅助地址(secondary IP address),一块网卡是允许有多个IP地址的,所以就算再多添加几个secondary IP 也是合法行的。
APACHE安装配置说明

APACHE安装配置说明⼀、软件下载⼆、环境检查# rpm -qa|grep zlibzlib-devel-1.2.3-3zlib-1.2.3-3# rpm -qa|grep sslopenssl-devel-0.9.8b-10.el5openssl-0.9.8b-10.el5如果需要依赖包,安装其对应的devel包即可,此处仅⽤到zlib和ssl。
另,如果有httpd包,要先卸载掉或停⽌其服务。
三、编译安装1、针对安装⽬的的说明(来⾃INSTALL⽂件)如果是开发者则使⽤此选项,--with-included-apr利于连接apache的代码或者是调试apache,其消除了由于版本或者编译中跟APR或者APR-util代码产⽣的不匹配;如果从⼦版本编译apache,要先运⾏buildconf(需要Python,GNU autoconf和libtool),然后运⾏configure。
发⾏包不⽤。
如果要在FreeBSD5.4之前编译时包含apache的threaded MPM,需要使⽤--enable-threads和--with-mpm 参数在Mac上编译⼦版本,要使⽤GNU Libtool 1.4.2及以上版本2、关于SSL加密和正则表达式(来⾃⽂件README)Apache2.0及以上版本在⽬录modules/ssl/下包含了mod_ssl模块⽤于配置和监听ssl⽹络接⼝的连接。
(另外,⼀些apr-util版本在⽬录srclib/apr-util/ssl/下提供了ssl⽹络接⼝)带有单词crypto的包的名字,可能包含openssl加密库的⽬标代码。
如果apache的加密功能不理想或者要排除再重分配,则可以使⽤包的名字包含nossl的发布包。
Apache使⽤PCRE包包含的正则表达式。
3、对configure参数的说明配置帮助表:-h, --help显⽰帮助信息display this help and exit--help=short ⽤short参数将只显⽰正在运⾏的当前脚本的选项,⽽不能列出适⽤于Apache配置脚本所运⾏的外部配置脚本的选项display optionsspecific to thispackage--help=recursive 使⽤recursive参数将显⽰所有程序包的简短描述display the shorthelp of all theincluded packages-V, --version显⽰版本display version information and exit-q, --quiet, --silent不显⽰checking……信息do notprint`checking...' messages--cache-file=FILE在指定⽂件中存储测试结果cache test results in FILE [disabled]-C, --config-cache 在⽂件config.cache中存储测试结果alias for `--cachefile=config.cache'-n, --no-create configure脚本运⾏结束后不输出结果⽂件,常⽤于正式编译前的测试。
apache_配置多个ip网站站点

附录:进一步的提示
一个简单示例
<VirtualHost www.abc.dom>
ServerAdmin webgirl@abc.dom
DocumentRoot /www/abc
</VirtualHost> webgirl@abc.dom
DocumentRoot /www/abc
本文档的涵义一言以蔽之就是:不要让Apache在解析配置文件的时候用到DNS。 如果Apache在解析配置文件时用到了DNS,您的服务器就会发生可靠性的问题(也可能根本无法启动), 或者遭致拒绝(偷窃)服务攻击(包括用户可以从其他用户那里偷窃点击)。
一个简单示例
拒绝服务
"main server"地址
基于域名的虚拟主机相对比较简单,因为我们只需要配置DNS服务器将每个主机名映射(CNAMES)到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址(IPV4)不足的问题。这种方式下,各个虚拟主机共享同一份Apache,因此有CGI程序运行时,安全性也不高。
</VirtualHost> webmaster@
DocumentRoot /www/docs/
ServerName
ErrorLog logs/-error_log
TransferLog logs/-access_log
用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于主机名字的虚拟主机,下面我们分别介绍一下它们的实现方法以及优缺点。以便大家在具体的应用中能够选择最合适的实现方法。
Ubuntu Linux Apache虚拟主机的安装配置档

Ubuntu Linux Apach虚拟主机的安装配置目标1.创建基于IP 的虚拟主机用于一个项目的整体测试2.创建基于用户的虚拟主机用于用户测试自己的代码开始创建虚拟主机的目录结构sudo /home/wwwcd /home/wwwsudo mkdir 192.168.0.251 192.168.0.252cd 192.168.0.251sudo mkdir cgi-bin htdocs logs dbcd ../192.168.0.252sudo mkdir cgi-bin htdocs logs dbtree /home/www/home/www|-- 192.168.0.251| |-- cgi-bin| |-- db| |-- htdocs| `-- logs`-- 192.168.0.252|-- cgi-bin|-- db|-- htdocs`-- logs1.要在192.168.0.251 和192.168.0.252 上创建两个基于IP 的虚拟主机,为了直观起见,在/home/www 下分别创建了目录192.168.0.251 和192.168.0.2522.cgi-bin 子目录用于存放CGI 脚本3.db 子目录用于存放SQLite 数据库4.htdocs 子目录用于存放站点文档5.logs 子目录用于存放站点日志创建虚拟主机的管理帐号并设置目录权限sudo useradd -g www-data -d /home/www/192.168.0.251 wuser1sudo useradd -g www-data -d /home/www/192.168.0.252 wuser2sudo passwd wuser1sudo passwd wuser2sudo chown -R wuser1.www-data /home/www/192.168.0.251sudo chown -R wuser2.www-data /home/www/192.168.0.2521.将192.168.0.251 虚拟主机的管理者赋予wuser1;将192.168.0.252 虚拟主机的管理者赋予wuser2;允许他们使用ssh 登录2.wuser1 和wuser2 的主组均设置为www-data,这样设置的方便之处在于:若站内有Apache 进程可写的内容,只需添加组可写权限即可配置虚拟网络接口和主机名解析使用如下命令:sudo vim /etc/network/interfaces添加如下的配置auto eth0:1iface eth0:1 inet staticaddress 192.168.0.251netmask 255.255.255.0network 192.168.0.0broadcast 192.168.0.255gateway 192.168.0.1auto eth0:2iface eth0:2 inet staticaddress 192.168.0.252netmask 255.255.255.0network 192.168.0.0broadcast 192.168.0.255gateway 192.168.0.1然后使用如下命令重新启动网络服务sudo /etc/init.d/networking restart然后在/etc/hosts 文件中添加如下的行192.168.0.251 web1192.168.0.252 web2配置ApacheS1. 在/etc/apache2/sites-available/ 目录下创建新的文件192.168.0.251,添加如下的配置/etc/apache2/sites-available/192.168.0.251DocumentRoot "/home/www/192.168.0.251/htdocs/"Options Indexes FollowSymLinks MultiViewsAllowOverride AllOrder allow,denyallow from allScriptAlias /cgi-bin/ /home/www/192.168.0.251/cgi-bin/AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from allErrorLog /home/www/192.168.0.251/logs/error.logCustomLog /home/www/192.168.0.251/access.log combinedS2. 在/etc/apache2/sites-available/ 目录下创建新的文件192.168.0.252,添加如下的配置/etc/apache2/sites-available/192.168.0.252DocumentRoot "/home/www/192.168.0.252/htdocs/"Options Indexes FollowSymLinks MultiViewsAllowOverride AllOrder allow,denyallow from allScriptAlias /cgi-bin/ /home/www/192.168.0.252/cgi-bin/AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from allErrorLog /home/www/192.168.0.252/logs/error.log CustomLog /home/www/192.168.0.252/access.log combinedS3. 重新启动Apachesudo a2enmod rewritesudo a2enmod php5sudo a2enmod perlsudo a2enmod mod_pythonsudo a2ensite 192.168.0.251sudo a2ensite 192.168.0.252sudo /etc/init.d/apache2 restart配置站点内容的上传FTP 服务器S1: 使用如下命令安装proftpdsudo apt-get install proftpd proftpd-docS2. 使用默认配置即可实现本地用户的上传和下载Samba 服务器S1. 使用如下命令sudo vi /etc/samba/smb.conf添加如下的配置行:/etc/samba/smb.conf[homes]comment = Home Directoriesbrowseable = nowritable = yescreate mask = 0644directory mask = 0755S2. 配置Samba 用户通过如下命令添加Samba 用户sudo smbpasswd -a wuser1sudo smbpasswd -a wuser2S3. 启动Samba 服务器sudo /etc/init.d/samba restart创建基于用户的虚拟主机*可能开发者在Windows 客户机没有创建开发环境*为了使每个开发者可以测试自己的代码,可以创建基于用户的虚拟主机创建用户帐号sudo useradd -g www-data -m user1sudo useradd -g www-data -m user2sudo passwd user1sudo passwd user21.用户需要在宿主目录下创建public_html 子目录,将Web 文档放入其中,可以通过URL http://IPorHostname/~username 访问自己的站点2.若进行CGI 开发,还需要在宿主目录下创建cgi-bin 子目录配置Apache使用如下命令启用userdir 模块即可sudo a2enmod userdir若进行CGI 开发,需要修改/etc/apache2/mods-available/userdir.confUserDir public_htmlUserDir disabled rootAllowOverride FileInfo AuthConfig LimitOptions MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/cgi-bin/$2 # 添加此行,意思是匹配~user_name/cgi-bin/cgi_name自动映射到/home/user_name/cgi-bin/cgi-name脚本关于默认的虚拟主机Ubuntu 中文件/etc/apache2/sites-available/default 配置的是默认的虚拟主机。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内容:这里讲述一些Apache虚拟主机中比较容易发生的问题和解决的一些基本思路,给出一些比较典型的错误的示例理解。
一.设置虚拟主机会发生些什么问题?基本上会最容易遇到两个问题:1.虚拟主机发生冲突。
2.宿主机的丢失。
(当然还会遇到其他很多的问题,但是这里我们先讨论这2个问题)1.虚拟主机发生冲突:无论是采用哪种形式的虚拟主机,都会发生虚拟主机冲突的问题,尤其是在Apache的虚拟主机系统变得庞大而复杂的时候尤其容易发生。
但是请记住,无论什么采用什么形式的虚拟主机,甚至多种混用,如果造成虚拟主机冲突的话,根本原因就只有一个:“至少有一个原因,使得Apache不能区别一些虚拟主机”。
之前一个一直强调的一个部分就是“Apache需要能够做到区分每个虚拟主机”。
如果能够通过IP区分的话,那就通过IP区分;如果需要多个主机共享一个IP 的话,那么可以设定不同的端口让Apache去区分;如果需要多个虚拟主机使用一个IP并且端口也用同一个的话,那么也要通过不同的域名来让Apache做到对不同虚拟主机的区分。
一个最经常发生的错误,就是在多个IP地址上进行基于域名方式虚拟主机的配置当中,没有指定和规划好哪几个虚拟主机是归属于哪个IP地址下,造成Apache对一些虚拟主机不能区别。
沿用第二章中的示例,以下给出一个典型错例。
[root@kcentos5 ~]# vi /etc/httpd/myconf/virthosts.conf------------(注意:此为典型错误配置的示例)----------NameVirtualHost 192.168.1.111:80(VirtualHost后面没有指定自己归属的IP地址)DocumentRoot /var/www/vhost1/ServerName (VirtualHost后面没有指定自己归属的IP地址)DocumentRoot /var/www/vhost2/ServerName NameVirtualHost 192.168.1.222:80(VirtualHost后面没有指定自己归属的IP地址)DocumentRoot /var/www/vhost3/ServerName (VirtualHost后面没有指定自己归属的IP地址)DocumentRoot /var/www/vhost4/ServerName -------------------------------------------------------在这个虚拟主机的配置当中,通过2个NameVirtualHost配置项指出Apache将在192.168.1.111和192.168.1.222 这两个IP地址上分别做基于域名的虚拟主机。
但是,在每个虚拟主机的配置当中,又没有在这个虚拟主机头配置当中指定自己所归属的IP地址,虽然在每个虚拟主机里是同过ServerName写明了自己应该受理的域名,但是对于Apache来说,即使得到了客户端对哪个域名的请求,但是它也不知道如何进一步给自己的哪个网络接口的IP地址上的虚拟主机去受理。
那么这个时候Apache遇到这样的问题会怎么做呢?我们就先按以上的错误配置来启动httpd服务看看响应。
[root@kcentos5 ~]# service httpd restart-------------------------------------------------------Stopping httpd: [ OK ] Starting httpd: [Sun Sep 23 19:53:38 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence告警:默认的虚拟主机在监听的80端口上有重叠,因此第一个虚拟主机将获得优先。
[Sun Sep 23 19:53:38 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence[Sun Sep 23 19:53:38 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence[Sun Sep 23 19:53:38 2007] [warn] NameVirtualHost 192.168.1.111:80 has noVirtualHosts告警:网络接口192.168.1.111上不认为有虚拟主机的存在。
[Sun Sep 23 19:53:38 2007] [warn] NameVirtualHost 192.168.1.222:80 has no VirtualHosts告警:网络接口192.168.1.222上不认为有虚拟主机的存在。
[ OK ]-------------------------------------------------------再通过httpd -S命令来更加明确发生的问题,以及发生该问题后Apache所将采取的措施。
[root@kcentos5 ~]# httpd -S-------------------------------------------------------[Sun Sep 23 20:22:43 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence[Sun Sep 23 20:22:43 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence[Sun Sep 23 20:22:43 2007] [warn] _default_ VirtualHost overlap on port 80, the first has precedence告警:默认的虚拟主机在监听的80端口上有重叠,因此第一个虚拟主机将获得优先。
[Sun Sep 23 20:22:43 2007] [warn] NameVirtualHost 192.168.1.111:80 has no VirtualHosts告警:网络接口192.168.1.111上不认为有虚拟主机的存在。
[Sun Sep 23 20:22:43 2007] [warn] NameVirtualHost 192.168.1.222:80 has no VirtualHosts告警:网络接口192.168.1.222上不认为有虚拟主机的存在。
VirtualHost configuration:wildcard NameVirtualHosts and _default_ servers:*:80 (/etc/httpd/myconf/virthosts.conf:16)*:80 (/etc/httpd/myconf/virthosts.conf:21)*:80 (/etc/httpd/myconf/virthosts.conf:28)*:80 (/etc/httpd/myconf/virthosts.conf:33)以上是通配*:80的主机Syntax OK配置语法正确--------------------------------------------------------所以我们可以根据上面的现象了解到一些事实:(1)在多个IP上面采用基于域名方式虚拟主机的时候,除非你只使用一个NameVirtualHost配置项来让Apache将所有自己监听的网络接口地址放在一起共同随机监听。
如果像这样你指定了多条NameVirtualHost来规划好哪些虚拟主机是归属于哪个IP地址的话,那么你也必须在每个虚拟主机的头配置项目里指定归属的NameVirtualHost的IP地址。
否则Apache将无法对其辨认。
(2)当发生了以上这样的失误,那么Apache首先将会把一些不能区分的虚拟主机作为“通配虚拟主机”,因为在Apache看来,这些通配的虚拟主机是不能区分的,认为这已经造成了冲突。
接下去Apache会做的就是将“通配虚拟主机”当中第一出现的虚拟主机作为“缺省主机”(在配置文件中位置上最先出现的出现的),然后将所有接受到的发往这些通配虚拟主机的请求都递交给这个缺省主机造成其他缺省主机的无效。
因此Apache也就认为了在自己的几个监听网络接口上,用户并没有设定虚拟主机,因为Apache就只认可每个地址上配置文件中首先出现的虚拟主机,而强行使其他的通配主机无效。
(3)最后的Syntax OK,表示配置文件的语法没有错误。
的确没有语法错误,本例中的错误是“逻辑错误”而不是语法上错误,Apache会检测语法通过,因此在这样的状况下,Apache也仍然启动OK。
正确的修改应该如下:-------------------------------------------------------NameVirtualHost 192.168.1.111:80DocumentRoot /var/www/vhost1/ServerName DocumentRoot /var/www/vhost2/ServerName NameVirtualHost 192.168.1.222:80DocumentRoot /var/www/vhost3/ServerName DocumentRoot /var/www/vhost4/ServerName -------------------------------------------------------[root@kcentos5 ~]# service httpd restartStopping httpd: [ OK ] Starting httpd: [ OK ] 2.虚拟主机的设定可能会造成宿主机的丢失:当Apache启用虚拟主机的功能时候,另外一个可能发生的问题就是原本宿主机的站点丢失了。
这通常发生在虚拟主机和宿主机站点共享一个IP所造成的。
举一个例子,这里我使用3个域名对应同一个IP-------------------------------------------------------192.168.1.21 (Apache宿主机主站点用的域名)192.168.1.21 (Apache虚拟主机站点用的域名)192.168.1.21 (Apache虚拟主机站点用的域名)-------------------------------------------------------然后Apache的全局主配置文件相关设定如下(只取相关部分):[root@kcentos5 ~]# cat /etc/httpd/conf/httpd.conf |grep -v "#"-------------------------------------------------------ServerName :80宿主站点监听的域名和端口DocumentRoot "/var/www/html" (主页显示为"MainHost")宿主站点主路径Include conf.d/*.confInclude myconf/*.conf扩展配置文件路径-------------------------------------------------------接着察看虚拟主机配置文件设定:[root@kcentos5 ~]# cat /etc/httpd/myconf/virthosts.conf-------------------------------------------------------NameVirtualHost 192.168.1.21:80DocumentRoot /var/www/vhost5/ (主页显示为"Vhost5")ServerName DocumentRoot /var/www/vhost6/ (主页显示为"Vhost6")ServerName -------------------------------------------------------启动服务:[root@kcentos5 ~]# service httpd restartStopping httpd: [ OK ] Starting httpd: [ OK ] 测试:使用Windows的客户端分别去访问三个域名,反馈结果如下:-------------------------------------------------------&n ... nbsp;"Vhost5"&n ... sp;-> "Vhost5"... ;-> "Vhost6"-------------------------------------------------------测试结果下访问宿主站点而反馈的内容和访问虚拟主机站点相同。