httpd二之主配置文件详解、测试工具、压力测试ab

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本文主要讲述httpd的主配置文件中可以配置的选项以及参数,以2.2系列的为主,在http2.4以后会添加一些新的功能和模块,配置文件可能也会有一些差别,关于2.4的配置文件将在后续推出,敬请期待!

   如果httpd是yum安装或者是rpm包安装的话,主配置文件会默认保存在/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf为主配置文件的辅助性配置文件

1、监听套接字

  Listen [IP:]port

  此指令可以出现多次,用于指定监听多个不同的套接字,IP地址可以省略,如果IP地址省略则表示监听在本机所有的ip地址上

2、配置实用Keepalive,主要是配置保持连接中的超时时间和最大连接数

   KeepAlive {On|Off}

   KeepAliveTimeout 2 超时时间为2s,单位默认为s

   MaxKeepAliveRequests 50 最大连接数

3.MPM,为多道处理模块

    prefork:一个进程响应一个请求

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

    event:一个进程同事响应多个请求,但不会生成线程

    http -l 查看编译进内核的模块

    如果向使用不同的MPM,直接修改文件/etc/sysconfig/httpd文件中的HTTPD项即可

     <IfModule preforck.c> 判断模块是否存在

        StartServers  默认启动的工作进程数

        MinSpareServers 最少空闲进程数

        MaxSpareServers 最大空闲进程数

        ServerLimit  最大活动进程数

        MaxClients  最大并发连接数,最多允许发起的连接请求个数

        MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数

     </IfModule>

     <IfModule worker.c>

        StartServers 默认启动的工作进程数

        MaxClients 最大并发连接数

        MinSpareThreads 最少空闲线程数

        MaxSpareThreads 最多空闲线程数

        ThreadsPerChild 每个自己进程生成的线程数

        MaxRequestsPerChild 每个子进程在生命周期内最大允许服务的请求个数

      </IfModule>

4.DOS模块的加载方式,动态模块

      LoadModule module_name /path/to/module

      可以使用绝对路径,也可以使用相对路径,如果使用相对路径,则是相对于ServerRoot所定义的位置而言的

      httpd -m 列出所有已加载的DOS模块与非DOS模块

5.配置站点根目录

      DocumentRoot /path/to/somewhere

       只能使用绝对路径

6.页面访问属性

     <Direcotry "/path/to/somewhere">

        Options 选项

           Indexes:缺少指定的默认主页时,允许将目录中的所有文件以列表形式返回给用户,危险:慎用

           FollowsymLinks:允许跟随符号链接所指向的岁暗示文件

           None:所有的都不启用

           All: 所有的都启用

           ExecCGI: 允许使用mod_cgi模块执行CGI脚本

           Includes: 允许mod_include模块实现服务器端包含

           IncludesNOEXEC:允许包含但不允许执行CGI脚本

           MultiViews:允许使用mod_negotication实现内容协商

           SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件

      </Direcotry>

7.基于主机的访问控制(2.2系列的配置)

      <Direcotry "/path/to/somewhere">

          Options

          AllowOverride

              None 不禁用下面选项

          Order 次序,写在后面的为默认

              allow,deny: 没有允许的都拒绝

              deny,allow:没有拒绝的都允许

          Allow from   允许通过的主机

          Deny from    拒绝通过的主机

               可以是单独的ip地址,也可以是一个网段

                192.168.0

                192.168.0.0

                192.168.0.0/24

                192.168.0.0/255.255.255.0

                 表示的都为192.168.0网段

      </Direcotry>

        如果都匹配或都不匹配时则以默认的为准,否则以匹配到的为准

8.定义默认主页面

      DirectoryIndex

      查询顺序为依次查询

9.用户目录

     如果期望让每个用户都可以创建个人站点,基于http://Sevrer_IP/~Username/

        userdir disablied:禁止

        userdir public_html: 是指用户家目录下的目录名称,所有位于此目录中的文件均可以通过前述的访问路径进行访问

          用户的家目录得赋予运行http进程的用户拥有执行权限,可以通过setfacl -m来进行设置

10.配置日志功能

       access.log 访问日志,其需要记录的内容需要自定义

       error.log 错误日志,

    访问日志:

        CustomLog "/path/to/log_file" LogFormat

     LofFormat定义的日志格式,只解释最常用的一种

        "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

         %h: 客户端地址

         %l:远程的登陆名,通常为-

         %u: 认证时的远程用户名,通常为-

         %t: 接收到的请求时的时间,为标准英文格式时间+时区

         \":表示转义,显示"

         %r:请求报文的起始行

         %>s: 响应状态码

         %b:以字节响应报文的长度,不包含头报文

         %{Referer}i:记录指定请求报文首部的内容

         %{User-Agent}i:用户使用的工具      

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

11.路径别名

      Alias /alias/ "/path/to/somewhere"

      意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere中

12.指定默认的字符集

       AddDefaultCharset

13.脚本路径别名(CGI接口)

      CGI:Common Gateway Interface(通用网关接口)使web可以跟一个应用程序进行通信,从通信环境中获得结果,前提必须加载mod_alias和mod_cgi模块

     一般在第一行写入 echo “Content-Type:text/html”

     ScriptAlias /URL/ "/path/to/somewhere" somewhere下的文件可以被执行

     格式一般为

       cat << EOF

          Content-Type:text/html

          <pre>

            The Time is : `date`

          </pre>

        EOF

14.基于用户的访问控制

     虚拟用户:不是系统上的用户,只是为了获取某种特定的资源烈性的一种虚拟用户

     可以基于文件、SQL数据库、DBM、ldap认证

     认证类型(auth)

       basic:基本认证,账号和密码以明文发送

       digest:摘要认证,hash编号以后再发送

     认证提供者(authentiation provide):账号和密码的存放位置

     授权机制(authorization):根据什么进行授权

案例:基于文件,做基本认证根据用户和组进行授权

   1、编辑配置文件,为需要认证的目录配置认证机制

   <Directory "/www/htdocs/fin">

       options None

       AllowOverride AuthConfig 使用认证配置

       AuthType Basic 使用基本认证

       AuthName "Private Area" 质询时标题

       AuthUserFile /etc/http/conf/.htpasswd  密码的存放位置

       Require vaild-user 可访问的用户

    </Directory>

   2、使用htpsswdm命令使用生成认证库

     htpasswd

     -c 创建密码,创建第一个用户时使用

     htpasswd -c -m /etc/http/conf/.htpasswd tom

     -m MD5格式存放

     -b 批量模式

     -D 删除用户

   3、基于组认证

   <Directory "/www/htdocs/fin">

       options None

       AllowOverride AuthConfig 使用认证配置

       AuthType Basic 使用基本认证

       AuthName "Private Area" 质询时标题

       AuthgroupFile /etc/http/conf/.htpasswd  密码的存放位置

       Require group GroupName  可访问的用户

   </Directory>

      先创建用户,在创建组

      组文件:

        组名:用户1 用户2 用户3

15.虚拟主机

      一个物理服务器提供多个站点;使用虚拟要先取消中心主机

      基于不同的IP实现不同的虚拟主机:变化IP

      基于不同的port实现不同的虚拟主机:变化port

      基于不同的主机名实现不同的虚拟主机:变化ServerName的值

      通过请求报文中的HOST来实现不同的虚拟主机的访问

       <VirtualHost IP:port>

        SeverName

        DocumentRoot ""

         <Directory "">

         </Directory>

        ServerAlias

        ServerAdmin

       </VirtualHost>

      虚拟主机可以单独配置用户认证、访问日志、错误日志、别名、脚本别名等

16.https协议,监听在tcp的443端口

       X509.3证书格式

          证书格式的版本号

          证书序列号

          证书签名算法

          证书颁发者

          有效期

          持有者的名称

          持有者的公钥

          CA的ID

          持有者的ID

          其他扩展信息

             基本约束

             证书策略

             密钥的使用限制

          CA签名

    ssl握手要完成的工作

        交换协议版本号

        选择一个双方都支持的加密方式

        对两端实现身份验证

        密钥交换

     SSL会话基于IP地址进行:不支持在基于主机名的虚拟主机上实现

     客户端验证服务器端证书时:

         日期检查:证书是否在有效期内

         证书颁发者的可信度

         证书的签名检测:

         持有者的身份检测:

    httpd:基于mod_ssl模块实现对于ssl的支持

     步骤:

       1)、准备好服务器的私钥和证书

       2)、安装mod_ssl模块

            yum -y install mod_ssl

       3)、配置/etc/httpd/conf.d/ssl.conf

            配置基于ssl的虚机主机

               ServerName

               DocunmentRoot

            配置证书和私钥

               SSLCertificatFile 证书文件

               SSLCertificatKeyFile 密钥文件

        4)、重启httpd服务

        5)、测试        

          openssl s_client

          -connet:验证的地址:端口

          -CAfile:CA证书的路径

17.服务器status页面,

      内生的status信息,且此信息可以通过web予以显示出来

      基于目录的访问属性

         <Directory [~] "">

         </Directory>

      基于URL访问属性

         <Location [~] "">

         </Location>

      基于单个文件的访问属性

         <File [~] "">

         </File>

       也可以使用<LocationMatch "" > </LocationMatch>来实现正则表达式的配置

       如果要配置其属性的URL能映射到牟文建系统路径,建议使用Directory

       处理器:当问及被调用时,Apache内部表现形式,一般每种文件类型都有其隐式处理器,否则需要自己定义

       显示的定义使用的处理器:SetHandler

         <Location /URL>

               SetHandler server-status

         </Location>

         其也可以定义访问控制,包括基于IP的认证和基于用户的认证

   实例:

       <Location /server-status>

          SetHandler sever-status

          AuthType Basic

          AuthName "Sever Status"

          AuthUserFile "/etc/http/conf/.htpasswd"

          Require valid-user

          Order deny,allow

          Allow from all

       </Location>

18、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

   SetOutputFilter DEFLATE

   <IfModule mod_deflate.c>

   # Restrict compression to these MIME types

     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)默认为6

       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 \bMSI[E] !no-gzip !gzip-only-text/html

   </IfModule>

18、资源限定

     软限制:可以超出的限制,但仅能超出一定时长

     硬限制:绝对不能超出的限制

     ulinit:只能修改软连接

        -n [N]:显示或修改能打开的最大的文件句柄数

        -u [N]:显示或修改能打开的最大进程数

     如果要修改硬限制

       /etc/security/limits.conf或者配置tc/security/limits.d/*.conf

     格式为

        对谁进行限制   类型 要限制的选项  值

测试工具

  curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

  curl的常用选项:


   -A/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么

   -basic 使用HTTP基本验证

   --tcp-nodelay 使用TCP_NODELAY选项

   -e/--referer <URL> 来源网址,跳转过来的网址

   --cacert <file> 指定CA证书 (SSL)

   --compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地

   -H/--header <line>自定义头信息传递给服务器

   -I/--head 只显示响应报文首部信息

   --limit-rate <rate> 设置传输速度

   -u/--user <user[:password]>设置服务器的用户和密码

   -0/--http1.0 使用HTTP 1.0

测试工具

ab工具的初步使用

   -c 模拟的并发数

   -n 模拟的总请求数

  一般并发数应该小于等于请求数

  http_load webbench seige(只做参考)

http的扩展功能

  apachectl

     Apache HTTP服务控制工具

  ab

     Apache HTTP服务器性能测试工具

  apxs

     Apache 扩展工具

  configure

      配置源代码

  dbmmanage

      为基本认证创建和更新DBM格式的用户认证文件

  htcacheclean

      清理磁盘缓存

  htdigest

      为摘要认证创建和更新用户认证文件。

  htdbm

     操作 DBM 密码数据库。

  htpasswd

     为基本认证创建和更新用户认证文件。

  httxt2dbm

     为 RewriteMap 创建 dbm 文件。

  logresolve

      将 Apache 日志文件中的 IP 地址解析到主机名称。

  rotatelogs

      不关闭 Apache 而切换日志文件。

  suexec

       执行外部程序前切换用户。



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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
人工智能 Cloud Native 搜索推荐
贝叶斯 AB 测试
贝叶斯 AB 测试
85 0
|
6月前
|
SQL 安全 测试技术
『渗透测试基础』| 什么是渗透测试?有哪些常用方法?如何开展?测试工具有哪些?优势在哪里?
『渗透测试基础』| 什么是渗透测试?有哪些常用方法?如何开展?测试工具有哪些?优势在哪里?
351 0
|
5月前
|
SQL 搜索推荐 Android开发
AB测试实战(一)
AB测试是一种数据驱动的产品优化方法,用于比较不同版本的网页、应用界面或营销策略的效果。
|
2天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
17 7
|
5月前
|
JavaScript 前端开发 安全
在众多的测试工具中,Cypress以其强大的端到端测试能力和与TypeScript的完美结合,成为了前端开发者的首选
【6月更文挑战第11天】Cypress结合TypeScript,打造前端测试新体验。TypeScript增强代码可读性和稳定性,Cypress提供强大端到端测试,二者结合提升测试准确性和可靠性。通过类型定义、自定义命令和断言,优化测试代码;Cypress模拟真实用户操作、时间旅行功能及内置调试工具,确保应用功能性能。推荐前端开发者使用TypeScript+Cypress进行端到端测试。
69 2
|
6月前
|
安全 Java 测试技术
【软件测试】测试工具推荐
【软件测试】测试工具推荐
|
3月前
|
测试技术 API
软件测试:Postman 工具的使用。开发及测试均需要掌握的测试工具
这篇文章详细介绍了Postman工具的各个模块功能,包括创建请求、集合、环境、自动化测试等,并解释了如何使用Postman进行GET、POST、PUT和DELETE等常见HTTP请求的测试。
|
3月前
|
JSON jenkins 测试技术
Python接口自动化测试框架(工具篇)-- 接口测试工具HTTPRUNNER
本文介绍了Python接口自动化测试框架HTTPRunner,包括其安装、使用方法,并通过实际操作演示了如何利用HTTPRunner进行接口测试,同时还探讨了HTTPRunner作为接口自动化测试解决方案的可能性和实用性。
61 0
|
5月前
|
测试技术 Python
AB测试实战(二)
AB测试是一种数据驱动的产品优化方法,用于比较不同版本的网页、应用界面或营销策略的效果。
|
4月前
|
JavaScript 测试技术
vue 官方测试工具 unit-jest 实用教程(含实战范例:登录组件的测试)
vue 官方测试工具 unit-jest 实用教程(含实战范例:登录组件的测试)
83 0