Loading... <p><span style="font-size: 24px"><strong>一、何为http</strong></span></p> <p style="text-indent: 2em">什么是http?http是Hyper Text Mark Language的缩写,超文本标记语言。Apache下的httpd是实现了这一功能的开源软件。</p> <p><strong><span style="font-size: 24px">二、http特性</span><br /></strong></p> <p><strong>http特性1:持久连接及MPM参数设置</strong></p> <pre class="brush:bash;toolbar:false">KeepAlive {On|Off} #是否启动持久连接 MaxKeepAliveRequests 100 #最大持久连接数量 KeepAliveTimeout 15 #持久连接超时时长 http特性2:MPM参数控制 <IfModule prefork.c> #prefork工作模式下的mpm设定 StartServers 8 #开始启动的进程数(主进程除外) MinSpareServers 5 #最下空闲进程数 MaxSpareServers 20 #最大空闲进程数 ServerLimit 256 #进程数限制 MaxClients 256 #客户端最大进程数限制 MaxRequestsPerChild 4000 #单个进程最大请求数限制 </IfModule> <IfModule worker.c> #worker工作模式下的mpm设定 StartServers 4 #开始启动的进程数(包括主进程) MaxClients 300 #最大客户端连接数 MinSpareThreads 25 #最小空闲线程数 MaxSpareThreads 75 #最大空闲线程数 ThreadsPerChild 25 #进程启动时生成线程数 MaxRequestsPerChild 0 #每个进程最大建立的线程数,0表示无限制 </IfModule></pre> <pre class="brush:bash;toolbar:false">[root@vm ~]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 2465 root 4u IPv6 15075 0t0 TCP *:http (LISTEN) #主进程 httpd 2467 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) #以下为prefork模型中的8个子进程 httpd 2468 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2469 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2470 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2471 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2472 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2473 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) httpd 2474 apache 4u IPv6 15075 0t0 TCP *:http (LISTEN) [root@vm ~]# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd.wor 2513 root 4u IPv6 15903 0t0 TCP *:http (LISTEN) #以下为worker模型中启动的初始进程数 httpd.wor 2514 apache 4u IPv6 15903 0t0 TCP *:http (LISTEN) httpd.wor 2516 apache 4u IPv6 15903 0t0 TCP *:http (LISTEN) httpd.wor 2517 apache 4u IPv6 15903 0t0 TCP *:http (LISTEN)</pre> <p></p> <p><strong>http特性3:访问控制</strong></p> </p> <p style="text-indent: 2em">基于本地文件系统路径</p> <pre class="brush:bash;toolbar:false"><Directory "/path/to/somewhere"> </Directory> 基于url访问路径 <Location "/path/to/URL"> </Location></pre> <p style="text-indent: 2em"> 基于用户访问控制</p> </p> <p style="text-indent: 2em"> (1) 基于用户进行认证 </p> <pre class="brush:bash;toolbar:false"><Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic #认证类型 AuthName "Admin Area." #在表单中提示的字符 #AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd #认证文件存放处 Require valid-user #允许访问的用户 </Directory> Require valid-user: 文件中所有用户均可访问 Require user USERNAME, ...</pre> <p style="text-indent: 2em"> (2) 提供认证文件</p> <pre class="brush:bash;toolbar:false">htpasswd -c: 如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用; -m:以md5的格式编码存储用户的密码信息 -D:删除指定用户 (3) 组认证 <Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic AuthName "Admin Area." #AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /etc/httpd/conf/.htgroup #认证组的文件存放处 Require group GROUP_NAME </Directory> 其中.htgroup文件的格式如下 组名:user1 user2 user3</pre> <p><strong>http特性4:Directory中可用访问控制</strong></p> </p> <p style="text-indent: 2em">(1) Options (如何值取反,可使用-号)</p> <p style="text-indent: 2em"> Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;</p> <p style="text-indent: 2em"> FollowSymlinks: 跳跃符号链接</p> <p style="text-indent: 2em"> (2) AllowOverride</p> <p style="text-indent: 2em"> 支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。</p> <p style="text-indent: 2em">http特性5:基于IP做访问控制</p> <p style="text-indent: 2em"> <strong>(httpd-2.2以下版本)</strong></p> <pre class="brush:bash;toolbar:false">Order allow,deny #除了allow IP or NET之外都是deny Deny from 172.16.100.17 Allow from 172.16.0.0/16 from后面能接受的地址格式: IP, Network Address 网络地址格式较为灵活: 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.0.0</pre> <p style="text-indent: 2em"> <strong>(httpd-2.4以上版本)</strong></p> <pre class="brush:bash;toolbar:false">Require ip IPADDR Require not ip IPADDR IPADDR: 单个ip Network/Netmask: Network/Length: 172.16.0.0/16 Net: 172.16 Require host HOSTNAME Require not host HOSTNAME HOSTNAME: FQDN:具体的主机 DOMAIN: 域内的所有主机</pre> <p><strong>http特性5:定义默认的主页面</strong></p> </p> <pre class="brush:bash;toolbar:false">DirectoryIndex</pre> <p style="text-indent: 0em"><strong>Http特性6:配置日志功能</strong></p> </p> <pre class="brush:bash;toolbar:false">ErrorLog "/path/to/error_log" LogLevel {debug|info|notice|warn|error|crit|alert|emerg} LogFormat CustomLog "/path/to/access_log" LogFormat_Name %h: 客户端地址 %l: 远程登录名,通常为- %u: 认证时输入用户名,没有认证时为- %t: 服务器收到 用户请求时的时间 %r:请求报名的起始行 %>s: 响应状态码 %b: 响应报文的长度,单位是字节</pre> <p><strong>http特性7:路径别名</strong></p> </p> <pre class="brush:bash;toolbar:false">Alias /url/ “/path/to/somewhere/” (url中是否有/号与后面的值结尾处一直)</pre> <p><strong>http特性8:DSO机制装载模块</strong></p> </p> <pre class="brush:bash;toolbar:false">LoadModule Module_Name /path/to/Module_File (可使用相对路径和绝对路径)</pre> <p><strong>http特性9:指定站点根目录</strong></p> </p> <pre class="brush:bash;toolbar:false">DocumentRoot "/path/to/somewhere"</pre> <p><strong>http特性10:设定默认字符集</strong></p> <pre class="brush:bash;toolbar:false">AddDefaultCharset</pre> <p><strong>http特性11:虚拟主机</strong></p> </p> <p style="text-indent: 2em">注意:使用虚拟主机时需要取消主服务器的DocumentRoot设定</p> <p style="text-indent: 2em"> 定义虚拟主机</p> <pre class="brush:bash;toolbar:false">NameVirtualHost IP:PORT <VirtualHost IP:PORT> </VirtualHost></pre> <p style="text-indent: 0em"><strong>http特性12:https协议</strong></p> <p style="text-indent: 2em"> https协议是加密的连接,具体使用要结合证书,可参考http的帮助文档</p> <p style="text-indent: 0em"><strong>http特性13: status页面</strong></p> <p style="text-indent: 2em">httpd内嵌有handler,其中有一个handler用于输出当前httpd服务相关状态信息</p> <p style="text-indent: 2em"> handler: server-status</p> </p> <p style="text-indent: 2em"> 启用handler要使用SetHandler指令</p> <p style="text-indent: 2em"> handler: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器</p> <p><strong>http特性14:mod_deflate模块压缩</strong></p> </p> <pre class="brush:bash;toolbar:false">SetOutputFilter DEFLATE # mod_deflate configuration # 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) 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</pre> <p><span style="font-size: 24px"><strong>三、基本工具介绍</strong></span></p> </p> <p style="text-indent: 2em">httpd: </p> <p style="text-indent: 2em"> apache服务器程序</p> <p style="text-indent: 2em"> -t: 测试配置文件</p> <p style="text-indent: 2em"> -l: 列表静态模块</p> <p style="text-indent: 2em"> -D DUMP_MODULES:列出DSO模块</p> <p style="text-indent: 2em"> -M:</p> <p style="text-indent: 2em"> -D DUMP_VHOSTS: 列出所有虚拟主机</p> <p style="text-indent: 2em"> htpasswd:</p> <p style="text-indent: 2em"> 为基于文件的basic认证创建和更新用户认证文件</p> <p style="text-indent: 2em"> apachectl: </p> <p style="text-indent: 2em"> 脚本,httpd服务控制工具;</p> <p style="text-indent: 2em"> ab: apache benchmark</p> <p style="text-indent: 2em"> httpd的基准性能测试工具; </p> <p style="text-indent: 2em"> apxs: </p> <p style="text-indent: 2em"> httpd得以扩展使用第三方模块的工具;</p> <p style="text-indent: 2em"> htcacheclean: </p> <p style="text-indent: 2em"> 磁盘缓存清理工具;</p> <p style="text-indent: 2em"> htdigest: </p> <p style="text-indent: 2em"> 为digest认证创建和更新用户认证文件</p> <p style="text-indent: 2em"> httxt2dbm:</p> <p style="text-indent: 2em"> 为rewrite map创建dbm格式的文件</p> <p style="text-indent: 2em"> rotatelogs: </p> <p style="text-indent: 2em"> 不关闭httpd而切换其使用日志文件的工具</p> <p style="text-indent: 2em"> access_log, access_log.1, access_log.2,</p> <p style="text-indent: 2em"> suexec:</p> <p style="text-indent: 2em"> User apache</p> <p style="text-indent: 2em"> Group apache</p> <p style="text-indent: 2em"> 当httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexec作临时切换;</p> <p style="text-indent: 2em">ab工具的初步使用</p> <p style="text-indent: 2em"> 使用ab工具时,请注意系统对于资源利用是有限定的,管理员可以使用ulimit命令临时修改各种资源限制,当然不能超过系统的负载。其配置文件在/etc/security/limits.conf</p> <p style="text-indent: 2em"> /etc/security/limits.d/*.conf中</p> <p style="text-indent: 2em"> 同类工具:http_load, webbench, seige</p> <p style="text-indent: 2em"> Usage: ab [options] [http[s]://]hostname[:port]/path</p> <p style="text-indent: 2em"> -c #: 模拟的并发数;</p> <p style="text-indent: 2em"> -n #: 总的请求数</p> <p style="text-indent: 2em"> -n的值一定要大于等于-c的值;</p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信