前言:

  上一篇博文说到了http的发展以及http完整请求响应的工作流程。

一、开篇:

  从最简单的静态服务器开始。

  之前说过,http是应用层协议,必定会在用户空间体现出具体的应用程序。常见的http服务器:

   httpdapache

   nginx

   lighttpd

  以上皆是静态服务器,除此之外还有一些能够处理动态网页的应用程序服务器:

   IIS

   tomcatjettyjboss

  自然,这里所讲述的仅仅是盛名已久的apache

  蛮荒时代之时在NCSA(美国计算机安全协会)号召聚集众多工程师开发了一款能够提供完整服务的web软件,后来项目完成之后,众工程师去往各大IT公司。但是,由于对此项目还是怀有情怀,于是自发发起维护其项目,不断且无偿的为其更新补丁,所以此服务也被称为a patchy server,简称apache,其意为充满补丁的服务器

  同时,也就是期间的无意之举,造就了apache的诞生。

  在此事后两年,apache上线且迅速得取缔的旧版本,并且占据了约百分之五十的份额,形成自然垄断,既然是天赐良机,为何不把握机会,所以apache基金会成立。现今,在美国apache有三种含义,一层为阿帕奇族,二层为阿帕奇武装直升机,三层为阿帕奇软件基金会。

 

二、特性:

 http的特性:

  高度模块化特性:core+modules

 

  DSODynamic Shared Object

  多路处理模块(MPM

   prefork:多进程模型,每个进程响应一个请求。一个主进程,负责生成n个子进程,子进程为工作进程,每个子进程处理一个用户请求,如果没有用户请求,也会生成空闲进程,随时等待请求到达,最大不会超过1024个。主进程只负责接受请求,随后将请求交给子进程,由子进程处理请求,最后再由主进程响应客户端

   worker:多进程多线程,一个进程生成多个线程,一个线程响应一个请求

   event:事件驱动模型,一个进程生成多个线程,一个线程响应多个请求,最多能够响应(n*m)个请求。在worker模型下添加了一个事件驱动机制,让其能够同时响应多个请求

  虚拟主机

  负载均衡

  路径别名

  用户认证

   basic认证

   digest认证

  支持第三方模块

三、配置

 http2.4配置:

   默认工作目录在/etc/http下

    主配置文件/etc/http/conf/http.conf

    包括配置文件/etc/http/conf.d/*.conf

   日志记录文件:

    /var/log/http

      access_log 访问日志

      error_log 错误日志

   模块目录:

    /etc/httpd/conf.modules.d/*.conf 

 

 

    站点文档目录:

    /var/www/html

 

  主配置文件/etc/http/conf/http.conf配置

  (1)修改监听地址

    Listen  【ip】:PORT

~]# vim /etc/httpd/conf/httpd.conf
    Listen 80

  (2)持久连接

~]# vim /etc/httpd/conf/httpd.conf   #或者/etc/httpd.d/*.conf
    KeepAlive on|off                 #开启长连接之后,每个资源请求接受后不会断开tcp连接,而是继续请求资源,直至访问控制极限或者客户端主动断开连接。注:可通过telnet验证、测试是否开启telnet
  MaxKeepAliveRequests 100 #数量控制,当请求资源到达100个之后,服务器端会自动断开tcp连接,重新进行tcp连接
  KeepAliveTimeout 15 #时间控制,当用户请求资源后15s之后无动作,服务器自动断开tcp连接

  (3)MPM

~]# vim /etc/httpd/conf.modules.d/00-mpm.conf    #注:在apache2.2上有单独的主配置文件/usr/sbin/httpd能够在其中修改需要的MPM模块,但仅限于rpm包安装的,因为apache2.2并不支持编译多个MPM模块
    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so      #需要什么何种工作模型只需要去掉#号,
  #LoadModule mpm_worker_module modules/mod_mpm_worker.so
  #LoadModule mpm_event_module modules/mod_mpm_event.so

 ~]# httpd -l              #查看静态编译的模块
  Compiled in modules:
  core.c
  mod_so.c
  http_core.c

 ~]# httpd -M     #查看所有编译的模块,包含静态模块

  

~]# vim /etc/httpd/conf.d/prefork.conf      #prefork简单配置,apache2.4使用高度模块化的配置方式,所有的需要的MPM模型的配置文件,需手动建立。不同的工作模式,只需要激活不同的配置文件即可
    <IfModule mpm_prefork_module>
    StartServers 8             #初始启动的进程数
    MinSpareServers 5  	       #最小空闲进程数
    MaxSpareServers 20      #最大空闲进程数
    ServerLimit 256            #最大进程数
    MaxClients  256	    #最大并发请求数
    MaxRequstsPerChild  4000   #单个进程最大响应请求次数
</IfModule>
~]# vim /etc/httpd/conf.d/worker.conf
<IfModule mpm_worker_module>
StartServers 2         #初始启动的进程数
MaxClients 300         #线程接受的最大请求数
MinSpareThreads 25     #最小线程数
MaxSpareThreads 100    #最大线程数
ThreadsPerChild 25     #每个进程能产生的线程数
MaxRequestPerChild  0  #每个线程响应的最大请求次数  0表示不做限制
</IfModule>

  

~]# vim /etc/httpd/conf.d/event.conf       #event和worker的工作模式十分的相似,前者是在后者的基础上进行的改进,加入了事件通知机制。
<IfModule mpm_event_module>
StartServers 2         #初始启动的进程数
MaxClients 300         #线程接受的最大请求数
MinSpareThreads 25     #最小线程数
MaxSpareThreads 100    #最大线程数
ThreadsPerChild 25     #每个进程能产生的线程数
MaxRequestPerChild  0  #每个线程响应的最大请求次数  0表示不做限制
</IfModule>

  (4)DSO

~]# vim /etc/httpd/conf.modules.d/00-base.conf        #动态加载模块十分简单,只需手动编辑文件,取消或加上#注释即可。当然,之后得重启或重读配置文件
   #LoadModule rewrite_module modules/mod_rewrite.so
~]# systemctl reload httpd.service

  (5)定义server文档页面路径 

 

 ~]# vim /etc/httpd/conf/httpd.conf     #指向的路径是URL路径的起始位置,比如要访问test/index.html,则URL路径为www.xxyy.com/test/index.html
   DocumentRoot "/var/www/html"

  (6)站点访问控制

  

~]# vim /etc/httpd/conf/httpd.conf 
    <Directory "/var/www/html">                #以下仅仅只是在目录下的访问控制,还有基于Location的控制,形似此方式
      <RequireAll>
        #Require all granted                    #允许所有用户访问
        #Require all denied                     #拒绝所有用户访问
        Require ip 127.0.0.1                    #允许某ip访问
        Require not ip 192.168.0.0              #拒绝某ip访问
      <RequireAll
    </Directory>  

  (7)主页特性选项

<Directory "/var/www/html">
Options
  Indexes              #索引,将所有超链接显现出来,一般做下载站点时使用 
  FollowSymlinks       #允许跟随符号连接访问非目录下的文件
  SymLinksfOwnerMatch  #允许跟踪符号链接,但必须相同属主属组
  ExecCGI              #允许运行CGI脚本
  MultViews            #内容协商机制,根据客户端语言打开不同的语言的页面
AllowOverride None     #是否允许子目录单独设置访问控制,在每个目录下生成一个.htaccess文件,在里面定义其访问权限。当用户访问时单独通过.htaccess来访问控制
DirectoryIndex index.html index.html.var #设定默认页面
</Directory>
<IfModule dir_moudle>
DirectoryIndex index.html
</IfModule>  #设定默认页面

  (8)日志设定

~]# vim /etc/httpd/conf/httpd.conf 
    Errorlog  "logs/error_log"        #错误日志存放位置
    LogLevel   warn                   #大于或等于该级别才会记录
         debug,info,notice,warn,error,crit,alert,emerg    

  (9)路径别名

~]# vim /etc/httpd/conf/httpd.conf 
  <IfModule alias_module>
        Alias /bbs “/bbs/bbc”       #能够将所有访问bbs目录下的所有用户,重定向到bbs/bbc目录下
    <IfModule>

  (10)设置字符集

~]# vim /etc/httpd/conf/httpd.conf
    AddDefaultCharset UTF-8     #设置默认字符集

  (11)安全域认证

<Directory “”>
  Options None
  AllowOverride None
  AuthType Basic   #认证方式
  AuthName “”      #安全域名
  AuthUserFile “/PATH/TO/HTTP_USER_PASSWD_FILE”      #认证文件存放路径,可以使用htpasswd创建认证文件,第一次使用-c,-m选项能够手动建立文件和md5加密方式,第二次无需使用-c选项。
  Require user username1 ...       #Require valid-user   允许表单上所有的用户访问 
</Directory> 

  (12)虚拟主机

~]# vim /etc/httpd/conf.d/vhost.conf 
    <Directory "/vhosts">                  #在apache2.4上,需要自己添加上该目录的选项,否则用户会出现访问权限不足
        Require all granted
    </Directory>
<VirtualHost 192.168.139.100>             #虚拟主机监听的套接字,需要注意的是,一般使用虚拟主机建议注释掉中心主机的DocumentRoot
    ServerName www.xxyy.com               #主机名,此处是随意,若不是需要基于主机名间通信,此处随意。
    DocumentRoot "/vhosts/web1/htdocs"    #虚拟主机URL的起始目录
<Directory "/vhosts/web1/htdocs”>         #apache2.4上必须明确规定权限,默认权限是拒绝访问的
    AllowOverride None
     <RequireAny>
      Require all granted
     </RequireAny>
</Directory>

  (13)内置staus

<Location /server-status>   #仅仅是基于Location管理,任意主机都可以使用status页面,能清楚的观察到httpd的运行状态。但是这页面十分危险,通常都只会设定本机能够访问。
        SetHandler server-status
        Require ip 192.168.139.1
</Location>

  

  

  

 

版权声明:本文为Forestes原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/Forestes/p/7877016.html