Apache配置详解

 

1. 虚拟主机概念

我们要想实现一个web站点,而且能够在互联网上被访问,首先它再能运行在操作系统,而且这个操作系统还要运行在物理主机上(第一它是一个主机)。在互联网上能够被访问,那我们需要一个主机,需要一个IP地址,需要一个时时在线的服务器,这需要多少资源?对众多小型站点来讲或者说对某种需求来讲,有可能都用不到服务器,也就是每天就10个人左右访问,只是需要我们在线而已,如果我们就为这一点点的需求就投入重大的资源的话是非常浪费的。我们就期望能够像我们使用虚拟机一样,虚拟的OS一样或虚拟的PC一样,能够在一台物理主机上虚拟出来多个可以同时运行的站点或者我们把它称为主机因此就把它称为虚拟主机。

2. Apache 主机的类型

1. 中心主机

2. 虚拟主机

  1. 基于IP: 端口相同,IP地址不同。
  2. 基于端口:IP相同,端口不同。
  3. 基于域名:IP地址相同,端口相同主机名不同

注意:所有的虚拟主机的配置我们都需要取消中心主机,也就是注释掉 DocumentRoot 这是配置虚拟主机的前提

3. 基于域名的虚拟主机

例如我采用的 xampp 所以配置虚拟主机就在 C:\xampp\apache\conf\extra\httpd-vhosts.conf中配置,由于这个文件默认被 include 到主配置文件中了,所以在这里的修改都可以生效。

首先需要保证主配置文件中的中心主机被取消了也就是:

#DocumentRoot "C:/xampp/htdocs"

然后打开 httpd-vhosts.conf 配置文件,按照下面的格式配置虚拟主机

<VirtualHost *:80>     DocumentRoot "C:/xampp/htdocs"     ServerName localhost     <Directory "C:/xampp/htdocs">         Options Indexes FollowSymLinks Includes ExecCGI         AllowOverride All         Require all granted     </Directory> </VirtualHost>

1. <VirtualHost *:80>

apache监听本机的所有 IP 和 80 端口做多域名虚拟主机

2. DocumentRoot

表示服务器的根目录

3. ServerName

就是表示域名,我们采用域名方式配置虚拟主机,所以每个虚拟主机的域名应该是不一样的才行

4. Directory

对根目录的规则应用,其中涉及到对于目录的访问权限和其他配置问题

5. 对于 Directory 指令解析

1. Options

配置在特定目录使用哪些特性,常用的值和基本含义如下

  1. ExecCGI: 在该目录下允许执行CGI脚本。
  2. FollowSymLinks: 在该目录下允许文件系统使用符号连接。
  3. Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。
  4. SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。

所以我们一般在配置 PHP 的时候所配置的内容是

Options Indexes FollowSymLinks Includes ExecCGI

2. AllowOverride

允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定):

  • None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销)。
  • All: 在.htaccess文件中可以使用所有的指令。

建议关闭这个选项,因为apache在文档中已经明确支持不建议使用它了,主要是会降低服务器性能,.htaccess 文件可以做到的我们都可以在 Directory 指令中做的更好。

3. Order

控制在访问时Allow和Deny两个访问规则哪个优先,也就是黑白名单的匹配顺序

  • Allow:允许访问的主机列表(可用域名或子网,例如:Allow from 192.168.0.0/16)。
  • Deny:拒绝访问的主机列表。

更详细的用法可参看:order用法

匹配原则:

Allow,Deny

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信