httpd详解(三)

18、curl命令

  • curl命令简介

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

  • 使用举例

只显示响应报文首部信息:

[[email protected] ~]# curl -I 
http://www.example.com
HTTP/1.1 200 OK
Date: Mon, 03 Aug 2015 09:33:12 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 02 Aug 2015 16:59:17 GMT
ETag: "5ff52-13-51c56f93b72c4"
Accept-Ranges: bytes
Content-Length: 19
Connection: close
Content-Type: text/html; charset=UTF-8

设置用户代理发送给服务器:

[[email protected] ~]# curl -A testagent http://www.example.com
[[email protected] ~]# tail -2 /var/log/httpd/access_log 
192.168.1.8 - - [03/Aug/2015:17:34:00 +0800] "GET / HTTP/1.1" 200 19 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
192.168.1.8 - - [03/Aug/2015:17:35:42 +0800] "GET / HTTP/1.1" 200 19 "-" "testagent"

指定来源网址进行访问:

[[email protected] ~]# curl -e   http://www.example.com
[[email protected] ~]# tail -2 /var/log/httpd/access_log 
192.168.1.8 - - [03/Aug/2015:17:35:42 +0800] "GET / HTTP/1.1" 200 19 "-" "testagent"
192.168.1.8 - - [03/Aug/2015:17:40:14 +0800] "GET / HTTP/1.1" 200 19 "
http://www.baidu.com/index.html" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"

指定的CA证书访问:

[[email protected] ~]# curl --cacert /etc/pki/CA/cacert.pem 
 [[email protected] ~]# curl  https://www.example.com //若没有证书则不能访问https网站
curl: (60) Peer certificate cannot be authenticated with known CA certificatesMore details here: 
***************

19、使用mod_deflate模块压缩页面从而优化传输速度

在使用此模块时一点要针对实际情况进行使用,若服务器带宽有限且CPU压力不大,则可以使用此模块,然而若CPU压力较大且带宽充足则使用此模块就得不偿失了,同时选项压缩的项目也要做好限定,对于难以压缩的文件就尽量不压缩,最后在定义是还要将有些不能支持压缩传输的几款浏览器就不要做限定了。

查看httpsd是否是否装载此模块,默认安装时就安装了:

[[email protected] ~]# httpd -M |grep deflate
 deflate_module (shared)
Syntax OK
[[email protected] ~]# cat /etc/httpd/conf.d/deflate.conf
SetOutputFilter DEFLATE

# mod_deflate configuration
<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>
[[email protected] ~]# httpd -t
Syntax OK
[[email protected] ~]# service httpd reload
[[email protected] ~]# cp /var/log/messages /www/a.com/htdoc/test.html   //找个大点的文件进行浏览可以突出压缩的效果
[[email protected] ~]# chmod +rx /www/a.com/htdoc/test.html

在chrome浏览器下按F12打开测试窗口,然后在浏览器输入http://www.a.com/test.html,下面就可以看到是否压缩了。

20、资源限定

资源限定分为:软限制,可以超出的限制,但仅能超出一定时长。 硬限制,绝对不能超出的限制;资源限定的命令为ulimit(软限制),以及其配置文件/etc/security/limits.conf,扩展配置etc/security/limits.d/*.conf(硬限制)。

常用选项:

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

-u [N]:所能够打开的最大进程数;

使用举例:

可以在配置文件中手动配置访问的最大进程和文件数,但是不能立即生效,若想生效就要用ulimit命令了。

[[email protected] ~]# vim /etc/security/limits.conf 
apache          hard     nofile         65535
apache          hard     nproc          33333

使用ulimit命令进行设置可以立即生效但是一旦机器重启就不能生效了。

[[email protected] ~]# ulimit -n 65535
[[email protected] ~]# ulimit -u 33333
[[email protected] ~]# ulimit -n
65535
[[email protected] ~]# ulimit -u
33333

21、ab工具的初步使用

  • ab命令简介

ab(ApacheBench)命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。类是这样的软件还有:http_load webbench seige、tcp_copy。这种命令的执行结果不能全部说明服务器性能,但可以做为参考。

  • 常用选项

-c 模拟的并发数

-n 模拟的总请求数

注意:在使用时一般并发数(-c)应该小于等于请求数(-n);

命令安装包:

[[email protected] ~]# rpm -qf /usr/bin/ab
httpd-tools-2.2.15-45.el6.centos.x86_64

使用ab命令进行测试:

[[email protected] ~]# ab -c 100 -n 100 
http://www.b.org/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, 
http://www.zeustech.net/
Licensed to The Apache Software Foundation,

Benchmarking www.b.org (be patient).....done

Server Software:        Apache
Server Hostname:        www.b.org
Server Port:            80

Document Path:          /index.html
#测试的页面
Document Length:        12160 bytes
#页面大小

Concurrency Level:      100
#测试的并发数
Time taken for tests:   3.372 seconds
#整个测试持续的时间
Complete requests:      100
#完成的请求数量
Failed requests:        0
#失败的请求数量
Write errors:           0
Total transferred:      1317151 bytes
#整个过程中的网络传输量
HTML transferred:       1300888 bytes
#整个过程中的HTML内容传输量
Requests per second:    29.66 [#/sec] (mean)
#最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
Time per request:       3371.979 [ms] (mean)
#最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
Time per request:       33.720 [ms] (mean, across all concurrent requests)
#每个连接请求实际运行时间的平均值
Transfer rate:          381.46 [Kbytes/sec] received
#平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      248  378 290.7    263    1293
Processing:   280 1126 649.5   1064    2547
Waiting:      271  865 405.0    797    1514
Total:        530 1504 600.0   1436    2812
#网络上消耗的时间的分解,各项数据的具体算法还不是很清楚

Percentage of the requests served within a certain time (ms)
  50%   1436
  66%   1687
  75%   1782
  80%   1925
  90%   2635
  95%   2664
  98%   2680
  99%   2812
 100%   2812 (longest request)

#整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1436毫秒,66%的用户响应时间小于1687毫秒,最大的响应时间小于2812毫秒。对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数。

22、扩展功能

  • 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 :执行外部程序前切换用户。

23、httpd-2.4编译安装

  • 下载相关软件
[[email protected] ~]# wget http://mirrors.aliyun.com/apache/apr/apr-1.5.2.tar.gz
[[email protected] ~]# wget http://mirrors.aliyun.com/apache/apr/apr-util-1.5.4.tar.gz
[[email protected] ~]# wget http://mirrors.aliyun.com/apache/httpd/httpd-2.4.16.tar.gz
  • 安装httpd-2.4所需要依赖的包
[[email protected] ~]# yum install -y gcc pcre-devel
  • 安装apr、apr-util工具
[[email protected] ~]# tar xf apr-1.5.2.tar.gz 
[[email protected] ~]# cd apr-1.5.2
[[email protected] apr-1.5.2]# ./configure --prefix=/usr/local/apr
[[email protected] apr-1.5.2]# make && make install
[[email protected] apr-1.5.2]# ls /usr/local/apr
bin  build-1  include  lib
[[email protected] ~]# tar -xf apr-util-1.5.4.tar.gz 
[[email protected] ~]# cd apr-util-1.5.4
[[email protected] apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr  (注意:--with-apr=/usr/local/apr是上面安装apr的路径)
[[email protected] apr-util-1.5.4]# make && make instal
[[email protected] apr-util-1.5.4]# ls /usr/local/apr-util/
bin  include  lib

(解释:apr,全称为Apache portable Run-time libraries,叫Apache可移植运行库,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库,安装apache都需要先安装这个库的)

  • httpd-2.4新特性

1)MPM支持在运行时装载

2)支持event

3)异步读写

4)在每模块及每目录上指定日志级别

5)每请求配置:<If> <Elseif>

6)增强版的表达式分析器

7)毫秒级的keepalive timeout

8)支持主机名的虚拟主机不在需要NameVirtualHost指令

9)支持使用自定义变量

新增一些模块:mod_proxy_fcgi、mod_ratelimit、mod_request、mod_remoteip。 对于基于IP的访问做了修改,不在使用order、allow、deny这些机制,而是统一使用require进行。

  • 编译httpd-2.4
[[email protected] ~]# tar xf httpd-2.4.16.tar.gz 
[[email protected] ~]# cd httpd-2.4.16
[[email protected] httpd-2.4.16]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable--ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modeles=most(加载常用的模块) --enable-mpms-shared=all --with-mpm=event
[[email protected] httpd-2.4.16]# ls /usr/local/apache/
bin  build  cgi-bin  error  htdocs  icons  include  logs  man  manual  modules

注意:我在编译安装httpd-2.4之前已经安装过基于rpm包的httpd-2.2软件,所以在定义文件路径时一定不要和httpd-2.2的文件路径一致。

# 各编译参数详解
--prefix:#安装路径
--sysconfdir:#指定配置文件路径
--enable-so:#DSO兼容,DSO=Dynamic Shared Object,动态共享对象,可实现模块动态生效
--enable-ssl:#支持SSL/TLS,可以实现https访问
--enable-cgi:#支持CGI脚本(默认对非线程的MPM模式开启)
--enable-rewrite:#启用Rewrite功能
--enable-deflate:#支持压缩
--with-z:#使用指定的zlib库,不指定路径会自动寻找
--with-pcre:#使用指定的PCRE库,不指定路径会自动寻找
--with-apr:#指定apr安装路径
--with-apr-util:#指定apr-util安装路径
--enable-modules:#支持动态启用的模块,可选参数有“all”,“most”,“few”,“reallyall”
--enable-mpms-shared:#支持动态加载的MPM模块,可选“all”
--with-mpm:#设置默认启用的MPM模式
  • 后续配置

导出头文件:

[[email protected] ~]# ln -sv /usr/local/appache/include /usr/include/httpd

导出帮助文件:

[[email protected] ~]# vim /etc/man.config   //在配置文件中添加下面的配置
MANPATH /usr/local/apache/man

由于我们在源码编译安装前以及安装过的httpd-2.2的软件包,若想查看httpd-2.4的帮助文档则要需要用-M选项加man文件路径。

[[email protected] ~]# man httpd
Apache HTTP Server                2007-08-01                          HTTPD(8)
[[email protected] ~]# man -M /usr/local/apache/man httpd
Apache HTTP Server                2012-02-10                          HTTPD(8)

查看系统所有的库文件:

[[email protected]com ~]# ldconfig -p

修改环境变量:

[[email protected] ~]# vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH
[[email protected] ~]# .  /etc/profile.d/httpd.sh
[[email protected] ~]# httpd -V
Server version: Apache/2.4.16 (Unix)
Server built:   Aug  3 2015 20:28:13
Server‘s Module Magic Number: 20120211:47
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
****************************
  • 为httpd-2.4提供service服务脚本

添加启动脚本:

[[email protected]~]# cat /etc/init.d/httpd24 
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve #      HTML files and CGI.
# processname: httpd
# config: /etc/httpd24/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd24.pid
# Source function library.
. /etc/rc.d/init.d/functions
 
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
 
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  status)
        status -p ${pidfile} $httpd
RETVAL=$?
;;
  restart)
stop
start
;;
  condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
  reload)
        reload
;;
  graceful|help|configtest|fullstatus)
$apachectl [email protected]
RETVAL=$?
;;
  *)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac
exit $RETVAL
[[email protected] ~]# chmod +x /etc/init.d/httpd24

把httpd服务添加为开机自启动:

[[email protected] ~]# chkconfig --add httpd 24
[[email protected] ~]# chkconfig httpd24 on

修改httpd主配置文件/etc/httpd24/httpd.conf,指定httpd服务的PID文件,直接在配置文件添加如下字段:

PidFile "/var/run/httpd24.pid"

启动服务:

[[email protected] init.d]# service httpd24 start
正在启动 httpd:               [确定]

浏览器测试:

时间: 2024-10-20 10:18:01

httpd详解(三)的相关文章

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

php学习之道:WSDL详解(三)

通过声明方式定义绑定(binding)属性 如果你在服务中采用SOAP binding,你可以使用JAX-WS来指定一定数量的属性binding.这些属性指定对应你在WSDL中指定的属性.某些设置,比如参数类型,可以约束你实现的方法,这些设置也影响声明的效用. @SOAPBinding声明,定义在javax.jws.soap.SOAPBinding接口中.它提供发布时的SOAP Binding细节.如果@SOAPBinding没有被指定,则用缺省的doc/literal SOAPBinding.

UINavigationController详解三(转)ToolBar

原文出自:http://blog.csdn.net/totogo2010/article/details/7682641,特别感谢. 1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [self.navigationController  setToolbarHidden:NO animated:YES]; 2.在ToolBar上添加UIBarBut

logback -- 配置详解 -- 三 -- &lt;encoder&gt;

附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appender> logback -- 配置详解 -- 三 -- <encoder> logback -- 配置详解 -- 四 -- <filter> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Android基础入门教程——8.3.6 Paint API之—— Xfermode与PorterDuff详解(三)

Android基础入门教程--8.3.6 Paint API之-- Xfermode与PorterDuff详解(三) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xfermode中的三儿子:PorterDuffXfermode构造方法中的为一个参数: PorterDuff.Mode,我们在观看了16种图片混排模式后,又自己写代码来验证了一下文档中 18种不同的混排模式,18种是新增了ADD和OVERLAY两种模式!当然,仅仅验证知道是不够的, 本节我们来写个例子

LinearLayout详解三:LayoutInflater创建View过程分析

项目人力资源管理主要有以下几个过程: 编制人力资源管理计划 组建项目团队 建设项目团队 项目团队管理 编制人力资源管理计划 根据什么来编? 直观点就是你要干什么事?干这些事有哪些制约? 这个说起来好像和没说一样,但就我自己做的一些项目来说,有以下困难: 1> 项目前期需求是不具体不明确的 这样直接导致你做项目计划时WBS也是不明确的,进而你细化不了活动,自然你也没法 明确活动需要什么样的人. 这个时候怎么办? 就我个人而言,有2种员工很喜欢: 1> 数学思维强的, 注意不是会做高数题,是指给你

WebSocket安卓客户端实现详解(三)–服务端主动通知

WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 WebSocket安卓客户端实现详解(二)–客户端发送请求 终于是最后一篇啦,有点激动\ ( ≧▽≦ ) /啦啦啦, 服务端主动通知 热身完毕,我们先回顾下第一篇中讲到的服务端主动通知的流程 根据notify中事件类型找到对应的处理类,处理对应逻辑. 然后用eventbus通知对应的ui界面更新. 如果

Spring4.0MVC学习资料,ApplicationContext中的方法详解(三)

做为java开源的一部分,spring框架一直排在老大的位置.Spring4.0 是 Spring 推出的一个重大版本升级,进一步加强了 Spring 作为 Java 领域第一开源平台的地位.Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖注入.SpEL.校验及格式化框架.Rest风格的 WEB 编程模型等.这些新功能实用性强.易用性高,可大幅降低 JavaEE 开发的难度,同时有效提升应用开发的优雅性.为了方便开发,Spring的ApplicationContext类,

View绘制详解(三),扒一扒View的测量过程

所有东西都是难者不会,会者不难,Android开发中有很多小伙伴觉得自定义View和事件分发或者Binder机制等是难点,其实不然,如果静下心来花点时间把这几个技术点都研究一遍,你会发现其实这些东西都很简单.OK,废话不多说,今天我们就来看看View的测量.View的测量纷繁复杂,不过如果能够做到提纲挈领,其实也不难.那么今天,我们就来扒一扒View的测量.本文主要涉及如下知识点: 1.View的测量 2.在父容器中对View进行测量 3.LinearLayout测量举例 4.最根上容器测量 如