Apache的管理

 简单介绍 

 Apache的三种工作模式

 1、Prefork MPM

多进程 

 Prefork MPM:实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题
缺点:但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景

2、Worker MPM

多进程+多线程   

Worker MPMprefork模式相比:worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。
优点:线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些
缺点:如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)

 3、Event MPM

多进程+多线程+epoll

这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理

     总的来说   :不同模式效率不同,主要用于调优;命令“ httpd -v | grep "Server MPM" ”查看当前使模式

后缀不同(开发语言不同)

静态页面一般以  .html/.htm/.xml
开发在写完页面之后,所写的页面需要部署到服务器上的,在部署页面之前需要在服务器上安装能够解析静态页面的服务(nginx httpd这两类web服务默认只能解析静态页面)

静态页面的内容是固定的,动态页面的内容会因用户、浏览器、时间、地点等而发生变化


动态页面一般以 .php/.asp/jsp/.pl/.py/.cgi 等为后缀
动态页面也需要在服务器上部署能够解析动态页面的服务(nginx httpd),还要安装能够解析php页面php服务

Urluri它俩之间很相似
Urluri能够更精确的定位到资源,资源位置是绝对路径, uri的资源位置可以是相对路径  url=https://www.aaa.com(域名)/ 

主要目录和文件
服务目录/usr/local/httpd/
主配置文件/usr/local/httpd/conf/httpd.conf
网页目录/usr/local/httpd/htdocs/
服务脚本/usr/local/httpd/bin/apachectl
执行程序/usr/local/httpd/bin/httpd
访问日志/usr/local/httpd/log/access_log
错误日志/usr/local/httpd/log/error_log
http状态返回状态码
状态码首位范围分类
1xx100-101信息提示
2xx200-226成功
3xx300-308重定向
4xx400-499客户端错误
5xx500-599服务器错误
常见的状态返回码 
101切换协议
200成功
202以接受请求,但处理未完成
301请求的页面永久跳转
302临时跳转
403禁止访问该页面
404找不到页面
500服务器内部错误
502网关错误
503当前服务不可用
504网关请求超时

511

需要网络授权
520未知错误

一、Apache的安装

 cat /usr/local/httpd/build/config.nice   查看模块配置

 Apache:   /usr/local/httpd/conf/httpd.conf  这个配置文件是httpd的主配置文件

1.上传   httpd-2.2.17   软件包

[root@C7--01 ~]# rz -E
rz waiting to receive.

2.解压

[root@C7--01 ~]# tar xf httpd-2.2.17.tar.gz -C /usr/src/
[root@C7--01 ~]# cd /usr/src/httpd-2.2.17/              #进入目录
[root@C7--01 httpd-2.2.17]#

3.开启相应的模块

安装方式一: 

[root@C7--01 httpd-2.2.17]# ./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enable-deflate --enable-expires           

--enable-deflate:启用压缩模块;先压缩网页,在发送给客户端传输速度快

--enable-expires:缓存;有本地缓存使用缓存,没有缓存在从服务器拿数据

在配置模块时发现报错:checking for zlib location... not found  检查不到zlib软件

 那我们就安装zlib

[root@C7--01 httpd-2.2.17]# yum -y install zlib
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
软件包 zlib-1.2.7-17.el7.x86_64 已安装并且是最新版本
无须任何处理

但是发现我们已经安装了zlib软件那我们在apr后面加-devel在安装一次

[root@C7--01 httpd-2.2.17]# yum -y install zlib-devel
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 zlib-devel.x86_64.0.1.2.7-17.el7 将被 安装
--> 解决依赖关系完成
............
......
..
完毕!



    -----如果不是以上报错那么可能是以下的依赖包没有安装

yum -y install pcre-devel apr-devel libdb-devel cyrus-sasl-devel openldap-devel expat-devel apr-util-devel gcc

发现报错提示:checking for  ***....no     就使用yum安装 ***-devel(***软件名称)

[root@C7--01 httpd-2.2.17]# ./configure --prefix=/usr/local/httpd --enable-cgi -enable-rewrite --enable-so --enable-deflate --enable-expires
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu

Configuring Apache Portable Runtime library ...

checking for APR... reconfig
configuring package in srclib/apr now
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
Configuring APR library
...............
.............
....
..
.

config.status: creating support/split-logfile
config.status: creating build/rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands

[root@C7--01 httpd-2.2.17]# echo $?      #配置完成
0

4.编译安装

[root@C7--01 httpd-2.2.17]# make && make install     
..............
.........

..
.
[root@C7--01 httpd-2.2.17]# echo $? 
0

5.软连接

[root@C7--01 ~]# ln -s /usr/loca/httpd/bin/* /usr/local/bin    
[root@C7--01 ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd    

6.httpd的配置文件中的选项信息

6.1、 不做配置

[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf
.....
...
29 ServerRoot "/usr/local/httpd"                #设置httpd 服务器的根目录  (默认httpd 安装的位置就是该根目录的位置)
.....
..
40 Listen 80                                   #服务监听的端口 (默认监听TCP 的80 端口)如有多块网卡,默认监听所有网卡
...
 65 User daemon                                #启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全
 66 Group daemon                               #启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全
....
88 ServerAdmin you@example.com                 #管理员的邮箱
....
...
...
97 ServerName www.example.com:80               #Web 站点完整的主机名 (主机名 + 域名)
.....
...
....
104 DocumentRoot "/usr/local/httpd/htdocs"     #默认的网站根目录,也就是网页文档实际所存放的位置
...
...
.
....
...
114 <Directory />                       #区域配置项(使用一对组合标记,限定了配置项的作用范围,区域配置项只对区域内有效)
....
......
...
119 </Directory>                    #结束
..
...
131 <Directory "/usr/local/httpd/htdocs">     #对/usr/local/httpd/htdocs目录的一个权限的设置,options中Indexes表示当网页不存在的时候允许索引显示目录中的文件,FollowSymLinks是否允许访问符号链接文件。有的选项有ExecCGI表是否使用CGI,如Options Includes ExecCGI FollowSymLinks表示允许服务器执行CGI及SSI,禁止列出目录。SymLinksOwnerMatch表示当符号链接的文件和目标文件为同一用户拥有时才允许访问。AllowOverrideNone表示不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件,修改为:AllowOverride All 表示允许.htaccess。Order对页面的访问控制顺序后面的一项是默认选项,如allow,deny则默认是deny,Allowfromall表示允许所有的用户,通过和上一项结合可以控制对网站的访问控制
...........
......
...
136 </Directory>

...
..
..
...
....
...

....

 6.2、修改配置文件

[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf +97        
......
...
..
 96 #
 97 ServerName www.example.com:80            #删除文本前面的#号
 98 
....
..
.

7.赋予权限

[root@C7--01 ~]# chmod a+x /etc/init.d/httpd    
[root@C7--01 ~]#  /etc/init.d/httpd start        #启动Apache服务器
[root@C7--01 ~]# netstat -anptu| grep 80         #查看
tcp6       0      0 :::80                   :::*                    LISTEN      26098/httpd    

8.验证

 9.解决命令找不到的问题

 临时修改变量

export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/etc/init.d:/sbin:/usr/local/httpd/bin             

只能暂时解决问题

 如果想永久生效可以修改profile文件

[root@C7--07 ~]# vim /etc/profile
.......
....
.
 53 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL  #在这个下面添加内容
 54 export PATH=/usr/local/httpd/bin:$PATH                       #添加httpd路径
 55 export PATH=/etc/init.d:$PATH                                #添加
....
..

保存   重启服务器  永久生效

 10、查看模块

[root@C7--01 httpd-2.2.17]# /usr/local/httpd/bin/apachectl -D DUMP_MODULES       
Loaded Modules:
 core_module (static)
 authn_file_module (static)
 authn_default_module (static)
 authz_host_module (static)
 authz_groupfile_module (static)
 authz_user_module (static)
 authz_default_module (static)
 auth_basic_module (static)
 include_module (static)
 filter_module (static)
 log_config_module (static)
 env_module (static)

 11、修改apache模式

 查看当前模式

[root@C7--01 ~]# /usr/local/httpd/bin/httpd -V |grep 'Server MPM'         
Server MPM:     Prefork

修改模式配置

 当从prefork切换到worker时,要重新编译安装

[root@C7--01 ~]#/etc/init.d/httpd stop           
[root@C7--01 ~]# cd /usr/src/httpd-2.2.17         
[root@C7--01 httpd-2.2.17]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-cgi --with-mpm=worker            
..........
.....
..
[root@C7--01 httpd-2.2.17]# make clean       
....
..
[root@C7--01 httpd-2.2.17]# make && make install         
.......
...
[root@C7--01 httpd-2.2.17]# /etc/init.d/httpd start          
[root@C7--01 httpd-2.2.17]# /usr/local/httpd/bin/httpd -V |grep 'Server MPM'       
Server MPM:     Worker

更改模式成功

 二、apache优化之保持连接、网页传输压缩、页面缓存时间

 (一)、保持连接、长链接(keep-alive)

作用: HTTP协议是TCP的子协议, HTTP建立连接时需要先建立TCP连接,断开时也需要断开口TCP连接, TCP的建立和断开消耗的资源通过HITTP连接保持可以节约下来。对于HTTP/1.1,尽量地保持客户端的TCP连接,通过一个TCP连接传送多个HTTP请求响应,对于客户端可以提高50%以上的响应时间,对于服务器可以降低建立与关闭TCP连接时的资源消耗

keep-alive是否打开保持连接功能。根据网站的并发请·求量决定是否打开,高并发时打开,并发量不高时可选择关闭
keep-alive timeout一次TCP连接多次HTTP请求之间的最大间隔时间,两次HTTP请求超过此时间连接将会断开
maxkeep-alive requestes一次TCP连接能够传输的最大HTTP请求数量

进入主配置文件

[root@C7--01 ~]# /etc/init.d/httpd -M   #查看模块
[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf +397

...........
....
...
..
395 
396 # Various default settings
397 Include conf/extra/httpd-default.conf     #删除前面的#号
398 


     ---------或者使用sed修改文件

[root@C7--01 ~]#  sed -i '397s/^#//g' /usr/local/httpd/conf/httpd.conf
[root@C7--01 ~]# sed -n 397p /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf

Include  :表示包含

[root@C7--01 httpd-2.4.25]# /etc/init.d/httpd restart   #重启httpd服务

 先访问192.168.2.1

在用fiddler抓包软件进行抓包

我使用的是在win10 系统中安装的抓包软件 fiddler 

(二)、apache网页压缩

作用:配置Apache的网页压缩功能,是使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。通常在cpu有空闲,网站带宽占用高时,会启用

压缩的优势
1.加快网页加载的速度,改善用户的浏览体验
2.降低网络传输带宽, 服务器节省流量
3.网页压缩有利于搜索引擎的抓取

Apache能实现网页压缩功能的模块有mod_gzip模块和mod_deflate模块

mod_gzipmod_deflate
Gzip算法,运作原理类似Gzip算法,运作原理类似
压缩速度略慢压缩速度略快 
压缩比略高压缩比略低 
CPU占用率略高CPU占用率略低 
低流量服务器高浏览量服务器 
配置项
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript对什么格式的内容启用压缩
DeflateCompressionLevel 9压缩级别为9,范围是1-9,数字大压缩率高
SetOutputFilter DEFLATE启用deflate压缩方式
#    把命令追加到   /usr/local/httpd/conf/httpd.conf  文件的最后



echo 'AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
SetOutputFilter DEFLATE' >> /usr/local/httpd/conf/httpd.conf

 
 

   #  重启Apache 服务器

[root@C7--01 ~]# /etc/init.d/httpd restart

 重启完成后使用wind10 机器先打开fiddler软件进行访问192.168.2.1 网页 

我们发现在Client中:Accept-Encoding:  有gzip,deflate 

当我们启动时这两个同时启动但是只有deflate生效

(三)、页面缓存

作用:通过mod_expires模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求,减轻服务端工作压力(启用mod_expires模块后,会自动生成页面头部信息中的  Expires  标签和  CacheControl  标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的)

注意:编译安装时必须使用以下配置项

--enable-expires   #启用网页缓存过期时间模块

追加到配置文件/usr/local/httpd/conf/httpd.conf   的最后

echo ‘<IfModule mod_expires.c>
   ExpiresActive On
   ExpiresDefault "access plus 10 seconds"
</IfModule>’  >> /usr/local/httpd/conf/httpd.conf

 
   ExpiresActive On                             #启用网页缓存
   ExpiresDefault "access plus 10 seconds"      #缓存默认时间是10s



[root@C7--01 ~]# /etc/init.d/httpd restart    #重启服务

访问网页后进行抓包

解说

 Cache

Cache-Control: max-age =10              #最大缓存时间为10s
Date: Wed, 10 Nov 2021 20:50:11 GмT     #缓存起始时间
Expires: Wed, 10 Nov 2021 20:50:21 GMT  #过期时间

二、apache优化隐藏版本号

  

方式一:

ServerTokens Prod      #显示最少的信息,默认是Full显示完整信息
ServerSignature Off    #生成页面的页脚

[root@C7--01 ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf  +55   
 54 #
 55 ServerTokens prod             #修改Full为prod
 56 
.....
..
 64 #
 65 ServerSignature Off           #修改为Off
 66 


保存退出

[root@C7--01 ~]# /etc/init.d/httpd restart   #重启

先访问在抓包 

 验证:

 方法二:

进入Apache的源码目录下的include目录, 编辑ap_release.h这个文件如下变量,然后重新编译安装即可:  

[root@C7--01 ~]# /etc/init.d/httpd stop         #先停止apache服务
[root@C7--01 ~]# cd /usr/src/httpd-2.2.17/   
[root@C7--01 httpd-2.2.17]# cd include/    
[root@C7--01 include]# ls
ap_compat.h            ap_listen.h    ap_release.h       http_main.h      util_cfgtree.h  util_script.h
ap_config_auto.h       ap_mmn.h       http_config.h      http_protocol.h  util_charset.h  util_time.h
ap_config_auto.h.in    ap_mpm.h       http_connection.h  http_request.h   util_ebcdic.h   util_xml.h
ap_config.h            ap_provider.h  http_core.h        http_vhost.h     util_filter.h
ap_config_layout.h     ap_regex.h     httpd.h            mpm_common.h     util_ldap.h
ap_config_layout.h.in  ap_regkey.h    http_log.h         scoreboard.h     util_md5.h


[root@C7--01 include]# vim ap_release.h +50  
.........
.....
 42 #define AP_SERVER_BASEVENDOR "aaa"
 43 #define AP_SERVER_BASEPROJECT "bbb"
 44 #define AP_SERVER_BASEPRODUCT "ccc"
 45 
 46 #define AP_SERVER_MAJORVERSION_NUMBER 1
 47 #define AP_SERVER_MINORVERSION_NUMBER 2
 48 #define AP_SERVER_PATCHLEVEL_NUMBER   0
 49 #define AP_SERVER_DEVBUILD_BOOLEAN    0
 50 
....
..

保存退出
清除缓存   cd .. 返回上一个目录

[root@C7--01 httpd-2.2.17]# make clean
....
.

[root@C7--01 httpd-2.2.17]# ./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enable-deflate --enable-expires && make && make install                 
 

验证: 

三、优化防盗链

作用:防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。运维人员可以通过apache提供rewrite模块进行优化

rewrite配置项
RewriteEngine ON 打开网页重写功能
RewriteCond设置匹配规则
RewriteRule设置跳转动作
机器ip域名
C7--1(真公司)192.168.2.1www.xm.com
C7--2(假公司)192.168.2.2www.jd.com
win  7192.168.2.30

1、先设置C7--1(真)C7--2(假)的dns文件  /etc/hosts  

[root@C7--01 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


192.168.2.1 www.xm.com
192.168.2.2 www.jd.com

win  7机器:内容相同

 C7--1(真)和 C7--2(假)机器需安装apache服务  略......

上传一个图片

[root@C7--01 ~]# cd /usr/local/httpd/htdocs
[root@C7--01 htdocs]# ls
1.jpg  index.html

 在  C7--1(真)上配置  :C7--2(假)相同

[root@C7--01 htdocs]# vim index.html   

<html>
  <body>
     <h1>C7--1</h1>
     <img src="1.jpg" />
  </body>
</html>


保存

2、在C7--2(假)机器上 进行防盗链

[root@C7--02 htdocs]# rm -rf 1.jpg    #删除图片

[root@C7--02 htdocs]# vim index.html   #修改文件
<html>
   <body>
     <h1>C7--2</h1>
     <img src="http://www.xm.com/1.jpg" />
   </body>
</html>


保存

 结论:当访问C7--2时,其实访问的是C7--1服务器,如果在公司中不做防盗链设置可能造成服务器压力过大,而那个盗取链接的公司没有影响,放谁心里也不愿意

3、配置防盗链配置

 rewrite的规则%{HTTP_REFERER} 浏览heauer 中的链接字段,存放一个连接的URL,代表是从哪个链接访问所需的网页

!^不以某个字段开头
.*$以任意字符结尾
NC不区分大小写
R强制跳转

匹配规则:如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则后面的规则不再继续匹配 

 Referer:表示这个请求是从哪个URL过来的,假如你通过google搜索出一个商家的广告页面,你对这个广告页面感兴趣,鼠标一点发送一个请求报文到商家的网站,这个请求报文的Referer报文头属性值就是http://www.google.com

先给C7--1上传一个图片

[root@C7--01 htdocs]# ls
1.jpg  2.jpg  index.html

[root@C7--01 htdocs]# vim index.html   修改内容
   
<html>
  <body>
     <h1>C7--1</h1>
     <img src="2.jpg" />
  </body>
</html>

C7--2上修改文件

[root@C7--02 htdocs]# vim index.html 
<html>
  <body>
    <h1>C7--02</h1>
    <img src="http://www.xm.com/2.jpg" />
  </body>
</html>

修改C7--1上的配置文件

[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf
.......
....
410 AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript  删除这些
411 DeflateCompressionLevel 9
412 SetOutputFilter DEFLATE
413 
414 <IfModule mod_expires.c>
415    ExpiresActive On
416    ExpiresDefault "access plus 10 seconds"
417 </IfModule>   ---------到这来删除,这是我们之前添加的内容
418 

-------------------------

<Directory "/usr/local/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    RewriteEngine On            #启用重写功能
    RewriteCond %{HTTP_REFERER} !^http://xm.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://xm.com$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.xm.com/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.xm.com$ [NC]
    RewriteRule .*\.(gif|jpg|swf)$ http://www.xm.com/1.png [R,NC]   #强制跳转到1.png
</Directory>                                    #   我把中间的注释删除了

保存退出
[root@C7--01 htdocs]# mv 1.jpg 1.png   #因不知道什么原因必须修改图片名称才生效不信可以试试
[root@C7--01 htdocs]# ls
1.png  2.jpg  index.html

[root@C7--01 htdocs]#  /etc/init.d/httpd restart   #重启服务

四、apache的压力测试工具ab及大量TIME_WAIT的问题

 运维:购买服务器(物理机)
1、要对所购买的物理机(二手)进行烧机
2、在产品上线之前,对应用的一个压力测试
3、对产品本身的压力测试

压力测试分三部分:
1、物理机的压力测试  CPU  磁盘 I/O( 就是读写速度)
2、测试apache的并发能力                                            
3、代码测试

 作用: Apache附带了压力测试工具ab,非常容易使用,并且完全可以模拟各种条件对Web服务器发起测试请求。在进行性能调整优化过程中,可用ab压力测试工具进行优化效果的测试

 ab的相关测试

 ab的语法格式
 ab -n XXX -c YYY -k http://hostname.port/path/filename
    -n XXX:表示最多进行XXX次测试。也就是下载filename文件XXX次。
    -c YYY:客户端并发连接个数。
    -k:启用HTTP KeepAlive功能。默认不启用KeepAlive功能。
ab必须安装在客户端上,并且客户端机器配置性能要高些。

Time taken for tests :表示所有这些请求被处理完成所花费的总时间
Failed requests: 表示失败的请求数量
Requests per second : 吞吐率,计算公式: Complete requests /Time taken for tests
Transfer rate  :表示这些请求在单位时间内从服务器获取的数据长度,计算公式: Total trnasferred/Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量

比如我们要对 http://192.168.2.1/  压力测试设置50000 指定并发为 100    


[root@C7--01 ~]# ab -n 50000 -c 100 http://192.168.2.1/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.2.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Apache
Server Hostname:        192.168.2.1
Server Port:            80

Document Path:          /
Document Length:        79 bytes

Concurrency Level:      100
Time taken for tests:   3.232 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    49600
Total transferred:      17232000 bytes
HTML transferred:       3950000 bytes
Requests per second:    15472.51 [#/sec] (mean)
Time per request:       6.463 [ms] (mean)
Time per request:       0.065 [ms] (mean, across all concurrent requests)
Transfer rate:          5207.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     1    6   2.5      6      45
Waiting:        0    6   2.5      6      45
Total:          1    6   2.5      6      45

Percentage of the requests served within a certain time (ms)
  50%      6
  66%      6
  75%      6
  80%      6
  90%      7
  95%      7
  98%     10
  99%     17
 100%     45 (longest request)

 查看端口号

[root@C7--01 ~]# netstat -anptu| grep 80
tcp        0      0 192.168.2.1:44678       192.168.2.1:80          TIME_WAIT   -                   
tcp6       0      0 :::80                   :::*                    LISTEN      53551/httpd         
tcp6       0      0 192.168.2.1:80          192.168.2.1:43576       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:43942       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:43424       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:43472       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:44484       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:42736       TIME_WAIT   -                   
tcp6       0      0 192.168.2.1:80          192.168.2.1:42834       TIME_WAIT   - 

 发现有很多的TIME_WAIT

1、解决系统中出现大量TIME_WAIT的问题

[root@C7--01 ~]# vim /etc/sysctl.conf

[root@C7--01 ~]# vim /etc/sysctl.conf 
.......
...
.

net.ipv4.tcp_syncookies = 1          #表示开启SYN Cookies;当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1            #表示开启重用。允许将TIME_WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1          #表示开启TCP连接中TIME_WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 1         #修改系默认的TIMEOUT时间


保存


[root@C7--01 ~]# sysctl -p
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 1
[root@C7--01 ~]# ab -c 10 -n 1000 http://192.168.2.1/           
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.2.1 (be patient)
........
....
..


[root@C7--01 ~]# netstat -anptu |grep 80        
tcp6       0      0 :::80                   :::*                    LISTEN      53551/httpd  

 2、设置网页登录用户

[root@C7--01 ~]# htpasswd -c /usr/local/httpd/conf/htpasswd which          
New password: 
Re-type new password: 
Adding password for user which


-----解释:创建一个用户为 which  设置密码为123
-----------这里要注意如果创建下面用户时加-c 会吧 which 用户给替换掉

[root@C7--01 ~]# htpasswd /usr/local/httpd/conf/htpasswd aaa
New password: 
Re-type new password: 
Adding password for user aaa
[root@C7--01 ~]# htpasswd /usr/local/httpd/conf/htpasswd bbb
New password: 
Re-type new password: 
Adding password for user bbb


----------####################    在创建两个进行验证
[root@C7--01 ~]# vim /usr/local/httpd/conf/htgroups   #为授权用户加入组(htgroups文件名可以随便设置只要能记住就好)
mygroup:aaa bbb     #用户组名mygroup(可以写其他的 如:groups或者写自己能记住的名称)


保存
[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf  +131      
....
..

<Directory "/usr/local/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Basic                                 #添加  认证类型是基本认证
    AuthName "aaaaaaaa错误登录"                     #提示信息
    AuthBasicProvider file                         #认证基本提供程序文件
    AuthUserFile /usr/local/httpd/conf/htpasswd    #指定认证用户文件
    AuthGroupFile /usr/local/httpd/conf/htgroups   #指定认证组文件
    Require group mygroup                          #设置允许访问的用户或用户组
</Directory>

保存

[root@C7--01 ~]# /etc/init.d/httpd restart     #重启服务

用户wihch 没有权限登录网页

用户aaa bbb有权限登录网页

五、apache的日志分隔

作用:随着网站访问量的增加,访问日志中的信息会越来越多, Apache默认访问日志access_log单个文件会越来越大, 日志文件体积越大,信息都在一个文件中,查看及分析信息会及不方便

[root@C7--01 ~]# cd /usr/local/httpd/logs    #日志路径
[root@C7--01 logs]# ls
access_log  error_log  httpd.pid

  日志文件非常的重要在里面存放公网ip地址可以查询到是哪个城市的,或者是哪个城市访问的人多就在哪个城市部署服务器 ,合理使用日志文件可以降低公司的支出,也可以增加公司的收入

 在http.conf中的位置以及格式介绍

[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf
...........
.....
184     LogFormat "%h %l %u %t \"%r\" %>s %b" common
........
...
.
198    CustomLog "logs/access_log" common
....
%h %l %u %t \"%r\" %>s %b
远端主机远端登录名远程用户名时间请求第一行状态传输字节

日志分隔的2种方式

1、使用Apache 自带的日志轮循程序 rotatelogs

注意rotatelogs  的安装包在httpd下先yum安装httpd才能使用

[root@C7--01 ~]# which rotatelogs   #查看命令的绝对路径
/usr/sbin/rotatelogs

[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf
......
...
191     #
192     CustomLog "|/usr/sbin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d_%Y%M%S.log" common #修改内容
193 
194     #


保存

[root@C7--01 ~]# /etc/init.d/httpd restart    #重启apache服务
 

测试:先访问网页然后查看

[root@C7--01 logs]# ls
access_20211111_090230.log  access_log  error_log  httpd.pid

2.利用一个发展已经比较成熟的日志轮循工具 cronolog

上传软件包 cronolog-1.6.2.tar.gz

[root@C7--01 ~]# ls
anaconda-ks.cfg  cronolog-1.6.2.tar.gz  httpd-2.2.17.tar.gz  yum.sh

安装软件

[root@C7--01 ~]# tar zvxf cronolog-1.6.2.tar.gz -C /usr/src      
cronolog-1.6.2/
cronolog-1.6.2/Makefile.in
........
....
...
.
[root@C7--01 ~]# cd /usr/src/cronolog-1.6.2
[root@C7--01 cronolog-1.6.2]# ./configure && make && make install
.......
....
.

[root@C7--01 ~]# which cronolog   #PATH变量指定的路径中,搜索某个系统命令的位置
/usr/local/sbin/cronolog


       ----------进入apache的logs访问日志位置

[root@C7--01 ~]# cd /usr/local/thhpd/logs
[root@C7--01 logs]# vim /usr/local/httpd/conf/httpd.conf           
......
...
214     #
215     CustomLog "|/usr/local/sbin/cronolog /usr/local/httpd/logs/access_%Y%m%d.log" combinedio      #修改配置
216 


[root@C7--01 logs]# /etc/init.d/httpd restart      #重启服务

 先访问网页

[root@C7--01 logs]# ls
access_20211115.log  access_log  error_log  httpd.pid

 修改时间测试

[root@C7--01 logs]# date -s "20211116"
2021年 11月 16日 星期二 00:00:00 CST

 在访问网页

[root@C7--01 logs]# ls
access_20211115.log  access_20211117.log  access_log  error_log  httpd.pid

 cronolog软件默认按照天进行分隔日志

六、Apache虚拟主机

作用:在同一台服务器上运行多个Web站点,节省资源,降低网站构建及运行成本

三种类型的主机:

1、基于域名的虚拟主机    (相同IP,相同端口号,不同域名;需要DNS 服务器支持,最广泛、最普遍的虚拟主机)
2、基于IP地址的虚拟主机 (不同IP,不同域名,相同端口;应用不广泛)
3、基于端口的虚拟主机    (相同IP,相同端口,不同域名,用户访问时必须指定网站的端口号)

基于域名的虚拟主机

[root@C7--01 htdocs]# mkdir benet baidu     
[root@C7--01 htdocs]# echo "<h1>www.benet.com111111</h1>"  >benet/index.html    
[root@C7--01 htdocs]# echo "<h1>www.baidu.com222222</h1>"  >baidu/index.html    
[root@C7--01 htdocs]# ls
baidu  benet

[root@C7--01 htdocs]# cd ..  
[root@C7--01 httpd]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf     
......
...
131 <Directory "/usr/local/httpd/htdocs">
132     Options FollowSymLinks             #删除Indexes字符
133     AllowOverride None
134     Order allow,deny
135     Allow from all
136 </Directory>
......
...
364 # Virtual hosts
365 Include conf/extra/httpd-vhosts.conf     #删除前面的#号
366 


保存退出


[root@C7--01 htdocs]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf      
.......
...
NameVirtualHost 192.168.2.1:80      #修改成本地ip地址

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost 192.168.2.1:80>                #修改
    DocumentRoot "/usr/local/httpd/htdocs/benet"   #修改绝对路径
    ServerName www.benet.com                ##设置域名
</VirtualHost>

<VirtualHost 192.168.2.1:80>                #修改
    DocumentRoot "/usr/local/httpd/htdocs/baidu"    #修改绝对路径
    ServerName www.baidu.com                #设置域名
</VirtualHost>



保存退出

 验证:

七、在公司中如何统计PV和UV

1、根据访问IP统计UV

[root@C7--01 ~]# awk '{print $1}' /usr/local/httpd/logs/access_log|sort|uniq -c|wc -l
2

2、统计访问URL统计PV(URL:统一资源定位系统)

[root@C7--01 ~]# awk '{print $7}' /usr/local/httpd/logs/access_log |wc -l
447

3、查询访问最频繁的URL

[root@C7--01 ~]# awk '{print $7}' /usr/local/httpd/logs/access_log|sort |uniq -c|sort -n -k 1 -r |more
    208 /
    182 /2.jpg
     26 /1.jpg
     14 /favicon.ico
      8 /1.png
      4 /benet/
      4 /baidu/
      1 /browserconfig.xml

4、查询访问最频繁的IP

[root@C7--01 ~]# awk '{print $1}' /usr/local/httpd/logs/access_log|sort |uniq -c|sort -n -k 1 -r |head -1
    445 192.168.2.30
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值