天天看点

httpd2.2/2.4全攻略

 本文介绍以下四部分内容,且看下文。

<a href="https://s3.51cto.com/wyfs02/M00/98/BC/wKioL1k_1PjBZA_QAAAtFeXGd0I731.png" target="_blank"></a>

 一、简介

 The Apache HTTP Server is a powerful, efficient, and extensible web server.

                                                                               from  http://httpd.apache.org/

 以上简介来自apache官方网页,我自己简单理解是这样的。首先httpd服务是基于http超文本传输协议的服务程序。它是非常强大,有效率以及高扩展性的web服务。它以独立的守护进程的方式运行,支持多进程多线程处理多个请求。不仅仅这样httpd还具有很多的特性,比如模块化是它最强大的一个特性,下面介绍httpd的特性。

  二、httpd的特性  

<a href="https://s1.51cto.com/wyfs02/M00/98/BC/wKiom1k_2IfjN17IAAAfgADndxY407.png" target="_blank"></a>

 我个人理解,httpd有两大特性(应该不全):一是高度模块化;二是DSO,即可动态地加载模块。

  2.1 高度模块化

  也许你会问高度模块化有什么用?高度模块化用处可大着呢!想象这样一个情况,假如我们的手机可以实现模块化,那我们就可以根据自己的喜欢定制自己钟爱的手机,我们随时可以根据自己的心情,任何时间,任何地点,修改自己的手机,想想是不是很刺激。那httpd也一样,我们也可以根据模块化,定制一款自己钟爱的httpd服务。长话短说,高度模块化就是功能模块化,可根据自己需要的功能添加对应的模块。

  模块化中有一个MPM模块十分的重要,不得不说。

<a href="https://s3.51cto.com/wyfs02/M02/98/BD/wKiom1k_2oTBqdcVAAAlvFBmvRg022.png" target="_blank"></a>

 MPM翻译过来就是多路处理模块,你也可以理解为多进程处理模块,因为此模块跟进程相关。三个模块的介绍以及区别,如下图所示。

<a href="https://s3.51cto.com/wyfs02/M02/98/BD/wKioL1k_2v2hBZ9OAABPVA_lFdU153.png" target="_blank"></a>

 你可以看到,MPM模块主要是跟进程,线程以及响应请求相关,也就是和我们的web并发访问相关的。因此,你可以评估web访问的相关情况来选择合适的模块。

  CentOS7系统中想要查看或者修改MPM在此配置文件:/etc/httpd/conf.modules.d/00-mpm.conf 

  CentOS6系统中想要查看或者修改MPM在此配置文件:/etc/sysconfig/httpd

  另外需要注意的是:CentOS6中event(事件驱动机制)还不成熟,因此很少用;而CentOS7中event(事件驱动机制)已经成熟,可以投入到生产环境中使用。

  此外httpd还支持很多的模块,比如mpm_winnt,它是支持windowNT的多线程MPM模块;比如mod_ssl,它是支持安全加密的模块,我们想要做一个基于https安全的web访问就需要用到这个模块。

  模块有很多,详见官方文档:https://httpd.apache.org/docs/2.4/mod/

 2.2 DSO(动态共享对象)   

    DSO(dynamic shared object),动态共享对象,即可动态加载模块。光有很多模块不行,还得要实现模块加载的方式,DSO就是这么一个实现,可以动态加载模块。

  详见官方链接:http://httpd.apache.org/docs/current/dso.html

三、httpd的功能特性

<a href="https://s1.51cto.com/wyfs02/M02/98/BD/wKioL1k_3zyi8XvxAABLg9sYHXY666.png" target="_blank"></a>

 httpd的功能特性如图所示,因为在后面的常见配置中会被详细说明,所以此处尽量长话短说。

   1.CGI

        通用网关接口

        实现动态页面

        性能差

        参考链接:http://docs.huihoo.com/apache/httpd/2.0-cn/howto/cgi.html

 2.支持虚拟主机的功能

    简单理解,虚拟主机就是在单一机器上运行多个网站。它的实现方式有以下三种:

    即基于IP地址实现虚拟主机,基于port端口实现虚拟主机,即基于FQDN实现虚拟主机,FQDN由主机名以及域名组成。它们的特点已在图中所示,还请看图。实现虚拟主机必将需要指令,指令将会在常见配置中详细说明。常见指令如下:   

<code> </code><code>&lt;VirtualHost&gt;</code>

<code>         </code><code>ServerName</code>

<code>         </code><code>ServerAlias</code>

<code>         </code><code>DocumentRoot</code>

<code>         </code><code>CustomLog</code>

<code>         </code><code>ErrorLog</code>

<code>   </code><code>&lt;</code><code>/VirutalHost</code><code>&gt;</code>

<a href="https://s1.51cto.com/wyfs02/M01/98/BD/wKioL1k_4HGg4DHcAAA7aaS_vcg503.png" target="_blank"></a>

        参考链接:

            https://httpd.apache.org/docs/2.4/vhosts/

            http://httpd.apache.org/docs/2.2/vhosts/

    3.支持反向代理

        简单理解,就是服务器的代理。后端服务器(如Web服务器)响应用户请求,然后再将响应报文返回代理服务器,再经由代理服务器将响应报文发送给客户端。   

   4.支持负载均衡

        简单理解,就是将负载合理分配,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

    5.支持路径别名    

        路径别名关联一个目录或者文件的路径,它与url和文件系统路径的映射相关,会在常见配置中详细说明。

        参考链接:http://www.178linux.com/12685 

    6.支持用户认证机制

        简单理解,即认证用户的合法性,比如认证账号,密码,身份等等。用户认证机制支持多种认证方式,常见的有basic(基本认知方式)和digest(摘要认证),基于算法的认证方式。

    7.支持第三方模块

        如果你能力足够强大,完全可以自己制作一个模块嵌入httpd服务当中,这个功能相当人性化以及具备开源精神。

四、httpd的程序版本 

<a href="https://s2.51cto.com/wyfs02/M01/98/BE/wKiom1k_5T-z9-9_AAAkGnIrXCk925.png" target="_blank"></a>

     httpd到目前为止有四个版本。1.3官方已经停止维护,不再介绍。

 4.1 httpd2.2

<a href="https://s3.51cto.com/wyfs02/M01/98/BE/wKioL1k_5i3zfbhxAAAVTTjJp8E060.png" target="_blank"></a>

    httpd2.2介绍两个部分:程序环境以及常用配置。

 4.1.1 httpd2.2程序环境

   httpd2.2的程序环境如下,在这里我主要介绍CentOS6.8的程序环境。具体信息还请看思维导图,文字只做部分补充。

    配置文件补充:

      配置文件:/etc/httpd/conf/httpd.conf主要分为三大部分内容,分别为全局环境配置,主服务配置,虚拟主机配置。我们定义的站点信息可以在/etc/httpd/conf/httpd.conf中配置,也可以在/etc/httpd/conf.d/中自定义一个以.conf结尾的配置文件,在其中配置站点信息。     

        Section 1: Global Environment

        Section 2: 'Main' server configuration

        Section 3: Virtual Hosts

    主程序文件补充:

     /usr/sbin/httpd.worker

     /usr/sbin/httpd.event(2.2测试阶段)

     两种MPM模块在上面已有介绍,如果不记得可以返回看看。默认开启worker模式

<a href="https://s4.51cto.com/wyfs02/M00/98/BE/wKiom1k_5ofzzR2ZAADWXWKqGJo847.png" target="_blank"></a>

  日志文件补充:

     日志文件分为访问日志和错误日志,我们也可以自定义日志的存放路径,这个将在常见配置中介绍。

 4.1.2 httpd2.2常见配置

 总结了19个常见配置,其中有些是工具与配置无关,但在httpd的工作或者测试中会用到,因此也放在了常见配置中。

 这些常见配置主要在以下两个路径配置,但个别不再此路径中,我会在相应的文段中特别说明。    

    /etc/httpd/conf/httpd.conf

    /etc/httpd/conf.d/*.conf    #推荐此方法,模块化思想    

 所有的配置都支持如下的格式

    directive  value

        directive:指令,不区分字符大小写;

        value:值为路径时,是否区分字符大小写,取决于文件系统;  

 1、修改监听的IP和PORT

  Format

    Listen [IP-address:]portnumber [protocol]

  Note

    (1) 省略IP表示为0.0.0.0

    (2) Listen指令可重复出现多次

    (3)修改监听socket,重启服务进程方可生效

    (4)限制其必须通过ssl通信时,protocol需要定义为https

 2、长连接(PersistentConnection)

 定义

    也称为持久连接,tcp连续建立后,每个资源获取完成后不完全断开连接,而是继续等待其它资源请求的进行。

  如何断开

    数量限制

    时间限制

  副作用

   对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应

  解决方案

    使用较短的持久连接时长,以及较少的请求数量

 3、MPM配置

<a href="https://s2.51cto.com/wyfs02/M01/98/BF/wKioL1k_7lfQ9jQ_AAAq4NtGiRI795.png" target="_blank"></a>

    3.1查看httpd的MPM工作模式

        ps  aux  | grep httpd

<a href="https://s1.51cto.com/wyfs02/M02/98/BF/wKioL1k_7rqDT7zjAAAlZoH-NLI848.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M02/98/BF/wKioL1k_7rqDT7zjAAAlZoH-NLI848.png" target="_blank"> </a>

    3.2查看httpd的模块列表  

         查看静态编译的模块:httpd  -l

        查看静态编译及动态编译的模块:httpd  -M

   3.3更换使用的MPM机制 

        配置文件:/etc/sysconfig/http注意:

        重启服务进程方可生效

<a href="https://s1.51cto.com/wyfs02/M01/98/BF/wKiom1k_71rDl4F_AAAjSxq3k28985.png" target="_blank"></a>

    3.4MPM配置

     3.4.1 prefork的配置  

     3.4.2 worker的配置     

   4、DSO(动态共享对象)

     DSO,即动态地加载指定模块。

   格式:LoadModule &lt;mod_name&gt; &lt;mod_path&gt;

   模块文件路径可使用相对路径,相对于ServerRoot(默认/etc/httpd)     

    5、定义'Main' server的文档页面路径

      ServerName

        Description: Hostname and port that the server uses to identify itself(即主机名).      

        语法格式: ServerName [scheme://]fully-qualified-domain-name[:port]

        比如这样:ServerName www.google.com

     DocumentRoot  ""

 Description: Directory that forms the main document tree visible from theweb(web页面根目录,DoucmentRoot指向的路径为URL路径的起始位置,其相当于站点URL的根路径).

 Syntax: DocumentRoot directory-path      

比如这样:DocumentRoot /web/www/html    

 注意:URL PATH与FileSystem PATH不是等同的,而是存在一种映射关系;

        比如存在下面的对应关系

      URL /  --&gt; FileSystem /var/www/html/     

      /images/logo.jpg --&gt; /var/www/html/images/logo.jpg

    6、站点访问控制常见机制

     可基于两种机制对资源进行访问控制,一是操作系统中的文件系统路径,二是通过站点的URL路径来实现控制。

      6.1 通过文件系统路径实现访问控制    

    &lt;Directory&gt;和&lt;/Directory&gt;用于封装一组指令,使之仅对某个目录及其子目录生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一个目录的完整路径,或是包含了Unixshell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。您也可以使用"[]"来确定字符范围。但需要注意的是,以上通配符都不能匹配"/"字符。

    &lt;Files&gt;指令提供了基于文件名的访问控制的方式。

    以下是从官方文档摘录下来的,很值得参考:

     6.1.1&lt;Directory&gt;中“基于源地址”实现访问控制

          6.1.1.1 httpd-2.2中实现,通过order指令实现基于源地址的访问控制

        order指令

               说明:控制默认的访问状态与Allow和Deny指令生效的顺序

    语法:Order ordering

    默认值Order Deny,Allow

      Allow from, Deny from

        在下面的例子中,apache.org域中所有主机都允许访问,而其他任何主机的访问都将被拒绝。

        下面这张表说明了allow,deny的规则

   6.1.1.2 httpd-2.4中实现

    基于IP控制:

      Require ip  IP地址或网络地址

      Require not ip IP地址或网络地址

         基于主机名控制:

      Require host 主机名或域名

      Require not host 主机名或域名

            下面是httpd-2.2以及httpd-2.4实现访问控制的几个例子        

       6.2 通过URL路径实现访问控制 

          说明:将封装的指令作用于匹配的URL

          语法:&lt;Location URL-path|URL&gt; ... &lt;/Location&gt;

          &lt;Location&gt;提供了基于URL的访问控制。

    6.3 Options指令说明    

      说明:配置在特定目录的选项,这些选项可以指定使用哪些特性

      语法:Options [+|-]option [[+|-]option] ...

      默认值:Options All

      option可以为None ,在这种情况下,将不启用任何额外特性。

     All

            除MultiViews之外的所有特性都生效。这是默认设置。

     ExecCGI 

        允许使用mod_cgi执行CGI脚本。

      FollowSymLinks

              服务器允许在此目录中使用符号连接特性。

      Indexes

          如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表。

    7、定义站点主页面

      DirectoryIndex index.html index.txt /cgi-bin/index.pl

    8、定义路径别名

      说明:映射URL到文件系统的特定区域

      语法:Alias URL-path file-path|directory-path

     作用域:server config, virtual host

     Alias指令使文档可以被存储在DocumentRoot以外的本地文件系统中。

    对"http://myserver/image/foo.gif"的请求,服务器将返回"/ftp/pub/image/foo.gif"文件。

    9、设定默认字符集

      AddDefaultCharset  UTF-8

                 中文字符集:GBK, GB2312, GB18030

        10、日志设定

     10.1 访问日志

         CustomLog 指令

        说明:设定日志的文件名和格式

        语法:CustomLog file|pipe format|nickname [env=[!]environment-variable]

        作用域:server config, virtual host

      CustomLog指令用来对服务器的请求进行日志记录。第一个参数指定了日志记录的位置,第二个参数指定了写入日志文件的内容.

    LogFormat format strings:

      详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      %h:客户端IP地址;

      %l:Remote User, 通常为一个减号(“-”);

      %u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;

      %t:服务器收到请求时的时间;

      %r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;

      %&gt;s:响应状态码;

      %b:响应报文的大小,单位是字节;不包括响应报文的http首部;

      %{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;

      %{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;

      LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

     10.2 错误日志

           ErrorLog 指令

      说明:存放错误日志的位置

      语法:ErrorLog file-path|syslog[:facility]

      默认值:ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows 和 OS/2)

      作用域:server config, virtual host

      ErrorLog指令指定了记录错误日志的文件。如果file-path不是一个以斜杠(/)开头的绝对路径,那么将被认为是一个相对于ServerRoot的相对路径。

    记录错误日志的等级一般是:LogLevel  warn,以下是关于错误日志的说明

<a href="https://s2.51cto.com/wyfs02/M01/99/1D/wKiom1lD3_Xxl4ukAABpImuBkLk037.png" target="_blank"></a>

    11、基于用户的访问控制

    说明:认证(Authorization)就是用户填入账号和密码后再次向服务端发送请求报文;认证通过时,则服务器发送响应的资源。

     11.1 基于basic方式认证(明文)

                 11.1.1 基于用户进行认证

        思路:

          (1) 定义安全域

          (2) 提供账号和密码存储(文本文件)

                11.1.2 基于组账号进行认证

       思路:

        (1) 定义安全域

        (2) 创建用户账号和组账号文件

            组文件:每一行定义一个组 GRP_NAME: username1  username2  ...

    12、虚拟主机

     说明:虚拟主机功能十分重要。简单来说,虚拟主机可以实现的功能就是在一台服务器上虚拟出多台主机的效果,可以实现多个站点的配置。虚拟主机的实现方案如下

<a href="https://s4.51cto.com/wyfs02/M00/99/1E/wKiom1lD5t-Rkg7YAAA3BM59NIw429.png" target="_blank"></a>

     虚拟主机可以通过三种方式实现,即基于ip,基于port,基于FQDN(由主机名和域名组成,通常就是指一个站点名)。需要注意的是,在httpd2.2中,如果需要使用虚拟主机的功能,要先禁用mian host中的#DocumentRoot,而httpd2.4则不需要。三种实现方式的特点如下:

<a href="https://s5.51cto.com/wyfs02/M00/99/1E/wKioL1lD54-zMnskAAAlqemPjsQ804.png" target="_blank"></a>

                 虚拟主机的配置方法:

               以下是三种配置方式的例子。

    13、status页面

      显式页面的状态信息

      LoadModule  status_module  modules/mod_status.so      #加载网页状态模块

      示例

    14、curl命令

     有关curl命令的用法,请看下图。

<a href="https://s2.51cto.com/wyfs02/M01/99/1E/wKioL1lD6pXztMZaAAC3Vqg3i78197.png" target="_blank"></a>

    15、user/group 

     指定以哪个用户的身份运行httpd服务进程;

      User apache

      Group apache

    16、mod_deflate模块

     当带宽压力大时会启用压缩,启用压缩不但能优化传输速度也能节约带宽。此模块的特点如下

<a href="https://s2.51cto.com/wyfs02/M01/99/1E/wKioL1lD6-vAWRIJAAAyomGBjak116.png" target="_blank"></a>

              下面是一个示例

    17、https,http over ssl

     https即指http基于ssl协议,这种协议使得用户访问站点时更加的安全。

     在httpd中配置https的思路是这样的:

<a href="https://s2.51cto.com/wyfs02/M00/99/1E/wKioL1lD7O7DDh6cAAAyrEwX5FM422.png" target="_blank"></a>

        (1) 为服务器申请数字证书

        具体步骤可以参考我另一篇博客http://powermichael.blog.51cto.com/12450987/1933580

<a href="https://s1.51cto.com/wyfs02/M01/99/1F/wKiom1lD7R-yMVRoAAAiISikoqc644.png" target="_blank"></a>

                    (2)配置httpd支持使用ssl及使用的证书    

              1.安装ssl模块 yum -y install mod_ssl

              2.修改配置文件:/etc/httpd/conf.d/ssl.conf

              DocumentRoot        #URL映射的文件系统路径

              ServerName         #主机名

              SSLCertificateFile     #签署证书文件路径

              SSLCertificateKeyFile    #私钥文件存放路径                                    

                   (3) 测试基于https访问相应的主机

                          openssl  s_client  [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

                18、httpd自带的工具程序

<a href="https://s1.51cto.com/wyfs02/M00/99/1E/wKioL1lD7neB96OrAABy9KvKOC0578.png" target="_blank"></a>

                19、httpd的压力测试工具

<a href="https://s5.51cto.com/wyfs02/M00/99/1F/wKiom1lD7rqAI9bsAABjVxvEDIM851.png" target="_blank"></a>

4.2 httpd2.4

  httpd2.4的介绍分为以下四部分内容。由于httpd2.4常用配置和httpd2.2大抵相似,所以在这便不做过多的介绍。不同之处,也已经在httpd2.2的配置中说明,所以此处只做httpd2.4程序环境,新特性以及新模块的介绍。

<a href="https://s3.51cto.com/wyfs02/M01/99/1F/wKiom1lD70ei4nWRAAAfo6TZN_o349.png" target="_blank"></a>

 4.2.1 httpd2.4程序环境

<a href="https://s1.51cto.com/wyfs02/M00/99/1F/wKiom1lD8QaQ5K_5AAC8012VZkk899.png" target="_blank"></a>

   补充:修改MPM模块的文件路径:/etc/httpd/conf.modules.d/00-mpm.conf

 4.2.2 httpd2.4常用配置(省略,请参考httpd2.2常用配置)

 4.2.3 httpd2.4新特性

   httpd2.4的新特性如图所示。

<a href="https://s4.51cto.com/wyfs02/M01/99/1F/wKiom1lD8e3R4CovAACKJ0P8Hck898.png" target="_blank"></a>

 4.2.4 httpd2.4新模块

<a href="https://s3.51cto.com/wyfs02/M01/99/1F/wKiom1lD8oSRGumkAAAX0GoiFyU822.png" target="_blank"></a>

 mod_proxy_fcgi 支持PHP等动态语言

    mod_proxy_scgi SCGI Protocol,支持Python

    mod_remoteip 获取远端真实访问IP

    想了解更多的新模块功能,请看官网:http://httpd.apache.org/docs/2.4/new_features_2_4.html

5.httpd2.2配置实验(补充内容)

  5.1httpd2.2配置安全方案

    1.关闭一些不使用的模块及功能

        可在LoadModule前加#,来注释掉一些不使用的模块   

    2. 隐藏banner信息

        ServerTokens OS  修改为:ServerTokens Prod (在出现错误页的时候不显示服务器操作系统的名称)

        ServerSignature On 修改为:ServerSignature Off(不回显apache版本信息)

    3. 配置httpd.conf禁止目录浏览

        将Options Indexes FollowSymLinks改为Options -Indexes FollowSymLinks

    4. 合理配置apache的运行账户

        为apache单独建立一个运行账户及账户组,并在httpd.conf配置

            User apache

            Group apache

    5. 合理控制apache运行账户对磁盘的写入,执行权限

        取消apache运行账户对网站目录的写入权限,上传目录除外,其他非网站目录尽量不给权限

    6. 配置httpd.conf取消对上传目录的php执行权限

        &lt;Directory "/var/www/html/aaa"&gt;

            &lt;FilesMatch ".(php|php5)$"&gt;

                Deny from all

            &lt;/FilesMatch&gt;

        &lt;/Directory&gt;

    7. 配置httpd.conf限制禁止访问的文件夹,例如后台目录

            Deny from all

    8. 配置httpd.conf限制一些特殊目录的特定ip访问,如内部接口等。

            Order Deny,Allow

        Allow from 192.168.1.111

    9. 配置httpd.conf限制一些文件类型的访问,如txt的日志

        &lt;Files ~ ".txt$"&gt;

            Order allow,deny

        &lt;/Files&gt;

    10.配置httpd.conf修改修改监听端口来防止一些内部系统被扫描

        这样可以防止一些直接扫描80端口的黑客

        Listen 8080

    11. 关闭对.htaccess的支持

        AllowOverride All

        改为

        AllowOverride None

    12. 配置httpd.conf记录访问日志

   5.2httpd2.2基于FQDN虚拟主机配置实验

        需要注意的地方

        1.注释/etc/httpd/conf/httpd.conf文件中的 #DocumentRoot

        2.在/etc/httpd/conf.d/*.conf写入一个虚拟主机的配置文件(示例如下)

<code>[root@god conf.d]</code><code>#cat /etc/httpd/conf.d/www.conf </code>

<code>NameVirtualHost 10.0.0.68:80</code>

<code>&lt;VirtualHost 10.0.0.68:80&gt;</code>

<code>    </code><code>ServerName www1.stux.com</code>

<code>    </code><code>DocumentRoot </code><code>"/web/vhosts/www1"</code>

<code>    </code><code>CustomLog </code><code>/web/vhosts/www1/access_log</code> <code>combined</code>

<code>    </code><code>ErrorLog </code><code>/web/vhosts/www1/error_log</code>

<code>    </code><code>&lt;Directory </code><code>"/web/vhosts/www1"</code><code>&gt;</code>

<code>        </code><code>Options -Indexes -FollowSymLinks</code>

<code>        </code><code>AllowOverride None</code>

<code>        </code><code>Order allow,deny</code>

<code>        </code><code>Allow from all</code>

<code>        </code><code>Deny from 192.168.1.0</code><code>/24</code>

<code>    </code><code>&lt;</code><code>/Directory</code><code>&gt;</code>

<code>    </code><code>&lt;Location </code><code>/server-status</code><code>&gt;</code>

<code>        </code><code>SetHandler server-status</code>

<code>        </code><code>AuthType Basic</code>

<code>        </code><code>AuthName </code><code>"michael"</code>

<code>        </code><code>AuthUserFile </code><code>"/etc/httpd/passwd.conf"</code>

<code>        </code><code>Require user michael </code>

<code>    </code><code>&lt;</code><code>/Location</code><code>&gt;</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</code>

<code>        </code><code>ServerName www2.stux.com</code>

<code>        </code><code>DocumentRoot </code><code>"/web/vhosts/www2"</code>

<code>        </code><code>CustomLog </code><code>/web/vhosts/www2/access_log</code> <code>combined</code>

<code>        </code><code>ErrorLog </code><code>/web/vhosts/www2/error_log</code>

<code>        </code><code>&lt;Directory </code><code>"/web/vhosts/www1"</code><code>&gt;</code>

<code>                </code><code>Options -Indexes -FollowSymLinks</code>

<code>                </code><code>AllowOverride None</code>

<code>                </code><code>Order allow,deny</code>

<code>                </code><code>Allow from all</code>

<code>        </code><code>&lt;</code><code>/Directory</code><code>&gt;</code>

<code>        </code><code>&lt;Location </code><code>/server-status</code><code>&gt;</code>

<code>                </code><code>SetHandler server-status</code>

<code>                </code><code>AuthType Basic</code>

<code>                </code><code>AuthName </code><code>"michael"</code>

<code>                </code><code>AuthUserFile </code><code>"/etc/httpd/passwd.conf"</code>

<code>                </code><code>Require user michael</code>

<code>        </code><code>&lt;</code><code>/Location</code><code>&gt;</code>

        3.使用httpd -t 检测配置文件语法 

        4. 重启服务:service httpd restart 

        5.创建相应的文件(仅列出映射到URL的主站点目录及文件)

<code>[root@god www2]</code><code>#cat /web/vhosts/www1/index.html </code>

<code>IP:10.0.0.68</code>

<code>webSite: www1.stuX.com</code>

<code>[root@god www2]</code><code>#cat /web/vhosts/www2/index.html </code>

<code>WebSite: www2.stux.com</code>

        6.在主机的配置文件中加入域名解析

            windos:C:\Windows\System32\drivers\etc中hosts

            linux:/etc/hosts

<code>[root@big ~]</code><code>#cat /etc/hosts</code>

<code>127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 big </code>

<code>::1         localhost localhost.localdomain localhost6 localhost6.localdomain6</code>

<code>10.0.0.67 www.ilinux.io www.iunix.io</code>

<code>10.0.0.68 www1.stux.com </code>

<code>10.0.0.68 www2.stux.com</code>

<code>#10.0.0.110 www.huwho.cn</code>

        7.测试(可使用windows以及linux主机)

<a href="https://s1.51cto.com/wyfs02/M00/99/2B/wKiom1lE1z6QdgkTAABOSkWbuh4681.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/99/2B/wKiom1lE12nD60qTAABOUaYm1I0098.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/99/2B/wKioL1lE126AOCiHAAB4oZrEwcU536.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M02/99/2B/wKiom1lE12_RC_XTAAB73GnFwzo698.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M02/99/2B/wKiom1lE13DTBqBbAAB8Qi2QVYA515.png" target="_blank"></a>

6.httpd2.4实验

  6.1httpd2.4基于FQDN虚拟主机配置实验

    1.在/etc/httpd/conf.d/*.conf写入一个虚拟主机的配置文件(示例如下)

<code>        </code> 

<code>[root@localhost ~]</code><code># cat /etc/httpd/conf.d/huwho.conf</code>

<code>&lt;VirtualHost *:80&gt;</code>

<code>    </code><code>DocumentRoot </code><code>"/web/www/html/vhost1"</code>

<code>    </code><code>ServerName </code><code>"www.huwho.cn"</code>

<code>    </code><code>&lt;Directory </code><code>"/web/www/html/vhost1"</code><code>&gt;</code>

<code>        </code><code>Options FollowSymLinks</code>

<code>        </code><code>Require all granted</code>

<code>    </code><code>DocumentRoot </code><code>"/web/www/html/vhost2"</code>

<code>    </code><code>ServerName </code><code>"web.huwho.com"</code>

<code>    </code><code>&lt;Directory </code><code>"/web/www/html/vhost2"</code><code>&gt;</code>

    2.创建web站点主目录   

    mkdir /web/www/html/vhost{1..2} -pv

 3.写入index.html文件  

    echo www.huwho.cn &gt; vhost1/index.html

    echo web.huwho.com &gt; vhost2/index.html

 4.另一台测试主机写入域名解析(10.0.0.73)

<code>10.0.0.110 www.huwho.cn </code>

<code>10.0.0.110 web.huwho.com</code>

 5.检测语法

            httpd -t

    6.重启服务器

            systemctl restart httpd

     7.10.0.0.73主机测试

<code>[root@big ~]</code><code>#curl www.huwho.cn</code>

<code>    </code><code>www.huwho.cn</code>

<code>[root@big ~]</code><code>#curl web.huwho.com</code>

<code>    </code><code>web.huwho.com</code>

本文转自 PowerMichael 51CTO博客,原文链接:http://blog.51cto.com/huwho/1939292,如需转载请自行联系原作者