Apache-树叶云apache教程-虚拟主机 (apache怎么读)

教程大全 2025-07-08 11:45:04 浏览

Apache Web 服务器 可以在SAME服务器上托管多个网站。每个网站不需要单独的服务器机器和apache软件。这可以使用虚拟主机或VHost的概念来实现。

要在Web服务器上托管的任何域(网站应用)都将在apache配置文件中具有单独的条目。

Apache虚拟主机类型

Apache虚拟主机类型有两种 –

1. 基于名称的虚拟主机

基于名称的虚拟主机用于在单个IP地址上托管多个虚拟站点。

要配置基于名称的虚拟主机,需要设置要在其上接收所有所需网站的Apache请求的IP地址。可以通过apache配置中的NameVirutalHost指令(即 /etc/httpd/conf/httpd.conf 文件)执行此操作。如下所示 –

NameVirtualHost *:80ServerAdmin [emailprotected]DocumentRoot /var/www/html/example1_com_dirServerName www.example1.comServerAdmin [emailprotected]DocumentRoot /var/www/html/example2_com_dirServerName www.example2.comShell

您可以根据需要添加任意数量的虚拟主机。需要使用以下命令检查Web配置文件是否有配置错误

[root@115 conf.d]# httpd -tSyntax error on line 978 of /etc/httpd/conf/httpd.conf:Invalid command '*', perhaps misspelled or defined by a module not included in the server configurationShell

如上面显示的结果可以发现,配置文件存在语法配置错误,这时需要根据提示修改配置文件。直到没有错误提示为止。当配置文件有错误时,Apache是不能启动的,这点需要注意。

2. 基于IP的虚拟主机

要设置基于IP的虚拟主机,需要在服务器上配置多个IP地址。因此,vhost apache的数量取决于服务器上配置的IP地址数量。如果您的服务器有10个IP地址,则可以创建10个基于IP的虚拟主机。

在上图中,两个网站 example1.com example2.com 分配了不同的IP并使用基于IP的虚拟主机。

Listen 192.168.0.100:80ServerAdmin [emailprotected]DocumentRoot /var/www/html/example1_com_dirServerName www.example1.comServerAdmin [emailprotected]DocumentRoot /var/www/html/example1_com_dirServerName www.example2.comShell

3. 虚拟主机配置示例

这一小节中将列出有关设置虚拟主机的常见问题。这些方案涉及通过基于名称或基于IP的虚拟主机在单个服务器上运行的多个网站。

3.1. 在单个IP地址上运行多个基于域名的网站

如果服务器有多个主机名可以解析为单个地址,您希望对 www.example.com www.example.org 做出不同的响应。

# Ensure that Apache listens on port 80Listen 80DocumentRoot "/var/www/example1"ServerName www.example.com# Other directives hereDocumentRoot "/var/www/example2"ServerName www.example.org# Other directives hereShell

3.2. 多个IP地址上基于名称的主机

服务器有两个(或更多个)IP地址。一个IP地址是:172.20.30.40,我们将服务于“主”服务器 server.example.com ,另一个IP地址是:172.20.30.50,我们将服务两个或更多虚拟主机。

Listen 80# This is the "main" server running on 172.20.30.40ServerName server.example.comDocumentRoot "/www/mainserver"DocumentRoot "/www/example1"ServerName www.example.com# Other directives here ...DocumentRoot "/www/example2"ServerName www.example.org# Other directives here ...Shell

172.20.30.50 以外的地址的任何请求都将从主服务器提供。将向 www.example.com 提供对 172.20.30.50 的请求,其中包含未知主机名或无Host:标头。

3.3. 在不同的IP地址(例如内部和外部地址)上提供相同的内容

服务器计算机有两个IP地址( 192.168.1.1 172.20.30.40 )。机器位于内部(Intranet)网络和外部(Internet)网络之间。在网络外部,名称 server.example.com 解析为外部地址( 172.20.30.40 ),但在网络内部,同一名称解析为内部地址( 192.168.1.1 )。

只需一个部分,就可以使服务器响应具有相同内容的内部和外部请求。

DocumentRoot "/www/server1"ServerName server.example.comServerAlias serverShell

3.4. 在不同端口上运行不同的站点

假设您有多个域转到同一个IP,并且还希望为多个端口提供服务。下面的示例说明了在确定最佳匹配的IP地址和端口组合之后进行名称匹配。

Listen 80Listen 8080ServerName www.example.comDocumentRoot "/www/domain-80"ServerName www.example.comDocumentRoot "/www/domain-8080"ServerName www.example.orgDocumentRoot "/www/otherdomain-80"ServerName www.example.orgDocumentRoot "/www/otherdomain-8080"Shell

3.4. 基于IP的虚拟主机

服务器有两个IP地址( 172.20.30.40 172.20.30.50 ),分别解析为 www.example.com www.example.org

Listen 80DocumentRoot "/www/example1"ServerName www.example.comDocumentRoot "/www/example2"ServerName www.example.orgShell

对于未在其中一个指令中指定的任何地址(例如localhost)的请求将转到主服务器(如果有)。

3.5. 基于混合端口和基于IP的虚拟主机

服务器机器有两个IP地址( 172.20.30.40 172.20.30.50 ),分别解析为 www.example.com www.example.org 。在每种情况下,都希望在端口和上运行主机。

Listen 172.20.30.40:80Listen 172.20.30.40:8080Listen 172.20.30.50:80Listen 172.20.30.50:8080DocumentRoot "/www/example1-80"ServerName www.example.comDocumentRoot "/www/example1-8080"ServerName www.example.comDocumentRoot "/www/example2-80"ServerName www.example.orgDocumentRoot "/www/example2-8080"ServerName www.example.orgShell

3.6. 混合基于名称和基于IP的虚拟主机

永远不会出现在另一个虚拟主机中的虚拟主机参数中提到的任何地址都是严格基于IP的虚拟主机。

Listen 80DocumentRoot "/www/example1"ServerName www.example.comDocumentRoot "/www/example2"ServerName www.example.orgDocumentRoot "/www/example3"ServerName www.example.net# IP-basedDocumentRoot "/www/example4"ServerName www.example.eduDocumentRoot "/www/example5"ServerName www.example.govShell

3.7. Virtual_host和mod_proxy一起使用

以下示例允许前端计算机将虚拟主机代理到另一台计算机上运行的服务器。在该示例中,在 192.168.111.2 的计算机上配置了同名的虚拟主机。如果我们将多个主机名代理到单个机器,则使用 ProxyPreserveHost On 指令以便传递所需的主机名。

ProxyPreserveHost OnProxyPass"/" "http://192.168.111.2/"ProxyPassReverse "/" "http://192.168.111.2/"ServerName hostname.example.comShell

3.8. 使用vhosts

vhosts适用于所有端口

捕获对任何未指定的IP地址和端口的每个请求,即未用于任何其他虚拟主机的地址/端口组合。

DocumentRoot "/www/default"Shell

使用带有通配符端口的默认虚拟主机可以有效地阻止任何请求进入主服务器。

默认虚拟主机从不提供发送到用于基于名称的虚拟主机的地址/端口的请求。如果请求包含未知或无Host:标头,则始终从基于主名称的虚拟主机(配置文件中首先出现的该地址/端口的虚拟主机)提供服务。

您可以使用 AliasMatch RewriteRule 将任何请求重写到单个信息页面(或脚本)。

vhosts 用于不同的端口 与上面的设置相同,但服务器侦听多个端口,我们希望将第二个 _default_ vhost 用于端口。

DocumentRoot "/www/default80"# ...DocumentRoot "/www/default"# ...Shell

端口的默认虚拟主机(必须出现在具有通配符端口的任何默认虚拟主机之前)会捕获发送到未指定IP地址的所有请求。主服务器从不用于提供请求。

vhosts用于一个端口

我们希望端口具有默认虚拟主机,但没有其他默认虚拟主机。

DocumentRoot "/www/default"...Shell

从默认虚拟主机提供对端口80上未指定地址的请求。从主服务器提供对未指定地址和端口的任何其他请求。

在虚拟主机声明中使用的优先级高于。

3.9. 将基于名称的虚拟主机迁移到基于IP的虚拟主机

主机名为 www.example.org 的基于名称的虚拟主机(来自我们基于名称的示例,设置2)应该获得自己的IP地址。为避免名称服务器或缓存基于名称的虚拟主机的旧IP地址的代理出现问题,我们希望在迁移阶段提供这两种变体。

解决方案很简单,因为我们可以简单地将新的IP地址( 172.20.30.50 )添加到 VirtualHost 指令中。

Listen 80ServerName www.example.comDocumentRoot "/www/example1"DocumentRoot "/www/example2"ServerName www.example.org# ...DocumentRoot "/www/example3"ServerName www.example.netServerAlias *.example.net# ...Shell

现在可以通过新地址(作为基于IP的虚拟主机)和旧地址(作为基于名称的虚拟主机)访问虚拟主机。

4.0. 使用ServerPath指令

我们有一个带有两个基于名称的虚拟主机的服务器。为了匹配正确的虚拟主机,客户端必须发送正确的Host:头。旧的客户端不发送这样的头,Apache不知道客户端试图访问什么虚拟主机(并从主虚拟主机提供请求)。为了提供尽可能多的向后兼容性,我们创建了一个主虚拟主机,它返回一个包含带有URL前缀的链接的单个页面到基于名称的虚拟主机。

# primary vhostDocumentRoot "/www/subdomain"RewriteEngine OnRewriteRule "." "/www/subdomain/index.html"# ...DocumentRoot "/www/subdomain/sub1"ServerName www.sub1.domain.tldServerPath "/sub1/"RewriteEngine OnRewriteRule "^(/sub1/.*)" "/www/subdomain$1"# ...DocumentRoot "/www/subdomain/sub2"ServerName www.sub2.domain.tldServerPath "/sub2/"RewriteEngine OnRewriteRule "^(/sub2/.*)" "/www/subdomain$1"# ...Shell

由于 ServerPath 指令,始终从 sub1-vhost 提供对URL 的请求。如果客户端发送了正确的Host:头,则仅从 sub1-vhost 提供对URL 的请求。如果没有发送Host:头,则客户端从主要主机获取信息页面。

请注意,有一个奇怪之处:如果客户端没有发送Host:头,则还会从 sub1-vhost 提供对 的请求。


一个服务器放多个网站怎么设置?

三种办法: 一、互联网上最常用的方法:虚拟主机,一般用APACHE实现,只按一份软件,只运行一次,只需要配置多个域名指向本机IP地址。 APACHE能自动根据访问者在IE输入地址的域名,分别调用不同目录下的文件进行反馈。 这是最合理、最正宗的解决办法。 二、如果你的网站在没有域名服务的内部网络上运行,可以用多个IP配合APACHE来实现虚拟主机。 方法同上。 三、你可以在不同的端口上启动多个WEB服务器,他们可以是同一套软件,也可以是不同的软件,比如你可以启动两个APACHE,或者一个APACHE、一个IIS、甚至再加一个RESION,但是他们侦听的端口不能相同,一般默认是80,你需要修改。 访问的时候通过这样的地址访问。 参考资料:

XAMPP403 forbidden怎么解决

虚拟主机

第一步:注销,如下样式:#DocumentRoot C:/myenv/apache/htdocs第二步:启动虚拟主机的配置,如下样式:Include conf/extra/第三步:配置,增加如下样式:DocumentRoot D:/myblog2 ServerName DirectoryIndex Options FollowSymLinks#AllowOverride None 不许可别人修改我们的页面 AllowOverride None Order allow,deny Allow from all注意标点符号,apache对中英标点号是不检测的,但是运行会出问题。 如果不行就看一下\apache\logs\转上看看。 你这些是否是多余的《检查了是打开的中的配置如下:NameVirtualHost 127.0.0.1:80DocumentRoot D:/xampp/htdocs ServerName localhost》

求windows下PHP+apache+mysql+phpmyadmin的完整配置方法

先从各官方网站下了APACHE2.050、PHP5、MYSQL4.0.20、PHPMYADMIN2.57 apache_2.0.50-win32-x86-no_ 操作系统 win2003 系统盘为: D盘 第一步: 安装apache 并配置支持PHP 点击安装文件apache_2.0.50-win32-x86-no_ 将apache安装在 D:\apache2 目录(随自己喜好)下 将 里内容解压到 D:\php 里 找到 php目录里的 -dist 重命名为 并拷到 windows目录里(win2k 里为winnt) 如我的是拷到 D:\windows目录 再将php目录里的 , 拷到系统目录(system/system32) 如我的是D:\windows\system里 配置apache里的 打开 D:\Apache2\conf\ 这个文件 找到 AddDefaultCharset ISO-8859-1 将其改为 AddDefaultCharset GB2312 (让默认语言编码为简体中文) 找到 DocumentRoot D:/Apache2/htdocs 将其改为你的WEB目录(可不改)如我的为 DocumentRoot D:/website 找到 DirectoryIndex 在后面加入 选择安装模式: 模块化模式安装 或 CGI模式安装 (选一样即可) --------------模块化安装配置------------------------------------ 找到 #LoadModule ssl_module modules/mod_ 这行,在此行后加入一行 LoadModule php5_module d:/php/ 其中d:/php/ 为你php目录中所在的位置 找到 AddType application/x-gzip 这行,在此行后加入一行 AddType application/x-httpd-php --------------------------------------------------------------- --------------CGI安装配置-------------------------------------- 找到 AddType application/x-gzip 这行,加入如下即可 ScriptAlias /php/ d:/php/ AddType application/x-httpd-php Action application/x-httpd-php /php/ --------------------------------------------------------------- 此时PHP环境基本已经配置成功 在WEB根目录(如我的D:\website)里建一个名为的文件内容如下重新启动apache服务 用浏览器打开如果可以看到php配置输出信息就OK了 第二步 安装mysql 将mysql安装到指定目录,如我的是d:/mysql 如下载的是非安装的mysql压缩包,直接解压到指定目录就可以了 然后点击D:\mysql\bin\这个文件其中D:\mysql是你的mysql安装目录 输入winmysqladmin的初始用户、密码(注:这不是mysql里的用户、密码)随便填不必在意 确定之后你的右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务 再左击这个图标->winnt->start the service 启动mysql服务 修改mysql数据库的root密码 用cmd进入命今行模式输入如下命令: ( 注: d:\mysql 为mysql安装目录) cd d:\mysql\bin mysqladmin -u root -p password 回车出现 enter password: ( 注:这是叫你输入原密码. 刚安装时密码为空,所以直接回车即可) 此时mysql 中账号 root 的密码 被改为 安装完毕 三、配置并测试mysql(为 d:\windows下的 ) 找到extension_dir = ./ 改为 extension_dir = d:/php/ext 找到 ;extension=php_ 将;去掉改为 extension=php_ 找到 ;_path = /tmp 将;去掉 设置你保存session的目录,如 _path = D:/php/session_temp; 重启apache服务 在Web根目录下(如 D:\website)建立文件内容如下:用浏览器打开如果输出success就OK了 四、phpmyadmin的安装配置 将解压到WEB根目录中去,重命名文件夹为phpmyadmin或其它 打开phpmyadmin 目录中的 找到 $cfg[Servers][$i][user] = root; $cfg[Servers][$i][password] = ; 分别填上你mysql的用户和密码即可 如不是本地使用,最好加上验证 不知道写得对不对!不过我基本上就是这样配的! 对于学习来讲应该差不多了吧?

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐