多进程
Prefork MPM:实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题
缺点:但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景
多进程+多线程
Worker MPM和prefork模式相比:worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。
优点:线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些
缺点:如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)
多进程+多线程+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服务
Url和uri它俩之间很相似
Url比uri能够更精确的定位到资源,资源位置是绝对路径, 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状态返回状态码 | ||
状态码首位 | 范围 | 分类 |
1xx | 100-101 | 信息提示 |
2xx | 200-226 | 成功 |
3xx | 300-308 | 重定向 |
4xx | 400-499 | 客户端错误 |
5xx | 500-599 | 服务器错误 |
常见的状态返回码 | |
101 | 切换协议 |
200 | 成功 |
202 | 以接受请求,但处理未完成 |
301 | 请求的页面永久跳转 |
302 | 临时跳转 |
403 | 禁止访问该页面 |
404 | 找不到页面 |
500 | 服务器内部错误 |
502 | 网关错误 |
503 | 当前服务不可用 |
504 | 网关请求超时 |
511 |
需要网络授权 |
520 | 未知错误 |
cat /usr/local/httpd/build/config.nice 查看模块配置
Apache: /usr/local/httpd/conf/httpd.conf 这个配置文件是httpd的主配置文件
[root@C7--01 ~]# rz -E
rz waiting to receive.
[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]#
[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
[root@C7--01 httpd-2.2.17]# make && make install
..............
.........
..
.
[root@C7--01 httpd-2.2.17]# echo $?
0
[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.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 [email protected] #管理员的邮箱
....
...
...
97 ServerName www.example.com:80 #Web 站点完整的主机名 (主机名 + 域名)
.....
...
....
104 DocumentRoot "/usr/local/httpd/htdocs" #默认的网站根目录,也就是网页文档实际所存放的位置
...
...
.
....
...
114 #区域配置项(使用一对组合标记,限定了配置项的作用范围,区域配置项只对区域内有效)
....
......
...
119 #结束
..
...
131 #对/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
...
..
..
...
....
...
....
6.2、修改配置文件
[root@C7--01 ~]# vim /usr/local/httpd/conf/httpd.conf +97
......
...
..
96 #
97 ServerName www.example.com:80 #删除文本前面的#号
98
....
..
.
[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
临时修改变量
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 #添加
....
..
保存 重启服务器 永久生效
[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)
查看当前模式
[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
更改模式成功
作用: 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的网页压缩功能,是使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。通常在cpu有空闲,网站带宽占用高时,会启用
压缩的优势:
1.加快网页加载的速度,改善用户的浏览体验
2.降低网络传输带宽, 服务器节省流量
3.网页压缩有利于搜索引擎的抓取
Apache能实现网页压缩功能的模块有mod_gzip模块和mod_deflate模块
mod_gzip | mod_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 ‘
ExpiresActive On
ExpiresDefault "access plus 10 seconds"
’ >> /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 #过期时间
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.1 | www.xm.com |
C7--2(假公司) | 192.168.2.2 | www.jd.com |
win 7 | 192.168.2.30 | 无 |
[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
C7--1
保存
[root@C7--02 htdocs]# rm -rf 1.jpg #删除图片
[root@C7--02 htdocs]# vim index.html #修改文件
C7--2
保存
结论:当访问C7--2时,其实访问的是C7--1服务器,如果在公司中不做防盗链设置可能造成服务器压力过大,而那个盗取链接的公司没有影响,放谁心里也不愿意
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 修改内容
C7--1
C7--2上修改文件
[root@C7--02 htdocs]# vim index.html
C7--02
修改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
415 ExpiresActive On
416 ExpiresDefault "access plus 10 seconds"
417 ---------到这来删除,这是我们之前添加的内容
418
-------------------------
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
# 我把中间的注释删除了
保存退出
[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 #重启服务
运维:购买服务器(物理机)
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
[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
[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
....
..
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 #设置允许访问的用户或用户组
保存
[root@C7--01 ~]# /etc/init.d/httpd restart #重启服务
用户wihch 没有权限登录网页
用户aaa 和bbb有权限登录网页
作用:随着网站访问量的增加,访问日志中的信息会越来越多, 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 |
远端主机 | 远端登录名 | 远程用户名 | 时间 | 请求第一行 | 状态 | 传输字节 |
注意: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
上传软件包 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软件默认按照天进行分隔日志
作用:在同一台服务器上运行多个Web站点,节省资源,降低网站构建及运行成本
三种类型的主机:
1、基于域名的虚拟主机 (相同IP,相同端口号,不同域名;需要DNS 服务器支持,最广泛、最普遍的虚拟主机)
2、基于IP地址的虚拟主机 (不同IP,不同域名,相同端口;应用不广泛)
3、基于端口的虚拟主机 (相同IP,相同端口,不同域名,用户访问时必须指定网站的端口号)
[root@C7--01 htdocs]# mkdir benet baidu
[root@C7--01 htdocs]# echo "www.benet.com111111
" >benet/index.html
[root@C7--01 htdocs]# echo "www.baidu.com222222
" >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
132 Options FollowSymLinks #删除Indexes字符
133 AllowOverride None
134 Order allow,deny
135 Allow from all
136
......
...
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 block.
#
#修改
DocumentRoot "/usr/local/httpd/htdocs/benet" #修改绝对路径
ServerName www.benet.com ##设置域名
#修改
DocumentRoot "/usr/local/httpd/htdocs/baidu" #修改绝对路径
ServerName www.baidu.com #设置域名
保存退出
验证:
[root@C7--01 ~]# awk '{print $1}' /usr/local/httpd/logs/access_log|sort|uniq -c|wc -l
2
[root@C7--01 ~]# awk '{print $7}' /usr/local/httpd/logs/access_log |wc -l
447
[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
[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