http2.2配置

Posted tony3154

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http2.2配置相关的知识,希望对你有一定的参考价值。

http: 超文本传输协议,工作在应用层

 

CentOS 6程序环境:httpd-2.2
  配置文件:
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
  检查配置语法:
    httpd –t
    service httpd configtest

  服务脚本:/etc/rc.d/init.d/httpd
  脚本配置文件:/etc/sysconfig/httpd
  服务控制和启动:
    chkconfig httpd on|off
    service {start|stop|restart|status|configtest|reload} httpd  

  站点网页文档根目录:
    /var/www/html
  模块文件路径:
    /etc/httpd/modules
    /usr/lib64/httpd/modules

  主程序文件: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/httpd.event

  主进程文件: /etc/httpd/run/httpd.pid

  日志文件目录:

    /var/log/httpd
    access_log: 访问日志
    error_log:错误日志
  帮助文档包:
    httpd-manual

  httpd配置文件的组成:
    grep "Section" /etc/httpd/conf/httpd.conf
      Section 1: Global Environment
      Section 2: ‘Main‘ server configuration
      Section 3: Virtual Hosts
  配置格式:directive value         变量   值
    directive: 不区分字符大小写
    value: 为路径时,是否区分大小写,取决于文件系统

    

MPM工作模式:

  prefork:多进程I/O模型,每个进程响应一个请求,默认模型

  一个主进程:生成和回收n个子进程,创建套接字,不响应请求

  多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

  worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

  一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

  event:事件驱动模型(worker模型的变种)

    一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

 

/etc/sysconfig/httpd      MPM    

  HTTPD=/usr/sbin/httpd.worker   取消该项以启用worker模式,查看该模式使用的模块httpd.worker -l

 

 

/etc/httpd/conf/httpd.conf

  ServerTokens prod       返回版本信息,prod仅显示apache,是显示最少信息的选项。

  Lister  80         默认监听本机所有IP地址,可以修改为某个IP的某个端口,可以指定监听多个IP端口  

  KeepAlive on|off      长连接开关,

  KeepAliveTimeout 15             长连接关闭时间,以秒为单位,httpd2.4支持毫秒,副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到相应,处理方式是减短持久连接时间  

<IfModule prefork.c>   httpd默认模式的模块配置,httpd -l查看使用的模块
StartServers 8      初始子进程
MinSpareServers 5      空闲时最小子进程
MaxSpareServers 20        空闲时最大子进程
ServerLimit 256      服务器最高连接数
MaxClients 256      客户端最高连接数      应该与服务器连接数相等
MaxRequestsPerChild 4000    服务器进程服务的最大请求数,达到数量后终止进程,释放内存

<IfModule worker.c>    httpd.worker模式的模块配置,httpd.work -l 可以查看使用哪些模块
StartServers 4        初始子进程
MaxClients 300      支持的并发客户访问最大数量
MinSpareThreads 25   最小的空闲线程
MaxSpareThreads 75     最大的空闲线程
ThreadsPerChild 25     每个子进程线程数
MaxRequestsPerChild 0    服务器进程服务的最大请求数,达到数量后终止进程,重新打开新进程,0永远不释放

httpd -M 查看动态加载模块

  User apache      启动服务的用户
  Group apache    启动服务的组

DocumentRoot "/var/www/html"    修改服务路径,网页的存储位置

 

  <Directory "/var/www/html">             

    设置文件夹属性,如果要下面的属性生效需要重命名welcome.conf,以使它失效,否则会自动转到noindex.html,无法显示文件列表

  1、Options Indexes FollowSymLinks       

       Options:后跟1个或多个以空白字符分隔的选项列表

    在选项前的+,- 表示增加或删除指定选项

   常见选项:   

    Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户

    FollowSymLinks:允许访问符号链接文件所指向的源文件 

    None:全部禁用

    All: 全部允许

       2、 AllowOverride

        与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令,该文件路径为访问数据路径下,默认为/var/www/html/下,和.html文件位置一致,需要手工创建

    只对<directory>语句有效        下列语句需要写在/etc/httpd/conf/httpd.conf/里相关的<directory>下以定义AllowOverride语句的生效范围

    AllowOverride All: .htaccess 中所有指令都有效

    AllowOverride None:.htaccess 文件无效

    AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖

    3、order和allow、deny     ip访问控制

      放在directory, .htaccess中

      order:定义生效次序;写在后面的表示默认法则,如果冲突,排后面的生效

        Order allow,deny     默认没有记入白名单的都不准访问,下面要跟上允许访问的白名单,否则任何地址无法访问

        allow from  192.168.1.100

        Order deny,allow  默认没有记入黑名单的都可以访问,下面要跟上黑名单,否则任何地址都可以访问

      deny from 192.168.1.189

    例:      

<Files ~ "*.txt$">
Order allow,deny
Deny from all
allow from 192.168.1.100,10.10.0.0

</Files>

 

日志设定

  日志类型:

      访问日志
      错误日志

      错误日志:

        ErrorLog logs/error_log

        LogLevel warn     可选值: debug, info, notice, warn,error,crit, alert, emerg

      访问日志:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined     定义日志格式
LogFormat "%h %l %u %t "%r" %>s %b" common                   
LogFormat "%{Referer}i -> %U" referer                                           
LogFormat "%{User-agent}i" agent

     CustomLog logs/access_log combined    选择启用的日志格式combined,common,referer,agent

    帮助文档:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      %h 客户端IP地址

      %l 远程用户,启用mod_ident才有效,通常为减号“-”

      %u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”

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

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

      %>s 响应状态码

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

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

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

默认字符集

  AddDefaultCharset UTF-8    建议UTF-8,全球语言都可以支持,避免乱码

定义路径别名

  alias  /download/    /data/bbs/    别名自己定义,路径根据需要设置,可以放置在本配置文件任意位置

  aliasmatch ^/imgs/(.*)?$    "/data/images/pic$1"   支持扩展正则表达式    

  aliasmatch ^(.*.(jpe?g|gif|png))$  "/data/images/$1"  

基于用户的访问控制

  认证方式两种:

    basic:明文

    digest:消息摘要认证,兼容性差

  定义安全域     一般创建在/etc/httpd/conf.d/下,

    <directory  "/app/website/secret/">     对某个文件夹进行限制

    AuthType Basic         选择认证方式

    AuthName "String“         提示

    AuthUserFile   "/etc/httpd/conf.d/.httpusers"      指定用户和密码的存放文件

    require user  http1 http2    指定可以访问的用户,require  valid-user为文件内所有用户皆可登陆

    </directory>

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

    使用专用命令完成此类文件的创建及用户管理

     htpasswd  [options]   /etc/httpd/conf.d/.httpdusers   username      目录要和AuthUserFile一致

     -c:自动创建文件,仅第一次创建时使用,再次使用会覆盖

    -p:明文密码

    -d:CRYPT格式加密,默认

    -m:MD5格式加密

    -s:sha格式加密

    -D:删除指定用户

 基于组账号进行认证             基于用户认证,需要用到用户账号密码文件

   定义安全域  

       一般创建在/etc/httpd/conf.d/下,

    <directory  "/app/website/secret/">         对某个文件夹进行限制

    AuthType Basic         选择认证方式

    AuthName "String“         提示

    AuthUserFile   "/etc/httpd/conf.d/.httpusers"      指定用户和密码的存放文件,文件位置自己选择

    AuthGroupFile    "/etc/httpd/conf.d/.httpdgroups"   指定用户属于的组,文件位置自己选择

    require   group  admin  

    </directory>

   创建用户账号和组账号文件

    vim /etc/httpd/conf.d/.httpdgroups

    admin:  http1  http2

       users:  http3  http4

远程客户端和用户验证的控制

  Satisfy ALL|Any

    ALL 客户机IP和用户验证都需要通过才可以

    Any客户机IP和用户验证,有一个满足即可

  示例:

    Require valid-user

    Order allow,deny

    Allow from 192.168.1

    Satisfy Any

实现用户家目录的http共享

  基于模块mod_userdir.so实现

  <IfModule mod_userdir.c> 

  #  UserDir disabled             将此行注释

  UserDir  publicweb              该目录在用户家目录下,比如~wang/publicweb,并没有定义哪些用户的家目录,所以只要用户有这个目录,都可以申请访问,但是要有权限

  </IfModule>

  此时httpd的进程是apache运行的,apache没有其他家目录的访问权限

  setfacl -m u:apache:x /home/wang/       为apache添加进入wang的家目录的权限

 

ServerSignature On | Off | EMail

  当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息如果不对外显示这些信息,就可以将这个参数设置为Off设置为Email,将显示ServerAdmin 的Email提示

 

status页面

  LoadModule status_module modules/mod_status.so     依赖的模块

  <Location /server-status>       访问该页面时自动显示网站状态信息,该文件名自定义,访问自动跳转

  SetHandler server-status     关键字,不可更改

  Order allow,deny               权限控制

  Allow from 172.16      仅允许172.16网段访问

  </Location>

  ExtendedStatus On     显示更详细的扩展信息

虚拟主机

   站点标识: socket

    IP相同,但端口不同

    IP不同,但端口均为默认端口

    FQDN不同:

      请求报文中首部

      Host: www.magedu.com

  有三种实现方案:

    基于ip:为每个虚拟主机准备至少一个ip地址  

    基于port:为每个虚拟主机使用至少一个独立的port

    基于FQDN:为每个虚拟主机使用至少一个FQDN

注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机

  禁用方法:注释中心主机的DocumentRoot指令即可  /etc/httpd/conf/httpd.conf

  虚拟主机的配置方法:    一般将配置文件建在/etc/httpd/conf.d/下

  vim /etc/httpd/conf.d/vhosts.conf

    根据IP配置

      <VirtualHost 192.168.1.101>     不同的虚拟主机需要定义不同的IP地址

      DocumentRoot “/app/website1"        网站文件路径

      Errorlog logs/website1-error_log    路径/var/log/httpd/,为每个网站定义单独的错误日志

      Customlog  logs/website1-access_log common    路径/var/log/httpd/,定义单独的日志,common为定义的日志模式

      </VirtualHost>

    根据端口

      <VirtualHost 192.168.1.101:90>      

      DocumentRoot “/app/website2" 

      Errorlog logs/website2-error_log 

      Errorlog logs/website2-error_log

      Customlog  logs/website1-access_log common

      </VirtualHost>

      listen 90          监听90端口,根据端口来区分主机,需要在配置文件下加上此行

    基于FQDN:为每个主机定义不同的FQDN

      namevirtualhost  *:80                  此项可以在主配置文件打开,或者在本文件中添加,2.4版本不需要

    <VirtualHost *:80>     

      DocumentRoot “/app/website2" 

      servername www.linux123.tech    域名需要注册

      serveralias   www.aa.com  www.aaa.com   需要域名支持

      Errorlog logs/website2-error_log 

      Errorlog logs/website2-error_log

      Customlog  logs/website1-access_log common

      </VirtualHost>  

      当通过IP访问网站,默认是放在第一位的网站回应,这个发生在使用FQDN区分的主机里

 

 

/etc/httpd/conf.d/welcome.conf     

ErrorDocument 403 /error/noindex.html    在没有页面显示时,显示noindex.html,重命名welcome.conf,不再显示该页面,因为会透露版本信息

/etc/httpd/conf/httpd.conf    

  DirectoryIndex index.html index.html.var   默认系统会在主站点找这两个文件,找到了就显示,找不到就显示noindex.html,如果修改了welcom.conf,则显示下图

技术分享图片

 

 

ab命令 测试并发连接

ab -c 2000  -n 10000  http://192.168.1.101/test.txt   

并发2000个连接,一共发送10000个,地址.....

 

 

 

 

 

 

 














































以上是关于http2.2配置的主要内容,如果未能解决你的问题,请参考以下文章

http协议--Apache-Httpd服务基本配置-rpm安装-编译安装(HTTP2.2,HTTP2.4)

CentOS系统上配置https服务

httpd配置文件中常用模块详解一

http 工作模式与模块

Http2需要PageSpeed模块吗?

centos6下基于http2.2搭建论坛博客系统及phpMyAdmin应用程序的实现