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个,地址.....

 

 使用mod_deflate模块压缩页面优化传输速度

 

使用mod_deflate模块压缩页面优化传输速度

 适用场景:  

  (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

   (2) 压缩适于压缩的资源,例如文本文件

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

    LoadModule deflate_module modules/mod_deflate.so 

    SetOutputFilter DEFLATE                     在需要压缩的网站下设置

    支持的格式

    AddOutputFilterByType DEFLATE text/plain 

    AddOutputFilterByType DEFLATE text/html

    AddOutputFilterByType DEFLATE application/xhtml+xml

    AddOutputFilterByType DEFLATE text/xml

    AddOutputFilterByType DEFLATE application/xml

    AddOutputFilterByType DEFLATE application/x-javascript

    AddOutputFilterByType DEFLATE text/javascript

    AddOutputFilterByType DEFLATE text/css

  Level of compression (Highest 9 - Lowest 1)    压缩级别

  DeflateCompressionLevel 9     默认压缩级别9

    示例:

        <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

      SetOutputFilter DEFLATE                    

      AddOutputFilterByType DEFLATE text/plain 

      AddOutputFilterByType DEFLATE text/html

      AddOutputFilterByType DEFLATE application/xhtml+xml

      AddOutputFilterByType DEFLATE text/xml

      AddOutputFilterByType DEFLATE application/xml

      </VirtualHost>  

 

http加密https

  安装加密模块

    yum install mod_ssl

  会自动生成一个配置文件/etc/httpd/conf.d/ssl.conf

  重启服务后生效

  加密只支持一个服务器,不支持多虚拟主机

   vim /etc/httpd/conf.d/ssl.conf

  ServerName www.Linux123.tech:443                    加密的网站name  

  SSLEngine on                 加密引擎启用

  SSLCertificateFile /etc/pki/tls/certs/localhost.crt         CA颁发的证书文件

  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key           web私钥key路径

  SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt               CA的证书文件

  http 重定向https 

    vim /etc/httpd/conf.d/test.conf         新建conf文件

    redirect temp  /  https://www.baidu.com     临时跳转,当访问网页根目录时,跳转到百度

    redirect permanent / https://www.baidu.com   永久重定向

HSTS:HTTP Strict Transport Security

  HSTS跳转:设置后浏览器内部会自动跳转https协议

    通过模块rewrite_module 实现

    修改/etc/httpd/conf/httpd.conf

    或者在/etc/httpd/conf.d/下新建子配置文件

    vim  /etc/httpd/conf.d/rewrite.conf

    Header always set Strict-Transport-Security "max-age=31536000"    单位秒,持续时间

    RewriteEngine on

    RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]      302临时转发,301永久转发 ,HTTPD_HOST代表访问头部地址 

 

 

 

 

http2.4差异

  无明确授权的目录,默认拒绝

  设置站点文件夹时,需要明确授权,并且语法有差异

  documentroot "/app/website"

  <directory /app/website>

    Require all granted    

  </directory>

  拒绝所有主机访问:Require all denied

  允许所有主机访问:Require all granted

  控制特定的IP访问:

    Require ip IPADDR:授权指定来源的IP访问

    Require not ip IPADDR:拒绝特定的IP访问

  <directory /app/website>

  <RequireAll> 

  Require all granted

  Require not ip 172.16.1.1     拒绝特定IP   需要加入<RequireALL>

  </RequireAll>

  </directory>

 

  <RequireAny>
  Require all denied
  require ip 172.16.1.1      允许特定IP ,格式同上,上下需要<directory>和文件夹路径
  </RequireAny>

  控制特定的主机访问:

    Require host HOSTNAME:授权特定主机访问

    Require not host HOSTNAME:拒绝

    HOSTNAME:

      FQDN:特定主机

      domin.tld:指定域名下的所有主机

posted on 2019-01-20 14:05  tony3154  阅读(714)  评论(0编辑  收藏  举报

导航