zoukankan      html  css  js  c++  java
  • LAMP(二)之httpd2.2相关配置

    一、安装httpd服务

    CentOS6 默认安装httpd2.2版本

    CentOS7 默认安装httpd2.4版本

    # yum install httpd

    二、安装后相关文件说明

      配置文件: 

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

      服务脚本:

     /etc/rc.d/init.d/httpd
     脚本的配置文件:/etc/sysconfig/httpd  

      主程序文件:   

      /usr/sbin/httpd
      /usr/sbin/httpd.event
      /usr/sbin/httpd.worker

      日志文件目录:  

      /var/log/httpd
          access_log: 访问日志
          error_log:错误日志

      站点文档目录:  

      /var/www/html

      模块文件路径:

      /usr/lib64/httpd/modules

    三、常用配置

    打开主配置文件:

    vim /etc/httpd/conf/httpd.conf

      1. 修改监听的IP和Port 

      Listen [IP:]PORT
        省略ip表示监听所有ip,listen可重复出现多次
    实例:
        # Listen 80
        # Listen 192.168.1.103:8080

      2. 持久连接

      Persistent Connection: 每个连接获取资源完成后不会断开连接,而是继续等待其他的请求完成

        如何断开?

          数量限制: 默认100

          时间限制: 可配置

        缺陷: 对并发访问量较大的服务器,持久连接功能会使有些连接得不到响应

        折中解决办法: 使用较短的持久连接时间

          Note: httpd-2.4版本支持毫秒级持久时间

        开启或关闭持久连接:

          KeepAlive On|Off  //打开或关闭持久连接
              MaxKeepAliveRequests #  //最大持久连接数
              KeepAliveTimeout #  //持久连接超时时长
    实例:
           # telnet 102.168.1.103 80
           # GET / HTTP/1.1
           # Host: 192.168.1.103

      3. MPM

      Multipath Process Module: 多道处理模块

      有三种模型: 

        prefork: 多进程模型,每个进程响应一个请求

          一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不超过1024个

        worker: 多线程模型(多进程生成,一个进程生成多个线程),每个线程响应一个请求

        event: 事件驱动模型,一个线程响应多个请求

    查看静态编译的模块
    # httpd -l
    查看静态编译及动态装载的模块
    # httpd -M
    更换使用的httpd程序
      # vim /etc/sysconfig/httpd
      # HTTPD=/usr/sbin/httpd.worker
    重启服务生效

    prefork的配置:

          <IfModule prefork.c>
                    StartServers       8        # 服务启动时启动多少个进程
                    MinSpareServers    5        # 最少空闲进程数
                    MaxSpareServers   20        # 最大空闲进程数
                    ServerLimit      256        # 为maxclients所准备的在其服务器生命周期内所允许的最大值,进程数量最大值
                    MaxClients       256        # 服务器端最多允许启动多少个进程,也即是服务器端最多允许多少个客户端同时请求资源
                    MaxRequestsPerChild  4000    # 一个进程最多响应多少次的请求                                                
               </IfModule>

    worker的配置:

          <IfModule worker.c>
                    StartServers         4    # 服务器启动时启动多少个进程
                    MaxClients         300    # 服务器端启动的最大线程数
                    MinSpareThreads     25    # 最少空闲线程数
                    MaxSpareThreads     75    # 最大空闲线程数
                    ThreadsPerChild     25    # 每个进程所能够启动的线程数
                    MaxRequestsPerChild  0    # 每个线程所能够响应的最大请求数量,0表示不受限制
              </IfModule>

      4. DSO 动态共享对象,支持模块动态装卸载   

        LoadModule <mod_name> <mod_path>
            /etc/httpd/modules --> /usr/lib64/httpd/modules

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

        DocumentRoot指向的路径为URL路径的起始位置   

          DocumentRoot "/var/www/html"
    实例: 主配置文件中修改:
        # DocumentRoot "/www/htdocs"
       # Directory "/www/htdocs">

      6. 站点访问控制

      可基于两种类型的路径指明对那些资源进行访问控制

        文件系统路径:

          <Directory ""></Directory> 对目录中所有文件控制

          <File ""></File> 对单个文件控制

          <FileMatch ""></FileMatch> 对模式匹配的文件进行控制,最好不用

        URL路径:

          <Location ""></Location>

       访问控制机制:

          基于来源地址

          基于账号

      7. Directory中基于来源地址实现访问控制

        (1)Options

          所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

            Indexes: 索引

              实例:
                默认是由indexes配置,如果在documentroot目录下没有index.html或者index.html.var
                访问时会列出文件列表

     

                不启用Indexes: -Indexes

            FollowSymlinks: 允许跟踪符号链接文件
              实例:
                ln -sv /etc/issue /www/htdocs/issue.html
                浏览器访问: 192.168.1.103/issue.html可以访问
                如果要去掉FollowSymlinks: 前面加个-号

          options里面什么选项都不要可以设置为none 

        (2)基于来源地址的访问控制机制

          Order: 检查次序

            Order allow,deny: 相当于建立白名单

            Order deny,allow: 相当于建立黑名单

          Allow from

          Deny from

          来源地址:

            IP

            NetAddr        

              192.168.1
              192.168.1.0
              192.168.1.0/24
              192.168.1.0/255.255.255.0
    实例:
       Order allow,deny
        Deny from 192.168.1.110
        Allow from 192.168.1

      测试: elinks -dump http://192.168.1.102  //当前主机访问自己是可以的

      8. 定义默认主页面

        DirectoryIndex index.html index.html.var

      9. 日志设定  

        错误日志:

          ErrorLog logs/error_log

          日志级别: LogLevel warn

            debug, info, notice,warn,error,crit,alert,emerg 默认是warn       

        访问日志:
          CustomLog logs/access_log combined 

       LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
                     %h: 客户端IP地址
                     %l: Remote logname (from identd,if supplied), -表示为空 远程登录用户名
                     %u: Remote user, (from auth; may be bogus if return (%s) is 401); 用户认证时的用户名
                     %t: Time the request was received (standard english format), 服务器收到请求时的时间
                     %r: First line of request,请求报文的首行信息(method url version);
                     %>s: 响应状态码
                     %b: 响应报文的大小,单位是字节,不包括响应报文首部
                     %{Referer}i: 请求报文当中”referer“首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来
                     %{User-Agent}i:请求报文当中”User-Agent“首部的值;即发出请求用到的应用程序
        
        日志格式查看:http://httpd.apache.org/docs/trunk/mod/mod_log_config.html#formats

    10、路径别名

      Alias /URL/ "/PATH/TO/SOMEDIR/"
    实例:
            当前DocumentRoot /www/htdocs
            # mkdir /www/htdocs/bbs -pv
            # vim /www/htdocs/web1.html
            # mkdir /www/htdocs/forum
            # vim /www/htdocs/forum/web2.html
            # vim /etc/httpd/conf/httpd.conf
                 Alias /bbs/  "/forum/" 

      11、设定默认字符集

        # AddDefaultCharset UTF-8

      12、基于用户的访问控制

        认证质询: 响应码401,拒绝客户端请求,并要求客户端提供账号和密码

        认证: 客户端输入账号和密码后再次发送请求;认证通过,则服务器发送响应的资源

          认证类型:

            basic: 明文

            digest: 消息摘要

        安全域: 需要用户认证后才能方为的路径

          应该通过名称对其进行标识,并用于告知用户认证的原因

        basic认证:

          1. 定义安全域     

          <Directory "/www/htdocs/admin">
                Options none
                AllowOverride none
                Authtype Basic
                AuthName "Administrator private"
                AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                Require valid-user
             # Require user jerry //只允许jerry用户登录       </Directory>

          2. 提供账号和密码存储

           使用htpasswd命令进行管理      

          htpasswd [options] passwordfile username
                -c: 自动创建passwordfile,因此,仅在添加第一个用户时使用
                -m: md5加密用户密码
                -s: sha1加密用户密码
                -D:删除指定用户
          # htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom                        
          # htpasswd -m /etc/httpd/conf.d/.htpasswd jerry

           3. 实现基于组进行认证     

          # htpasswd -m /etc/httpd/conf.d/.htpasswd alen  //添加第三个用户
          # vim /etc/httpd/conf.d/.htgroup  //创建组文件
              webadmin: jerry alen
            <Directory "/www/htdocs/admin">
                  Options none
                  AllowOverride none
                  Authtype Basic
                  AuthName "Administrator private"
                  AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                      AuthGroupFile "/etc/httpd/conf.d/.htgroup"      //需要提供组文件
                  Require group webadmin   //需要组来进行验证
            </Directory>

      13、虚拟主机

        有三种实现方案:

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

          基于port: 为每个虚拟主机准备至少一个专用port

          基于hostname: 为每个虚拟主机准备至少一个专用hostname

             Note: 一般虚拟主机莫与中心主机混用,所以要使用虚拟主机,先禁用中心主机

            每个虚拟主机都有专用配置     

            <VirtualHost "IP:PORT">
                ServerName
                DocumentRoot ""
            </VirtualHost>
        
                  ServerAlias 虚拟主机的别名
                  ErrorLog
                 CustomLog
               <Directory "">
               </Directory>
    实例1:基于ip实现虚拟主机
      1. 先禁用中心主机
          # <DocumentRoot>
      2. 定义虚拟主机配置
          <VirtualHost "192.168.1.102:80">
                ServerName web1.alen.com
                DocumentRoot "/vhosts/web1/htdocs"
          </VirtualHost>
         <VirtualHost "192.168.1.107:80">
                ServerName web2.alen.com
                DocumentRoot "/vhosts/web2/htdocs"
          </VirtualHost>
      3. 创建目录与文件
        # mkdir /vhosts/{web1,web2,web3}/htdocs -pv
        # vim /vhosts/web1/htdocs/index.html
        # vim /vhosts/web2/htdocs/index.html
      4. 测试
         添加ip地址: ip addr add 192.168.1.108/24 dev eth0
         192.168.1.102
         192.168.1.108

    基于port实现虚拟主机

      1. 监听的端口打开
                Listen 80
                Listen 8080
       2. 虚拟主机配置增加一行:
                <VirtualHost "192.168.1.104:8080">
                    ServerName web3.alen.com
                    DocumentRoot "/vhosts/web3/htdocs"
                </VirtualHost>
       3. 给web3添加页面
       4. 测试页面
               192.168.1.104:80
               192.168.1.104:8080

    基于主机名实现虚拟主机

      1. 虚拟主机配置   

         <VirtualHost 192.168.1.102:80>
               ServerName web1.alen.com
               DocumentRoot "/vhosts/web1/htdocs"
         </VirtualHost>
    <VirtualHost 192.168.1.102:80> ServerName web2.alen.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> <VirtualHost 192.168.1.102:80> ServerName web3.alen.com DocumentRoot "/vhosts/web3/htdocs" </VirtualHost>

      2. 开启基于主机名的虚拟主机

      NameVirtualHost 192.168.1.102:80

      3. 测试 

      curl web1.alen.com
      curl web2.alen.com
      curl web3.alen.com

      14、 内置的status页面

      <Location /server-status>
          SetHandler server-status
          Order deny,allow
          Deny from all
          Allow from 192.168.1
      </Location>
      #ExtendedStatus On  //打开查看更详细的status信息

      15、curl命令  

      curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。curl支持HTTPS认证,
        并且支持HTTP的POST、PUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,
        下载文件断点续传,上载文件断点续传,httpd代理服务器管道(proxy tunneling),甚至它还支持ipv6 socks5代理服务器,
        通过http代理服务器上传文件到FTP服务器等等,功能十分强大。 curl [options] [URL...] curl的常用选项: -A/--user-agent <string> 设置用户代理发送给服务器 实例: curl -A 'IE11' web1.magedu.com: 把自己伪装成ie浏览器进行访问 -basic 使用HTTP基本认证 --tcp-nodelay 使用TCP_NODELAY选项 -e/--referer <URL> 来源网址 实例: curl -e "www.baidu.com" web1.magedu.com: 设置来源网址为 --cacert <file> CA证书 (SSL) --compressed 要求返回时压缩的格式 -H/--header <line> 自定义首部信息传递给服务器 -I/--head 只显示响应报文首部信息 实例: curl -I web1.magedu.com: 只显示head首部信息 --limit-rate <rate> 设置传输速率 -u/--user <user[:password]> 设置服务器的用户和密码 -0/--http1.0 使用HTTP 1.0 另一个工具: elinks [options] URL -dump: 不进入交互模式,而直接将URL的内容输出至标准输出

      16、使用mod_deflate模块压缩页面优化传输速率  

        适用场景:
          1. 节约带宽,额外消耗cpu,同时,可能有些较老浏览器不支持
          2. 压缩适用于压缩的资源,例如文本文件 

        实例: 打开deflate模块,然后加入下面代码

                SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 # Netscape 4.x has some problems BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch MSI[E] !no-gzip !gzip-only-text/html

      17、https

       SSL会话的简化过程    

        1. 客户端发送可供选择的加密方式,并向服务器请求证书
        2. 服务器端发送证书以及选定的加密方式给客户端
        3.客户端取得证书并进行证书验证
          如果信任服务器给其发的CA证书:
            a. 验证证书来源的合法性;用CA的公钥解密证书上数字签名
            b. 验证证书的内容的合法性;完整性验证
            c. 检查证书的有效期限
            d. 检查证书是否被吊销
            e. 证书中拥有者的名字,与访问的目标主机要一致
    
        4. 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
        5. 服务器用此对称密钥加密用户请求的资源,响应给客户端
    
      注意: SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机

      配置httpd支持https:
        1. 为服务器申请数字证书
          测试: 通过私建CA发证书
            a.创建私有CA
            b.在服务器创建证书签署请求
            c.CA签证

        2. 配置httpd支持使用ssl,及使用的证书
          # yum -y install mod_ssl

          配置文件: /etc/httpd/conf.d/ssl.conf
            DocumetRoot
            ServerName
            SSLCertificateFile
            SSLCertificateKeyFile

        3. 测试基于https访问相应的主机
          # openssl s_client [-connect host:port] [-cert filename] [-CApath directory][-CAfile filename] 

                     实例:
                             1. 先创建私有CA
                             server: 192.168.1.121
                             client: 192.168.1.103
    
                             server:
                                 # cd /etc/pki/CA
                                 # touch index.txt
                                 # echo 01 > serial
                                 # (umask 077;openssl genrsa -out private/cakey.pem 2048) :ca生成私钥
                                 # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300  :自签证书
    
                             client:
                                 # (umask 077;openssl genrsa -out httpd.key 1024) :client生成私钥
                                 # openssl req -new -key httpd.key -out httpd.csr : 证书申请
                                 # scp httpd.csr root@192.168.1.121:/tmp
    
                             然后 服务器端签证书
                                 # openssl ca -in /tmp/httpd.csr -out certs/web1.magedu.com.crt -days 365  : ca签证
                                 # scp certs/web1.magedu.com.crt 192.168.1.103:/etc/httpd/ssl    :传给客户端
    
                         2. http设置
                             httpd -M | grep ssl : 检测ssl模块有没有装载
                             yum install mod_ssl
    
                             cd /etc/httpd/conf.d/ssl.conf
                                 <VirtualHost *:443>    默认ip去掉改为*
                                 SSLCertificateFile /etc/httpd/ssl/httpd.crt :httpd 证书存放位置
                                 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key  : httpd私钥
    
                                 DocumentRoot "/var/www/html"
                                ServerName web1.alen.com
    
                        3.测试:
                            # openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
    
                                192.168.1.121测试103:    openssl s_client -connect 192.168.1.103:443 -CAfile /etc/pki/CA/cacert.pem
    
                                浏览器测试: https://192.168.1.103:443
                                    # 需要导入CA证书

      18. httpd自带的工具程序

        htpasswd: basic 认证基于文件实现时,用到的账号密码文件生成工具
        apachectl: httpd自带的服务控制脚本,支持start,stop
        apxs: 由httpd-devel 包提供,扩展httpd使用第三方模块的工具
        rotatelogs:日志滚动工具:
          access.log -->
          access.log, access.1.log
          access.log, access.1.log, access.2.log
        suexec:
          访问某些有特殊权限配置的资源时,临时切换至指定用户运行

        ab: apache benchmark

      19、http压力测试工具

        ab、 wrbbench、http_load、

        jmeter、loadrunner

        tcpcopy    

       ab [OPTIONS] URL
          -n: 总的请求   
          -c: 模拟的并发数
          -k: 以持久连接模式测试
       ulimit -n #: 调整当前用户所同时打开的文件数

     

     

     

  • 相关阅读:
    sleuth使用说明(入门)
    git学习
    rancher中级(二)(rancher中添加证书及操作虚拟主机)
    rancher中级(一)(rancher的存储,网络)
    rancher初级(搭建+基本操作+web应用部署)
    Docker学习笔记
    面试-框架篇
    面试-核心篇
    面试-基础篇
    「译」JUnit 5 系列:扩展模型(Extension Model)
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10780608.html
Copyright © 2011-2022 走看看