一、httpd持久化连接:使用httpd之telnet测试其keepalive连接状态

作用:连接建立后,每个资源获取结束不会断开连接,而继续等待其他资源请求并完成传输。

1、KeepAlive  Off|On :表示是否打开持久化连接功能

2、MaxKeepAliveRequests 100:表示连接的最大请求次数。超过100个连接之后,会断开最先的连接

3、KeepAliveTimeout 15:15秒,在连接15秒过后没有进行任何操作则会断开连接。

比如:打开KeepAlive功能是这样子的:

首先是在/var/www/html/目录下创建一个文件index.html,并且写入内容“Test Page”

然后在/etc/httpd/conf.d目录下创建一个新的配置文件中并写入如下内容:

重启一下服务:

[root@ELK-chaofeng07 conf.d]# telnet 172.16.0.57 80
Trying 172.16.0.57...
Connected to 172.16.0.57.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host: 172.16.0.57                         #手动输入两行内容输入完之后按下回车键 HTTP/1.1 200 OK
Date: Thu, 07 Mar 2019 03:40:51 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 07 Mar 2019 03:09:39 GMT
ETag: "a-583786fd65dea"
Accept-Ranges: bytes
Content-Length: 10
Content-Type: text/html; charset=UTF-8
Test Page                             #显示出此行内容之后,系统会等待你10秒钟,如果这10秒内你不做任何处理,系统服务会自动断开连接。
Connection closed by foreign host.

终端中,红色背景是我手动交互式输入的,两行都输完之后,等待10秒钟没有手动输入再次发出请求,此时服务会主动断开连接。这就是打开KeepAlive的作用,系统会等待用户指定时间发起其他请求,如果没有其他请求之后,则会主动断开连接。

安装httpd之后,默认是打开KeepAlive功能的,就比如上面的测试结果分析。

比如:也可以关闭KeepAlive测试一下:

重启一下:

[root@ELK-chaofeng07 conf.d]# telnet 172.16.0.57 80
telnet 172.16.0.57
Trying 172.16.0.57...
Connected to 172.16.0.57.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host:172.16.0.57 HTTP/1.1 OK
Date: Thu, Mar :: GMT
Server: Apache/2.4. (CentOS)
Last-Modified: Thu, Mar :: GMT
ETag: "a-583786fd65dea"
Accept-Ranges: bytes
Content-Length:
Connection: close
Content-Type: text/html; charset=UTF- Test Page                        #显示完此行内容之后,系统立即断开连接。
Connection closed by foreign host.

关闭KeepAlive之后,在客户端向服务器发起一次请求之后,服务器会立马断开连接,不再等待用户发起其他的请求,因此我们更建议打开KeepAlive的功能。

在我测试的httpd服务上,httpd的版本是2.4.6。这个版本默认是打开KeepAlive功能的,并且设置超时时间也是比较短的,上面的实验演示中,我自己定义的配置文件是10秒钟,然后我删除了自己的配置文件,然后测试默认的KeepAlive服务状态,发现KeepAlive默认是开启状态,但是httpd服务默认是5秒钟。我还发现/etc/httpd/conf.d/目录下的自定义的配置文件的优先级大于系统默认的配置文件。

二、httpd之多路处理模块MPM

我们这里介绍使用的httpd版本都是2.4.6版本。httpd的处理模块MPM有三种:分别是prefork、worker、event。默认的处理模块是prefork。所以其他的两个我们不怎么使用,因此主要说prefork的用法。我们可能会修改httpd的子进程数量,一般上一个httpd服务有1个主进程,许多个子进程,不过子进程的数量是可以修改的。比如以下:

[root@ELK-chaofeng conf.modules.d]#ps aux | grep httpd
root 1.5 0.8 ? Ss : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.4 ? S : : /usr/sbin/httpd -DFOREGROUND
root 0.0 0.0 pts/ R+ : : grep --color=auto httpd

可以看出有一个主进程,是root用户启动的,剩下的是6个子进程,是apache用户,子进程负责与客户端打交道,不过这个过程还会有线程的参与,处理客户端请求比较复杂,修改prefork的子进程等参数是在这个文件中:

[root@ELK-chaofeng conf.modules.d]#pwd
/etc/httpd/conf.modules.d
[root@ELK-chaofeng conf.modules.d]#cat 00-mpm.conf
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule prefork.c>
StartServers 6
MinSpareServers 3
MaxSpareServers 7
ServerLimit 200
MaxClients 200
MaxRequestsPerChild 1000
</IfModule>

红色字体的内容就是定义子进程和线程的数量的。这部分内容默认没有,需要自己加上去。一般来说,httpd服务默认是创建10个子进程来建立连接

查看模块列表:

httpd -l :主要是查看静态编译的模块

htpd -M :查看所有的模块,包括静态编译和DSO模块。

三、httpd配置文件介绍

1、站点目录:

注意:httpd2.4.6版本中,站点目录需要显式给出访问权限,这个比httpd2.2版本有了更加细分的权限控制。如果不显示给出,即便定义了站点目录,默认也是不能访问的。

还有一点:站点目录的根目录是相对httpd服务来说的,比如上面这个,对于Linux文件系统来说,这是/var/www/html目录,而对于httpd服务来说,把这个一整个目录当作是一个根目录,比如一个文件存在Linux系统上的/var/www/html/images/1.jpeg。我们在浏览器中访问时,输入的地址是:http://192.168.1.1/images1.jpeg来访问的。

2、定义站点目录的访问权限

我们的配置文件中可能有很多个Directory代码块,每一个代码块对应不同的权限。所以我们一定要找对站点目录才能继续修改。这里面主要有两点需要注意:

1)Options :主要定义了访问路径下的资源权限问题。Options有三个选项需要学习:

Indexes :当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户。这是一个非常危险的操作,一般上来说只有到下载页面时才使用此功能

FollowSymlinks :比如现在要访问的目录下面有一个文件,但是这个文件是一个符号链接,他链接的是其他的目录下的一个文件。当启用此功能时,会直接将目标文件的内容显示出来,该功能默认也是启用的。

none:不启用任何功能。

2)站点访问权限配置。Require all granted表示全部客户端可访问此站点数据。相反的是Require all denied。

需要注意的是:定义某个IP或者Host主机名访问的时候,需要添加代码段来实现,比如:

<Directory>
<Requireall> Require IP
Require not IP
</Requireall>
</Directory>

3、定义默认匹配的主页面

我们访问网站的时候,网站自动会跳转到index.html这个页面并返回结果给我们 ,默认访问的页面就是这个参数控制的。我们可以定义多个,依次使用空格隔开,匹配的时候是自左向右依次匹配的。

4、alias路径别名

路径别名的作用就是,比如上面的,假如现在我访问的是 /webpath目录,那么系统此时会立即跳转到/full/filesystem/path这个目录来访问。方便用户。

httpd的一些知识点的更多相关文章

  1. php易混淆知识点

    一.define(“constant”,  “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...

  2. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)

    还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...

  3. Docker技术知识点总结

    Docker技术知识点总结 本文宿主机环境Centos7.4Docker version 18.09.2, build 6247962采用国内 Daocloud 加速器---------------- ...

  4. Django项目知识点汇总

    目录 一.wsgi接口 二.中间件 三.URL路由系统 四.Template模板 五.Views视图 六.Model&ORM 七.Admin相关 八.Http协议 九.COOKIE 与 SES ...

  5. Smali相关的基础知识点

    通过本篇博客的学习,相信你可以无压力的读懂Smali语言文件,并可以将Smali还原成java!!! 其实Smali语言并不是很难,如果你有一些汇编指令的基础,学习Smali就更加简单了,有兴趣的可以 ...

  6. linux理论知识点(用于考试)

    ps:为其十天左右的linux培训即将结束了,未雨绸缪,为了更好的通过之后的考试,提前多看些考试题和知识点.这是在chinaunix论坛看到的一个帖子,贴来分享. 原文地址:[http://bbs.c ...

  7. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  8. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  9. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

随机推荐

  1. 【OSX】解决编译AOSP时需要10.5/10.6 SDK下载

    有人遇到的是需要10.6的sdk. 公司网快下载了xcode, 把里面的10.5sdk和10.6sdk拿出来, 一共才一百多兆…… 下载链接: http://pan.baidu.com/s/1gdxG ...

  2. interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...

  3. javaWeb代码工程统计

    直接放在src/test/java包内运行 /** * 代码行数统计 * @author ThinkGem * @version 2014-7-22 */ public class CodeCount ...

  4. [转]谈谈Java中"=="与"equals()"

    equals是Object超类中的一个方法,这个方法的实现就是通过==号实现的,==号比较的是两个对象的地址是否相同,在代码中体现出来就是比较两个对象引用中保存的地址是否相同,==能够判断的只是两个对 ...

  5. 进程间通信IPC-命名管道FIFO

    FIFO又被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而这两个相关的进程还要有一个共同创建了它们的祖先进程,但是FIFO,不相关的进程之间也能交换数据. FIFO是一种文件类型.通过st ...

  6. OpenCV3三种超像素分割算法源码以及效果

    OpenCV3中超像素分割算法SEEDS,SLIC, LSC算法在Contrib包里,需要使用Cmake编译使用.为了方便起见,我将三种算法的源码文件从contrib包里拎了出来,可以直接使用,顺便比 ...

  7. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的 ...

  8. 牛刀小试MySQL--innodb_flush_log_at_trx_commit小结

    参数名:innodb_flush_log_at_trx_commit 参数值: 0 事务提交的时候,不会去刷日志缓存区,也不会立马写入至日志文件中.这种设置最危险.如果数据库挂了且运气不好,数据库的最 ...

  9. 动态规划法(八)最大子数组问题(maximum subarray problem)

    问题简介   本文将介绍计算机算法中的经典问题--最大子数组问题(maximum subarray problem).所谓的最大子数组问题,指的是:给定一个数组A,寻找A的和最大的非空连续子数组.比如 ...

  10. php5.5之后新特性整理

    1 生成器 yield关键字yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php查看文档,能知道yield的一 ...