《2023年-配置apache虚拟主机.docx》由会员分享,可在线阅读,更多相关《2023年-配置apache虚拟主机.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、配置apache虚拟主机通过以下文章:实现:同一 ip不同端口对应不同的站点目录 具体实现:1.在 httpd.conf 中,设置 listen IP:80 listen IP:8080然后在virtualhost中设置:DocumnetRoot 1DocumnetRoot 2我们通常所说的虚拟主机url=j avascript:技术/url就是将一台(或者一组)服务器的资源(系统资源、网络带宽、存储空间等)按照一定的比 例分割成若干台相对独立的“小主机”的技术。每一台这样的“小主机”在功能上都可以实 现WWW、FTP、Mail等基本的Internet服务,就像使用独立的主机一样。目前网站服务
2、器的虚拟主机平台使用以开放的Apache为最多,其次是微软的Windows IISo Apache 具有跨平台(FreeBSD/Linux/Windows/Solaris/Other UNIX)、易于维护与最佳安 全性等优点。Apache是率先支持基于IP虚拟主机的服务器之一。Apache 1.1及其更新版本同时支持 基于IP和基于主机名的虚拟主机,不同的虚拟主机有时会被称为基于主机(host-based)或非 IP 虚拟主机(non-IP virtual hosts)o用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于主 机名字的虚拟主机,下面我们分别介绍一下它
3、们的实现方法以及优缺点。以便大家在具体的 应用中能够选择最合适的实现方法。一、Apache实现基于IP地址的虚拟主机(每个站点拥有一个独立IP地址)使用这种虚拟主机方式,首先要在服务器上为每个虚拟主机单独设置一个IP地址。这 些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地址来完成。有了多个IP 地址后,可以采用以下两种方式之一来设置Apache。1、为每个虚拟主机运行一份Apache采用这种方式,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间 互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配置文件就可以了,唯一 需要注意的是:必须使用“Liste
4、n”语句,强制每一份Apache仅仅在属于“自己”的IP地 址上接收服务请求。优点:各个虚拟主机之间互不干扰,安全性高。缺点:占用系统资源较多。2、多个虚拟主机共享同一份Apache采用这种方式,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影 响,尤其是执行CGI程序时,可能会带来一些严重的安全问题。设置这种虚拟主机时,只 要为每一个虚拟主机设置类似如下的信息即可:DocumentRoot /www/ghql优点:占用系统资源比上一种方式少。缺点:安全性低,每个虚拟主机仍然需要占用一个IP地址。例如服务器一个网卡上绑定有两个IP地址(172.16.3.40和172.16.3
5、.50)分别对应域名和 www.ghq2.org的服务,配置如下:服务器配置(apache的配置文件httpd.conf)Listen 80DocumentRoot /www/ghqlServerName DocumentRoot /www/ghq2ServerName www.ghq2.org配置简单说明:“Listen”默认httpd服务会监控第80号通信端口,“Listen”选项让用户自行指定apache服务器监控的IP地址或通信端口。“DocumentRoot”:指定叩ache服务器存放网页的根目录;“ServerName”:允许用户 自行设置主机名,这个名称将被送到远程连接程序,以取
6、代安装叩ache服务器主机的真实 名称。和构成虚拟主机的语法结构,其中的IP就是我们在服务器上绑定的不同的IP地址, 也可以是IP地址加上通信端口号(见下面的例子)。如果服务器有两个IP地址(172.16.3.40和172.16.3.50)分别对应域名和www.ghq2.orgo对每个域名,我们都希望在80端口和8080端口发布我们的网站。可以 这样配置:服务器配置(apache的配置文件httpd.conf)Listen 172.16.3.40:80Listen 172.16.3.40:8080Listen 172.16.3.50:80Listen 172.16.3.50:8080Docum
7、entRoot /www/ghql-80ServerName DocumentRoot /www/ghql-8080ServerName DocumentRoot /www/ghq2-80ServerName www.ghql.orgDocumentRoot /www/ghq2-8080ServerName www.ghq2.org因此,建立虚拟主机,我们要做好不同的IP对应的域名解析url=javascript:;T 作/url,建立相应的目录(如/www/ghql),将相应的主页内容存放在相应的目录中即可。二、Apache实现基于主机名的虚拟主机服务(一个IP地址实现多个网站)基于主机名字
8、的虚拟主机服务,是目前虚拟主机比较常用的一种方案。因为它不需要 更多的IP地址,无须什么特殊的软硬件支持。而且现在的浏览器大都支持这种虚拟主机的 实现方法。基于域名的的虚拟主机是根据客户端提交的HTTP头中的关于主机名的部分决定 的。使用这种技术,很多虚拟主机可以享用同一个IP地址。基于域名的虚拟主机相对比较简单,因为我们只需要配置DNS服务器将每个主机名映 射(CNAMES)到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名 就可以了。基于域名的服务器也可以缓解IP地址(IPV4)不足的问题。这种方式下,各个 虚拟主机共享同一份Apache,因此有CGI程序运行时,
9、安全性也不高。优点:只要一个IP地址就可以提供大量的虚拟主机服务。缺点:安全性差。维护这些虚拟主机时需耍更改配置文件,并且需要重新启动Apache 进程才能起作用。因此不适合进行大规模的虚拟主机服务。如果服务器只有一个IP地址,而在DNS中有很多映射到这个机器。我们想要在这个 机器上运行和www.ghq2.org两个站点。在Apache服务器的配置中创建一个 虚拟主机并不会自动在DNS中对主机名做相应更新。我们必须自己在DNS中添加域名来指 向我们的IP地址。否则别人是无法看到我们的web站点。服务器配置(apache的配置文件httpd.conf)# Ensure that Apache l
10、istens on port 80Listen 80# Listen for virtual host requests on all IP addressesNameVirtualHost *DocumentRoot /w ww/ghq 1ServerName # Other directives hereDocumentRoot /www/ghq2ServerName www.ghq2.org# Other directives here因为* (星号)匹配所有的地址,所以主服务器不接收任何请求。因为首先出现在配置文件中,所以它拥有最高优先级,可以认为是默认或首要服务器。这意味着 如果一个
11、接受的请求不能与某个ServerName指令相匹配,它将会由第一个VirtualHost所 伺服。当我们的IP地址无法确定的时候,使用*是很方便的-比如说,ISP给我们配置的是 动态IP地址(如ADSL拨号上网),而我们有使用了某种动态域名解析系统时。因为*匹配 任何IP地址,所以在这样的情况下,不论IP地址如何变化,我们都不需要另外进行配置。 上述配置就是我们在绝大多数情况下使用基于域名的虚拟主机时将要用到的。关于DNS和Apache本文档的涵义一言以蔽之就是:不要让Apache在解析配置文件的时候用到DNSo如果 Apache在解析配置文件时用到了 DNS,您的服务器就会发生可靠性的问题(
12、也可能根本无法 启动),或者遭致拒绝(偷窃)服务攻击(包括用户可以从其他用户那里偷窃点击)。一个简单示例拒绝服务main server”地址避免这些问题的小技巧附录:进一步的提示一个简单示例ServerAdmin webgirlabc.dom DocumentRoot /www/abc为了让Apache功能正常,一个虚拟主机绝对需要以下两部分的信息:ServerName和与服 务器对应的至少一个IP地址。这个示例没有包括IP地址,于是Apache必须用DNS来查 询www.abc.dom的地址。如果在某些不可预料的情况下,当您的服务器解析配置文件时没 有得到DNS的支持,那么这个虚拟主机 将不
13、会被配置。它将不会对任何请求作出反应。 (在Apache的L2版本之前,服务器甚至无法启动)。假设www.abc.dom的IP地址是1000。那么看看以下这个配置片断:ServerAdmin webgirlabc.dom DocumentRoot /www/abc现在Apache需要DNS对这个虚拟主机进行反向域名解析来确定ServerNameo如果反向解 析失败,那么这将导致这个虚拟主机部分功能丧失。(在Apache的1.2版本之前,服务器 将不能启动)。如果虚拟主机是基于域名的,它将完全不能使用,但如果它是基于IP的, 那么它将很有可能工作。然而,如果Apache不得不为一个已经包含了服务
14、器域名的服务器产生一个完整的URL,那么它将可能产生一个无效的URLo 以下是一个可以避免上述两个问题的配置片断.ServerName www.abc.domServerAdmin webgirlabc.dom DocumentRoot /www/abc拒绝服务拒绝服务主要由(至少)两种形式导致。如果您在运行Apache L2以前的版本,在上述两种 情况下,如果您的任何一个虚拟主机的DNS解析失败,您都会无法启动服务。在一些情况 下,DNS解析甚至不在您的控制范围之内。比如说,如果abc.dom是您的一个客户,而且 他们自己控制着DNSo那么仅仅是因为他们删除了 www.abc.dom这个记录
15、,都会导致您 的服务器(L2之前的版本)无法启动。另外一种形式就更隐蔽了。比如说下面这个配置片断:ServerAdmin webgirl abc.domDocumentRoot /www/abcServerAdmin webguydef.domDocumentRoot /www/def假设您已经为www.abc.dom设定了 10.0.0.1,而为www.def.dom设定了 10.0.0.2。更进一步, 假设自己控制DNSo在这种配置下,您已经把放到了一个可以将所有指 向的所有流量据为己有的情况之下。为了达到这样的目的,他们只需要把 www.def.dom的地址解析设置成10.0.0.1就可
16、以了。因为他们控制着自己的DNS服务,所 以您无法阻止他们把这个记录指向任何一个IP地址。然后,所有向10.0.0.1发出的请求(包括用户所有类似http:/www.abc.dom/任何字符的URL) 都将会为这个虚拟主机所接收。为了更好的理解着一切是怎样发生的,您需要一 个关于Apache是怎样将进入的请求分配给它的虚拟主机的深入说明。您可以在这里发现 一个完整的文档。main server”地址在Apache 1.1中,基于域名的虚拟主机支持 需要Apache知道运行着httpd的主机的IP地 址。一般来说可以用全局变量ServerName(如果存在)或者调用C的方法gethostname
17、(与在 命令行模式下键入hostname得到的返回值一样)。接着它就会利用DNS来查找这个地址。 目前还没有办法避免这样的查找。如果您担心这样的查找会因为您的DNS服务器没有启动而遭到失败的结果,您就可以在 /etc/hosts中插入一条记录来确定主机名(此文件中应该已经存在这条记录了,否则您的机器 无法正常启动)。然后,您要确认您的机器已经配置为当DNS解析失败的情况下,它将会 使用/etc/hosts根据所使用的操作系统不同,您可能需要在/etc/resolv.conf或/etc/nsswitch.conf 两个文件中选择一个进行编辑。如果您的服务器不必因为其他理由而使用DNS,您也许不必
18、在把HOSTRESORDER环境 变量设置为local”的情况下运行Apacheo这都取决于您所使用的操作系统和解析库。如 果您没有使用mod_env来控制环境变量,它还将影响到CGL强烈建议您参考一下您所使 用的操作系统附带的man帮助或FAQ。避免这些问题的小技巧在VirtualHost中使用IP地址在Listen中使用IP地址确保所有的虚拟主机拥有显式的ServerName定义。创建一个不包含任何服务页面的服务器附录:进一步的提示涉及到DNS的情况都很让人不舒服。在Apache 1.2中,我们努力想让服务器在DNS解析 失败的情况下至少保持能够启动,但可能我们还是没能做到最好。在当今重编
19、号成了必须 的Internet上面,在配置文件中显式的写明IP地址已经成为不合时宜的行为了。上述盗窃攻击的解决办法是,在一个正向的DNS查询结果后部署一个逆向DNS解析并将 两个域名进行比较。如果不同,就禁用相应的虚拟主机。这个方法需要一个正确配置了的 逆向域名解析服务器(因为FTP服务器和TCP封装进行的“双重逆向 DNS处理的普遍应 用,这已为大部分管理员所熟知了)。在某些情况下,如果没有使用IP地址而DNS解析又失败了,那么正常启动一个基于域名的 虚拟主机看来是不可能的。一些诸如禁用部分配置文件这样的权宜之计会带来比根本不能 启动更遭的不可预测的结果。随着HTTP/1.1的部署以及浏览器
20、和代理服务器开始支持Host头,我们完全避免使用基于IP 的虚拟主机也逐渐成为可能。这种状况下,web服务器也不必在配置时进行DNS的查询。 但在1997年3月,这些特性的采用还没有广泛到可以在重要的web服务器应用的地步。 和用于封装一组仅施用于特定虚拟主机的指令。任何在虚拟主机配置中可以使用的指令也同 样可以在这里使用。当服务器接受了一个特定虚拟主机的文档请求时,它会使用封装在配置 段中的指令。地址可以是虚拟主机的IP地址;虚拟主机IP地址对应的完整域名;字符*,仅与NameVirtualHost *配合使用以匹配所有的IP地址;或是字符串_default_,与基于IP的虚拟主机联用以捕获
21、所有没有匹配的IP地址。示例ServerAdmin webmasterDocumentRoot /www/docs/ServerName ErrorLog logs/-error_logTransferLog logs/-access_logIPv6的地址必须放入方括号中指定,否则作为可选项的端口号将无法确定。一个IPv6的示 例如下:ServerAdmin webmasterDocumentRoot /www/docs/ServerName ErrorLog logs/-error_logTransferLog logs/-access_log每个虚拟主机必须对应不同的IP地址、端口号或是不
22、同的主机名。在第一种情况下,服务 器所在物理机器必须配置为可以为多个地址接受IP包。(在机器没有多个网络硬件界面的情 况下,如果您的操作系统支持,您可以使用ifconfigalias命令来达到这个目的。)。当使用基于IP的虚拟主机时,特殊的名称_default_可以在没有匹配上其它列出的虚拟主机 的情况下作为匹配任何IP地址的虚拟主机。在没有进行_defau忆虚拟主机的设定时,在没 有IP与请求匹配的情况下,将使用“主服务器”(包括所有在虚拟主机配置段之外的配置) 的配置。(但请注意:任何匹配NameVirtualHost指令的IP地址既不会使用“main”服务器配 置,也不会使用_defau
23、忆虚拟主机的配置。参阅基于域名的虚拟主机文档获得更多详情。) 您可以指定一个:端口来改变匹配的端口。如果没有指定,它将沿用主服务器中离它最近的 那个Listen语句指定的值。您也可以指定:*来匹配那个地址上的所有端口。(当您使用 default寸,这是推荐采用的方法。)安全提示:参阅安全提示文档获得为什么当您存储url=javascript:;日 志/url文件的目录对于启动服务器以外的用户来说是可写的会危及服务器安全的详细资料。注意:的使用不会影响到Apache侦听的地址。您也许需要使用Listen来确保Apache侦听 着正确的地址。本文有经典论坛剑气凌人收集整理为调试程序,本机安装iis
24、与apache,无法同时使用80端口,现给出解决方法:方法一:IIS5,多 IP 下共存,IIS 为 192.16801, apache 为 192.16802 原文地址 c:InetpubAdminscrTptscscnpt adsutil.vbs set w3svc/disablesocketpooling true该命令反馈如下 disablesocketpooling : (BOOLEAN) True重启IISInetpubAdminscnptscscrTpt adsutil.vbs set w3svc/disablesocketpooling true由于 DisableSocket
25、Pooling 在 IIS 6.0 元url=javascript:;数据库/url架构(MBSchema.xml)中被定义为有效属性,所以,您仍然可以使用Adsutil.vbs设置该属 性,但这种设置不起作用。IIS 6.0中的功能是新增的核心级别驱动程序HTTP.sys的一部 分。要配置HTTP.sys,您必须使用Httpcfg.exe方法二:US6,多 IP 下共存,IIS 为 192.168.0.1, apache 为 192.168.0.2 原文地址到 2003 的 CD 下的 support/tools/Supportcab。解压出 httpcfg.exe 文件,COPY 到 wi
26、ndows/system32/目录下,用法自己看帮助命令行绑定到某 IP: httpcfg set iplisten -i 192.168.0.1即命令使用IIS的只监听指定的IP及端口查看绑定: httpcfg query iplisten删除绑定:httpcfg delete iplisten -i 192.168.0.1命令行net stop Apache2net stop iisadmin /ynet START Apache2net START w3svc保证iis下的ip设置为全局默认,Apache中httpconf设置listen 192.168.0.2:80,就应该可以 两个服
27、务同时运行,相互不冲突了。IIS 的访问地址为 http:/192. 16801, Apache 访问地址为 http:/192.168.S2方法三:网上常用的单IP共用80端口方法,不过不推荐,只是使用Apache的代理,速度有影响将 apache设为使用80端口,IIS使用其它端口,比如81,然后将apache作为HS的代理。在httpd.conf里面,取消下面四行的注释:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadMo
28、dule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_ftp_modulc modulcs/mod_proxy_ftp.so然后建立一个虚拟主机,将该域名的所有访问转向81端口。ServerName ProxyPass /localhostProxyPassReverse /localhost这样,对外就可以只需要一个端口,即可同时使用叩ache和IIS的功能了类推,使用第二种方法,你可以在HS上配置PHP4, Apache2中配置PHP5,只需要HS中 安装PHP4,把url=javascript:;php/url.
29、ini复制到windows目录即可,这个就不用说了吧,Apache2中,只要把PHP5的php.ini放 在PHP5安装目录里面就行了配置Apache以支持PHP5:LoadModule php5_module nD:/PHPServer/PHP5/php5apache2.dirAddType application/x-httpd-php .phpDirectoryindex index.html index.phpPHPIniDir HD:/PHPServer/PHP5n其中最重要的一条就是PHPIniDir,用来指明php.ini文件所在位置,即PHP5的安装目录, 注意所有目录的应该改为D: /PHPServei7PHp5这种格式,而非D:PHPServerPHP5, IIS的 访问地址为 http:/192.168.0.1, Apache 访问地址为 http:/l92.168.0.2