服务目录 # /etc/httpd
主配置文件 # /etc/httpd/conf/httpd.conf
网站数据目录 # /var/www/html
访问日志 # /var/log/httpd/access_log
错误日志 # /var/log/httpd/error_log
etc/httpd/conf/httpd.conf
在httpd服务程序的主配置文件中,存在三种类型的信息:注释行信息、全局配置、区域配置。
/etc/httpd/conf/httpd.conf:
# Section 1: Global Environment
# Section 2: 'Main' server configuration
# Section 3: Virtual Hosts
配置格式:
directive value
directive # 不区分字符大小写;
value # 为路径时,是否区分字符大小写,取决于文件系统;
全局配置参数就是一种全局性的配置参数,可作用于对所有的子站点,既保证了子站点的正常访问,也有效减少了频繁写入重复参数的工作量。区域配置参数则是单独针对于每个独立的子站点进行设置的。
最常用参数 | 用途描述 |
---|---|
ServerRoot | 服务目录 |
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 网站数据目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒 |
DocumentRoot参数用于定义网站数据的保存路径,其参数的默认值是把网站数据存放到/var/www/html目录中;而当前网站普遍的首页面名称是index.html,因此可以向/var/www/html目录中写入一个文件,替换掉httpd服务程序的默认首页面,该操作会立即生效。
Listen [IP:]PORT # IP 可省略
(1) 省略IP表示为0.0.0.0
(2) Listen指令可重复出现多次
Listen 80
Listen 8080
(3) 修改监听socket,重启服务进程方可生效
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接。
断开条件:
数量限制:访问数量达到一定数量后,会断开连接
时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应
折衷:使用较短的持久连接时长,以及较少的请求数量
KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100
注意:
httpd-2.4的KeepAliveTimeout可是毫秒级
KeepAliveTimeout num[ms]
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP
[root@Tang ~]# telnet 192.168.1.10 80
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host:192.168.1.10
HTTP/1.1 200 OK
Date: Sun, 04 Aug 2019 01:26:20 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sat, 03 Aug 2019 16:05:26 GMT
ETag: "b-58f38a4a04249"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
Tang & Neo
Connection closed by foreign host.
httpd-2.2
不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;CentOS 6的rpm包为此专门提供了三个应用程序文件,httpd(prefork), httpd.worker, httpd.event
,分别用于实现对不同的MPM机制的支持;确认现在使用的是哪下程序文件的方法:ps aux | grep httpd
。
默认使用的为/usr/sbin/httpd,其为prefork的MPM模块。查看httpd程序的模块列表:
```
查看静态编译的模块:
# httpd -l
查看静态编译及动态编译的模块:
# httpd -M
```
更换使用httpd程序,以支持其它MPM机制。
/etc/sysconfig/httpd:
HTTPD=/usr/sbin/httpd.{worker,event}
[root@LeeMumu ~]# ps -aux | grep httpd
root 2935 0.1 0.3 186180 3992 ? Ss 09:39 0:00 /usr/sbin/httpd
apache 2938 0.0 0.2 186180 2548 ? S 09:39 0:00 /usr/sbin/httpd
apache 2939 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2940 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2941 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2942 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2943 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2944 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
apache 2945 0.0 0.2 186180 2524 ? S 09:39 0:00 /usr/sbin/httpd
root 2951 0.0 0.0 103320 900 pts/1 S+ 09:39 0:00 grep httpd
[root@LeeMumu ~]# vi /usr/sbin/httpd
HTTPD=/usr/sbin/httpd.worker
[root@LeeMumu ~]# service httpd restart
[root@LeeMumu ~]# ps -aux | grep httpd
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 2989 0.0 0.4 186388 4136 ? Ss 09:40 0:00 /usr/sbin/httpd.worker
apache 2993 0.0 0.5 530648 5452 ? Sl 09:40 0:00 /usr/sbin/httpd.worker
apache 2994 0.0 0.5 530648 5424 ? Sl 09:40 0:00 /usr/sbin/httpd.worker
apache 2995 0.0 0.5 530648 5428 ? Sl 09:40 0:00 /usr/sbin/httpd.worker
root 3105 0.0 0.0 103320 896 pts/1 S+ 09:40 0:00 grep httpd
[root@LeeMumu ~]# vim /etc/sysconfig/httpd
#HTTPD=/usr/sbin/httpd.worker
[root@LeeMumu ~]# service httpd restart
[root@LeeMumu ~]# ps -aux | grep httpd
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 3140 0.0 0.3 186180 3948 ? Ss 09:42 0:00 /usr/sbin/httpd
apache 3143 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3144 0.0 0.2 186180 2552 ? S 09:42 0:00 /usr/sbin/httpd
apache 3145 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3146 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3147 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3148 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3149 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
apache 3150 0.0 0.2 186180 2528 ? S 09:42 0:00 /usr/sbin/httpd
root 3152 0.0 0.0 103320 900 pts/1 S+ 09:42 0:00 grep httpd
切换使用的MPM,编辑此文件即可:/etc/httpd/conf.modules.d/00-mpm.conf
启用要启用的MPM相关的LoadModule指令即可。
[root@Neo ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@Neo ~]# ps -aux | grep httpd
root 8173 0.0 0.5 230480 5188 ? Ss 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8174 0.0 0.3 230480 3264 ? S 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8175 0.0 0.3 230480 3264 ? S 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8176 0.0 0.3 230480 3264 ? S 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8177 0.0 0.3 230480 3024 ? S 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8178 0.0 0.3 230480 3744 ? S 21:23 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8179 0.0 0.3 230480 3024 ? S 21:24 0:00 /usr/sbin/httpd -DFOREGROUND
root 8326 0.0 0.0 112708 972 pts/0 S+ 22:06 0:00 grep --color=auto httpd
[root@Neo ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@Neo ~]# ps -aux | grep httpd
root 8537 1.5 0.5 230684 5392 ? Ss 22:07 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8538 0.0 0.3 230432 3008 ? S 22:07 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8539 0.0 0.5 517512 5552 ? Sl 22:07 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8540 0.0 0.5 517512 5552 ? Sl 22:07 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8541 0.0 0.5 517512 5556 ? Sl 22:07 0:00 /usr/sbin/httpd -DFOREGROUND
root 8624 0.0 0.0 112708 976 pts/0 S+ 22:07 0:00 grep --color=auto httpd
[root@Neo ~]# httpd -M | grep mpm # 查看当前系统加载的MPM模块
mpm_worker_module (shared)
[root@Neo ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
[root@Neo ~]# httpd -M | grep mpm
mpm_prefork_module (shared)
[root@Neo ~]# ps -aux | grep httpd
root 8641 0.2 0.5 230480 5192 ? Ss 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8642 0.0 0.3 230480 3024 ? S 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8643 0.0 0.3 230480 3024 ? S 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8644 0.0 0.3 230480 3024 ? S 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8645 0.0 0.3 230480 3024 ? S 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
apache 8646 0.0 0.3 230480 3024 ? S 22:09 0:00 /usr/sbin/httpd -DFOREGROUND
root 8650 0.0 0.0 112708 976 pts/0 S+ 22:09 0:00 grep --color=auto httpd
如果不需要某些模块,可在模块的配置文件中进行注释即可。
如下,显示所有的模块配置文件:
[root@Neo ~]# ls /etc/httpd/conf.modules.d/
00-base.conf 00-dav.conf 00-lua.conf 00-mpm.conf 00-proxy.conf 00-systemd.conf 01-cgi.conf
如果不需要proxy_wstunnel_module (shared)
这个模块,可找相应的模块配置文件00-proxy.conf
进行相应模块的注释即可。
[root@Neo ~]# httpd -M
proxy_wstunnel_module (shared)
[root@Neo ~]# vi /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
... ...
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
StartServers 8 # 启动的进程数量
MinSpareServers 5 # 最小空闲进程数
MaxSpareServers 20 # 最大空闲进程数(应大于等于 Startservers)
ServerLimit 256 # 服务器
MaxClients 256 # 最大的客户连接数量
MaxRequestsPerChild 4000 # 每个子进程处理的最大请求数(超过这个数后,会自动杀死子进程;0 代表处理请求无限制)
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 # 每个子进程启用多少线程
MaxRequestsPerChild 0
/etc/httpd/conf.modules.d/*
/etc/httpd/modules/
LoadModule
相对于ServerRoot(默认/etc/httpd)
,注意和文档根DoucmentRoot
进行区别[root@Neo ~]# ls /etc/httpd/modules | grep mpm
mod_mpm_event.so
mod_mpm_prefork.so
mod_mpm_worker.so
# LoadModule auth_basic_module modules/mod_auth_basic.so
定义中心服务器:httpd程序在重启时 或者语法检查时,会对本机地址进行反解,如果反解失败,重启服务时,会报错。
可在 /etc/hosts 添加解析 但要保持和 本机的hostname 一致
也可以在配置文件进行修改,把 ServerName 命名为一个主机名
ServerName
语法格式: ServerName [scheme://]fully-qualified-domain-name[:port]
DocumentRoot ""
[root@Neo ~]# httpd -t # 反解报错
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.10. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@Neo ~]# vi /etc/httpd/conf/httpd.conf
ServerName 192.168.1.10
[root@Neo ~]# httpd -t # 报错消失
Syntax OK
DoucmentRoot
指向的路径为URL路径的起始位置,其相当于站点URL的根路径。
主要和 ServerRoot
进行区分。
URL PATH与FileSystem PATH不是等同的,而是存在一种映射关系
URL PATH 中的 / 对等于 FileSystem /var/www/html/
URL / --> FileSystem /var/www/html/
/images/logo.jpg --> /var/www/html/images/logo.jpg
DoucmentRoot
更改示例我们把DoucmentRoot
由默认的/var/www/html
修改为/data/web/www
。
[root@Neo ~]# mkdir /data/web/www -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/web’
mkdir: created directory ‘/data/web/www’
[root@Neo ~]# vim /data/web/www/index.html
[root@Neo ~]# cat /data/web/www/index.html
Tang & Neo
2019-08
[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html"
DocumentRoot "/data/web/www"
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
AllowOverride None
Require all granted
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
在 HTTP/2.4 中如果添加任何一个目录作为 http 的访问目录,直接访问是会被拒绝的,需要在容器内添加允许访问,即要授权允许访问某些文件,但是HTTP/2.2 不需要授权。
可基于两种机制指明对哪些资源进行何种访问控制:
# 基于目录进行授权
...
# 基于具体文件进行授权
...
# 基于正则表达式进行授权
...
基于具体 URL;
...
基于 URL 使用正则表达式:
...
中“基于源地址”实现访问控制。
order和allow、deny
order:定义生效次序;写在后面的表示默认法则
Allow from, Deny from
Allow from 192.168.1.22
Deny from all
来源地址:(四种语法格式)
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
示例:允许某一网段访问,又禁止其中一个主机的访问
Deny from 172.16.0.200
Allow from 172.16
基于IP控制:
Require ip IP地址或网络地址
Require not ip IP地址或网络地址
基于主机名控制:
Require host 主机名或域名
Require not host 主机名或域名
注意:不管是基于IP控制还是基于主机名控制,是需要放置在
配置块中或
配置块中。
示例:允许某一网段访问,又禁止其中一个主机的访问
Require not ip 172.16.0.200
Require ip 172.16
[root@Lee ~]# ifconfig | grep "inet addr" | grep 127.0.0.1 -v
inet addr:192.168.1.13 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Lee ~]# curl http://192.168.1.10/index.html
Tang & Neo
2019-08
root@Tang ~]# ifconfig | grep "\" | grep 127.0.0.1 -v
inet 192.168.1.9 netmask 255.255.255.0 broadcast 192.168.1.255
[root@Tang ~]# curl http://192.168.1.10/index.html
Tang & Neo
2019-08
192.168.1.0
段的所有主机进行访问,但是拒绝192.168.1.13
这台主机进行访问。DocumentRoot "/data/web/www"
AllowOverride None
Options Indexes FollowSymLinks
Require not ip 192.168.1.13 # 拒绝 192.168.1.13 主机进行访问
Require ip 192.168.1 # 允许 192.168.1.0 段的所有主机进行访问
[root@Neo ~]# ifconfig | grep "\" | grep 127.0.0.1 -v | grep 192.168.10.5 -v
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
[root@Tang ~]# ifconfig | grep "\" | grep 127.0.0.1 -v
inet 192.168.1.9 netmask 255.255.255.0 broadcast 192.168.1.255
[root@Tang ~]# curl http://192.168.1.10/index.html # 192.168.1.9 可以进行访问
Tang & Neo
2019-08
[root@Lee ~]# ifconfig | grep "inet addr" | grep 127.0.0.1 -v
inet addr:192.168.1.13 Bcast:192.168.1.255 Mask:255.255.255.0
[root@Lee ~]# curl http://192.168.1.10/index.html # 192.168.1.13 被拒绝访问
403 Forbidden
Forbidden
You don't have permission to access /index.html
on this server.
...
Order allow,deny
Allow from all
...
Require all granted
...
Order allow,deny
Deny from all
...
Require all denied
Options:Configures what features are available in a particular directory
后跟1个或多个以空白字符分隔的“选项”列表;Indexes
指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户(做下载站时,可以开启;一般不要开启,否则被暴露网站的文件架构)。
也就是说,在文件系统 httpd 的每个目录下,如果有 index.html
(主页),再不输入具体 URL PATH 的情况下,会显示index.html
,如果,允许 indexes
的话,就会显示该目录下的所有文件,如果不允许的话,就会显示Forbidden
。
FollowSymLinks # 允许跟踪符号链接文件所指向的源文件
None # 什么功能都不启用
All # All options except for MultiViews.
/data/web/www/
新建一个目录文件images
,并存储图片。此目录并无主页。[root@Neo ~]# ls /data/web/www/images/
gaoyuanyuan1.jpg gaoyuanyuan3.jpg gaoyuanyuan5.jpg gaoyuanyuan7.jpg gaoyuanyuan9.jpg
gaoyuanyuan2.jpg gaoyuanyuan4.jpg gaoyuanyuan6.jpg gaoyuanyuan8.jpg
[root@Neo ~]# ls /data/web/www/images/
gaoyuanyuan1.jpg gaoyuanyuan3.jpg gaoyuanyuan5.jpg gaoyuanyuan7.jpg gaoyuanyuan9.jpg
gaoyuanyuan2.jpg gaoyuanyuan4.jpg gaoyuanyuan6.jpg gaoyuanyuan8.jpg index.html
[root@Neo ~]# cat /data/web/www/images/index.html
GoaYuanYuan
1、删除 images 目录下的主页文件。
[root@Neo ~]# rm -f /data/web/www/images/index.html
[root@Neo ~]# ls /data/web/www/images/
gaoyuanyuan1.jpg gaoyuanyuan3.jpg gaoyuanyuan5.jpg gaoyuanyuan7.jpg gaoyuanyuan9.jpg
gaoyuanyuan2.jpg gaoyuanyuan4.jpg gaoyuanyuan6.jpg gaoyuanyuan8.jpg
2、编辑主配置文件,把 Option 的 Indexes 进行删除。
DocumentRoot "/data/web/www"
AllowOverride None
# Options Indexes FollowSymLinks
Options FollowSymLinks
Require all granted
3、进行语法检查,并重启 httpd 服务。
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
4、进行页面访问,查看结果。是禁止访问的。但是通过完整的 URL 还是可以访问具体内容的。
比如:
http://192.168.1.10/images/gaoyuanyuan8.jpg
[root@Neo ~]# ln -sv /etc/fstab /data/web/www/fstab.html
‘/data/web/www/fstab.html’ -> ‘/etc/fstab’
[root@Neo ~]# ll /data/web/www/
total 4
lrwxrwxrwx. 1 root root 10 Aug 4 03:03 fstab.html -> /etc/fstab
drwxr-xr-x. 2 root root 222 Aug 4 02:50 images
-rw-r--r--. 1 root root 19 Aug 3 22:45 index.html
[root@Neo ~]# cat /data/web/www/fstab.html
#
# /etc/fstab
# Created by anaconda on Wed Jun 5 18:32:09 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=f878a11c-10ef-4de4-8a27-b307bf88b220 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
DocumentRoot "/data/web/www"
AllowOverride None
# Options Indexes FollowSymLinks
Options FollowSymLinks
Require all granted
[root@Tang ~]# curl http://192.168.1.10/fstab.html
#
# /etc/fstab
# Created by anaconda on Wed Jun 5 18:32:09 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=f878a11c-10ef-4de4-8a27-b307bf88b220 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/web/www"
AllowOverride None
Options None # Options 设置为None
Require all granted
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
[root@Tang ~]# curl http://192.168.1.10/fstab.html
403 Forbidden
Forbidden
You don't have permission to access /fstab.html
on this server.
依次查找 index.html 文件,作为网站的主页面。
DirectoryIndex index.html index.html.var
语法格式:
Alias /URL/ "/PATH/TO/SOMEDIR/"
示例:
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm
、
Alias /download/ "/rpms/pub/" # 把此条命令配置在/ etc/httpd/conf/httpd.conf 文件中
进行web访问时,就相当于访问别名路径下的文件。
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm
Alias /images/ "/www/htdocs/images"
http://www.magedu.com/images/logo.png
/www/htdocs/images/logo.png
但是要注意,也要对别名的目录进行授权访问。这样的话,才能对别名目录下的内容进行访问。
[root@Neo ~]# mkdir -pv /data/neo/tang/
mkdir: created directory ‘/data/neo’
mkdir: created directory ‘/data/neo/tang/’
[root@Neo ~]# cp /data/web/www/images/ /data/neo/tang/
cp: omitting directory ‘/data/web/www/images/’
[root@Neo ~]# cp /data/web/www/images/*.jpg /data/neo/tang/
[root@Neo ~]# ls /data/neo/tang/
gaoyuanyuan1.jpg gaoyuanyuan3.jpg gaoyuanyuan5.jpg gaoyuanyuan7.jpg gaoyuanyuan9.jpg
gaoyuanyuan2.jpg gaoyuanyuan4.jpg gaoyuanyuan6.jpg gaoyuanyuan8.jpg
/data/neo/tang/
目录。[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
Alias /neo_images/ "/data/neo/tang/" # 定义别名
# 进行授权
AllowOverride None
Options Indexes FollowSymLinks
Require all granted
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
http://192.168.1.10/neo_images/
就相当于访问 /data/neo/tang/
目录下的文件。AddDefaultCharset UTF-8
常用的中文字符集:
中文字符集:GBK, GB2312, GB18030
日志类型分为:访问日志 和 错误日志。
错误日志一般是指程序的错误或者配置方面的错误。如果是访问过程中,被禁止,这样日志会存放在访问日志中。访问失败并不一定都是在错误日志中的。
/var/log/httpd:
access_log # 访问日志
error_log # 错误日志
ErrorLog "logs/error_log" # 主配置文件中的配置
LogLevel warn # 记录级别
Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined # combined 是日志格式名称
CustomLog "logs/access_log" combined # 主配置文件中的配置,指明日志存放位置和日志格式(combined)
LogFormat format strings:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
%h:客户端IP地址;只记录IP地址就行,反解太浪费时间
%l:Remote User, 远程登陆名字,通常为一个减号(“-”)
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号
%t:服务器收到请求时的时间
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
%>s:响应状态码
%b:响应报文的大小,单位是字节;不包括响应报文的http首部
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
# 上述格式中,有部分 \ 是转义符
[root@Neo ~]# cat /var/log/httpd/access_log
192.168.1.199 - - [04/Aug/2019:03:47:55 -0400] "GET /images/ HTTP/1.1" 200 2646 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
192.168.1.199 - - [04/Aug/2019:03:48:06 -0400] "GET /neo_images/ HTTP/1.1" 200 2654 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
认证质询:
WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
认证方式有两种:
basic # 明文
digest # 消息摘要认证
安全域:
需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
用户的账号和密码存放于何处?
虚拟账号:仅用于访问某服务时用到的认证标识
存储:
文本文件
SQL数据库
ldap目录存储
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ...
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用,如果存在了就不需要使用,不然会覆盖到以前的数据
-m:md5格式加密
-s:sha格式加密
-D:删除指定用户
-b:批模式添加用户(直接给定密码)
htpasswd -b [options] /PATH/TO/HTTPD_PASSWD_FILE username password
注意:使用 -c 选项时,需要注意。
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
组文件:每一行定义一个组
GRP_NAME: username1 username2 ...
[root@Neo ~]# htpasswd -c -m /data/passuser neo
New password: neo
Re-type new password:neo
Adding password for user neo
[root@neo data]# cat passuser
neo:$apr1$nokrvTr2$iL0Rx9UV.fwIFhY3XAdmo.
[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/web/www"
Options None
AllowOverride None
AuthType Basic
AuthName "neo"
AuthUserFile "/data/passuser"
Require user neo # 允许用户 neo 进行登陆访问
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
组名称 | 组成员 |
---|---|
pets | neo tang neotang |
lover | lee pang guai |
[root@Neo ~]# htpasswd -m -b /data/passuser tang tang
Adding password for user tang
[root@Neo ~]# htpasswd -m -b /data/passuser neo neo
Adding password for user neo
[root@Neo ~]# htpasswd -m -b /data/passuser neotang neotang
Adding password for user neotang
[root@Neo ~]# htpasswd -m -b /data/passuser lee lee
Adding password for user lee
[root@Neo ~]# htpasswd -m -b /data/passuser guai guai
Updating password for user guai
[root@Neo ~]# htpasswd -m -b /data/passuser pang pang
Adding password for user pang
[root@neo data]# cat passuser
guai:$apr1$4oJGEKF2$rdB4G/6tk94.3E8tO37Xr/
tang:$apr1$cIvKAe45$7oQ0ylHQzawFoF9jRLDoS.
neo:$apr1$GNaXLHrt$0qbJqX9ALXcc8vgtiABvg.
neotang:$apr1$URIFLDJ6$2V4iw.6nYN6SepkEfNCgL0
lee:$apr1$9PdjDquF$1TS5SApSuP9OCc5SQ/R840
pang:$apr1$.S5gLDsG$Lsc4UNkSUQ5XJbf.hgKTG.
[root@neo data]# cat groupuser
pets: neo tang neotang
loves: lee pang guai
[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/web/www"
Options None
AllowOverride None
AuthType Basic
AuthName "String"
AuthUserFile "/data/passuser"
AuthGroupFile "/data/groupuser"
Require group pets
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
站点标识: socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同: 请求报文中首部 Host: www.magedu.com
虚拟主机有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN
**注意(专用于httpd-2.2):**一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用’main’主机;禁用方法:注释中心主机的DocumentRoot指令即可。
ServerName FQDN
DocumentRoot ""
其它可用指令:
ServerAlias # 虚拟主机的别名;可多次使用
ErrorLog # 单独指定错误日志的存放位置
CustomLog # 单独指定访问日志的存放位置
..
Alias
...
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
尽量不要全部开放,只开放部分地址。
加载模块:
LoadModule status_module modules/mod_status.so
httpd/2.2:
SetHandler server-status
Order allow,deny
Allow from 172.16
httpd/2.4:
SetHandler server-status
Require ip 172.16
192.168.1.0
段的地址访问 httpd 的状态页。[root@Neo ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/web/www"
Options None
AllowOverride None
Require all granted
SetHandler server-status
Require ip 192.168.1
[root@Neo ~]# httpd -t
Syntax OK
[root@Neo ~]# systemctl restart httpd.service
http://192.168.1.10/server-status
,查看服务器 httpd 的运行状态。基于模块mod_userdir.so实现
SELinux: http_enable_homedirs
相关配置:
vim /etc/httpd/conf/httpd.conf
#UserDir disabled
UserDir public_html #指定共享目录的名称
准备目录
su – wang;mkdir ~/public_html
setfacl –m u:apache:x ~wang
访问
http://localhost/~wang/index.html
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any 客户机IP和用户验证,有一个满足即可
示例:
Require valid-user
Order allow,deny
Allow from 192.168.1
Satisfy Any
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 is a command line tool for transferring data with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3 and RTSP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos…), file transfer resume, proxy tunneling and a busload of other useful tricks.
curl [options] [URL...]
curl的常用选项: # -A -e -I --compressed 熟悉掌握
-A/--user-agent # 设置用户代理发送给服务器,模拟不同客户端
# curl -A “Chrome 2.2” URL 可以去 access log 查看日志,进行验证
--basic # 使用HTTP基本认证(配合 -u 使用 用户名和密码)
--tcp-nodelay # 使用TCP_NODELAY选项
-e/--referer # 来源网址
# curl -A “Chrome 2.2” -e "R-URL" URL 可以设置 REFERER ,即从哪个URL跳转到此URL
--cacert # CA证书 (SSL)
--compressed # 要求返回是压缩的格式
-H/--header # 自定义首部信息传递给服务器
-I/--head # 只显示响应报文首部信息 # cutl -I URL
--limit-rate # 设置传输速度
-u/--user # 设置服务器的用户和密码
-0/--http1.0 # 使用HTTP 1.0
语法格式:
elinks [OPTION]... [URL]...
-dump # 不进入交互式模式,而直接将URL的内容输出至标准输出
指定以哪个用户的身份运行httpd服务进程
需要在主配置文件中配置如下命令:
User apache
Group apache
使用 SUexec
可以以其它系统用户身份运行程序,但是不安全
在使用浏览器进行页面访问时,访问的文件对于 apache
用户来说一定要有读权限,不然访问会被禁止的(因为默认的 httpd 进程都是以系统用户 apache
来运行的)
[root@LeeMumu ~]# ps -aux | grep httpd # 除了主进程,其它进程全是以 apache 的身份在运行
root 7296 1.2 0.5 230480 5180 ? Ss 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7352 0.0 0.3 230480 3020 ? S 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7353 0.0 0.3 230480 3020 ? S 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7354 0.0 0.3 230480 3020 ? S 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7355 0.0 0.3 230480 3020 ? S 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
apache 7356 0.0 0.3 230480 3020 ? S 11:18 0:00 /usr/sbin/httpd -DFOREGROUND
root 7595 0.0 0.0 112712 980 pts/0 S+ 11:19 0:00 grep --color=auto httpd
进程的运行与进程的运行用户身份有很大的关系,可以结合Linux的安全上下文
理解
在互联网中运行的程序,其进程的身份一般都是以普通身份运行的,避免某个进程被劫持后,可以任意访问护坡操作系统中的任意内容
这是在生产环境中必须的配置,可以极大的提高服务器性能。
适用场景:
主配置文件的配置内容如下:
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 # 压缩比,不建议使用最高压缩比,消耗CPU较多
DeflateCompressionLevel 9
# 以下配置是针对于一些老旧浏览器进行的特殊配置,一般不需配置
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html # 如果使用的是 Mozilla/4 浏览器,则只使用 gzip 压缩文本内容
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip # 如果使用的是 Mozilla/4\.0[678] 浏览器,则不使用 gzip 压缩
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # 只使用gzip
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验正:
如果信任给其发证书的CA:
(a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验正证书的内容的合法性:完整性验正
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
(5) 服务器用此密钥加密用户请求的资源,响应给客户端
注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机。
第一步:为服务器申请数字证书
测试:通过私建CA发证书
(a) 创建私有CA
(b) 在服务器创建证书签署请求
(c) CA签证
第二步:配置httpd支持使用ssl,及使用的证书
# yum -y install mod_ssl # 安装 ssl 模块,实现 https
安装完 ssl 模块后,会生成配置文件:/etc/httpd/conf.d/ssl.conf
需要做如下配置:
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile
第二步注意事项:
# rpm -ql mod_ssl
所生成的文件列表,其中有关于 cache 缓存设置,后续会进行讲解
# httpd -M | grep ssl
# httpd -t -D DUMP_VHOSTS # 查看当前 httpd 的虚拟主机
有些服务器访问 80 端口 可以重定向到 443 端口,实现 https 的访问
http 调用模块 ssl 实现 https ,但是时间长,消耗CPU高
一般实现全 https 方式访问的服务器,都需要很高的性能
https 只能是基于 IP 的虚拟主机
# openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
设置 高级设置 管理证书 授权中心 证书授权中心 导入
)htpasswd:basic # 认证基于文件实现时,用到的账号密码文件生成工具
apachectl # httpd自带的服务控制脚本,支持 start 和 stop
apxs # 由httpd-devel包提供,扩展httpd使用第三方模块的工具
rotatelogs # 日志滚动工具;(按时间或者大小进行滚动,避免单个 log 文件过大,管理不方便)
# access.log -->
# access.log, access.1.log -->
# access.log, acccess.1.log, access.2.log
uexec # 访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行
ab # apache bench,进行服务器web服务的压力测试
# apachectl 命令可实现对 httpd 的启动和关闭
[root@LeeMumu ~]# apachectl stop
[root@LeeMumu ~]# apachectl status
* httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Mon 2019-08-05 11:46:09 EDT; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 7612 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Process: 7296 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
Main PID: 7296 (code=exited, status=0/SUCCESS)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
[root@LeeMumu ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Mon 2019-08-05 11:46:09 EDT; 28s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 7612 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Process: 7296 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
Main PID: 7296 (code=exited, status=0/SUCCESS)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
[root@LeeMumu ~]# apachectl start
[root@LeeMumu ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-08-05 11:46:49 EDT; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 7612 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 7631 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─7631 /usr/sbin/httpd -DFOREGROUND
├─7632 /usr/sbin/httpd -DFOREGROUND
├─7633 /usr/sbin/httpd -DFOREGROUND
├─7634 /usr/sbin/httpd -DFOREGROUND
├─7635 /usr/sbin/httpd -DFOREGROUND
└─7636 /usr/sbin/httpd -DFOREGROUND
压测:benchmark
ab, webbench, http_load, seige
jmeter, loadrunner
tcpcopy # 网易开发,复制生产环境中的真实请求,并将之保存下来,然后在新的服务器上进行压力测试(尽量贴合真实环境)
可通过查看 ab 测试结果,可以了解其并发数量对运行结果的影响(同样的请求数量)。
ab [options] [http[s]://]hostname[:port]/path
ab [OPTIONS] URL # URL 一定要指明具体访问的PATH路径,不能省略,否则会报错
-n:总请求数
-c:模拟的并行数
-k:以持久连接模式 测试
[root@LeeMumu ~]# ab -n 10000 -c 10 http://192.168.1.10:80/index.html
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.1.10 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.6
Server Hostname: 192.168.1.10
Server Port: 80
Document Path: /index.html
Document Length: 32 bytes
Concurrency Level: 10
Time taken for tests: 2.171 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2920000 bytes
HTML transferred: 320000 bytes
Requests per second: 4605.18 [#/sec] (mean)
Time per request: 2.171 [ms] (mean)
Time per request: 0.217 [ms] (mean, across all concurrent requests)
Transfer rate: 1313.20 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.3 1 36
Processing: 0 1 1.9 1 37
Waiting: 0 1 1.8 1 37
Total: 1 2 2.3 2 37
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 5
100% 37 (longest request)
[root@LeeMumu ~]# ab -n 10000 -c 100 http://192.168.1.10:80/index.html
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.1.10 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.6
Server Hostname: 192.168.1.10
Server Port: 80
Document Path: /index.html
Document Length: 32 bytes
Concurrency Level: 100
Time taken for tests: 1.941 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2920000 bytes
HTML transferred: 320000 bytes
Requests per second: 5150.98 [#/sec] (mean)
Time per request: 19.414 [ms] (mean)
Time per request: 0.194 [ms] (mean, across all concurrent requests)
Transfer rate: 1468.83 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.0 1 34
Processing: 4 18 8.0 16 81
Waiting: 1 18 8.0 16 81
Total: 12 19 8.3 17 82
Percentage of the requests served within a certain time (ms)
50% 17
66% 18
75% 18
80% 19
90% 22
95% 29
98% 49
99% 68
100% 82 (longest request)
[root@LeeMumu ~]# ab -n 10000 -c 500 http://192.168.1.10:80/index.html
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.1.10 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.6
Server Hostname: 192.168.1.10
Server Port: 80
Document Path: /index.html
Document Length: 32 bytes
Concurrency Level: 500
Time taken for tests: 3.456 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2920000 bytes
HTML transferred: 320000 bytes
Requests per second: 2893.38 [#/sec] (mean)
Time per request: 172.809 [ms] (mean)
Time per request: 0.346 [ms] (mean, across all concurrent requests)
Transfer rate: 825.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 18 125.8 1 1006
Processing: 3 74 331.9 22 3415
Waiting: 1 73 331.9 22 3415
Total: 13 92 366.4 23 3446
Percentage of the requests served within a certain time (ms)
50% 23
66% 24
75% 25
80% 26
90% 30
95% 225
98% 1425
99% 1773
100% 3446 (longest request)
-c #,命令中设置的并发数
)-n #,命令中设置的总请求数
)Non-2xx responses
”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中Complete requests / Time taken for tests
Time token for tests/(Complete requests/Concurrency Level)
Time taken for tests/Complete requests
,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Total trnasferred/ Time taken for tests
,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量