CentOS6.5 web-http协议之httpd篇之一

web服务在网络通信中很重要,而我们这里要展示的就是web服务中的重中之重-http协议

在CentOS6.5下,http协议的实现工具叫httpd,我们可以使用命令来查看当前httpd的版本,以及是否在本机上装了httpd服务了。

例如:

[[email protected] conf]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64

这是httpd的2.2.15版本。这个版本的httpd有很多特性,下面用示例陈述:假设我们的环境:一台vmware虚拟主机当做服务器端提供web服务,而我们的客户端模拟使用的是win7

再启动httpd之间,先说下httpd有个主配置文件,定义了httpd很多新特性。由于我们httpd2.2版本,默认定义了两个工作模式,一个是prefork,另一个是worker。

我们可以通过rpm –ql httpd查看httpd程序都生成了什么文件。

[[email protected] conf]# rpm -ql httpd

……

/usr/sbin/httpd(其实它是prefork啦)
/usr/sbin/httpd.event
/usr/sbin/httpd.worker

由于httpd是有工作模式的,必须要知道它以哪种模式工作的,它默认是prefork模式,它还有个worker模式。让我们分别看看配置文件里面它们两个的特性:

(服务器在响应客户端请求之前会预先生成一个类似“进程池 (server-pool)的东西,生成很多子进程,客户端来响应了,我们就从池中调子进程予以响应)

对于prefork模式:该工作模式下,服务器的主进程会fork自身从而产生多个子进程,每个子进程响应一个客户请求。

<IfModule prefork.c>
StartServers       8  服务在开启时,就生成了8个空闲进程
MinSpareServers    5 最少的空闲进程数
MaxSpareServers   20 最大的空闲进程数
ServerLimit      256 最多请求的进程数量

MaxClients       256 服务器同时间可允许的最大客户请求数量
MaxRequestsPerChild  4000  每一个子进程最多处理多少个请求

</IfModule>

对于这个worker模式:在worker工作模式下,每个子进程会生成很多个线程,每个线程请求一个客户请求。

<IfModule worker.c>
StartServers         4 服务器再启动时开启了4个空闲的进程等待客户连接
MaxClients         300 表明允许的同一时刻最大并发用户请求数
MinSpareThreads     25 最小空闲线程数
MaxSpareThreads     75最大空闲线程数
ThreadsPerChild     25 每个子进程可以开启的线程个数

MaxRequestsPerChild  0每个子进程最多响应可以处理多少个请求

由此我们有个大致了解,我们做实验实验下两个工作模式。

实现方式:通过对配置文件重命名的方法来开启工作模式,如:

[[email protected] sbin]# ll /usr/sbin/httpd*
-rwxr-xr-x. 1 root root 354816 Aug 14  2013 /usr/sbin/httpd
-rwxr-xr-x. 1 root root 368168 Aug 14  2013 /usr/sbin/httpd.event
-rwxr-xr-x. 1 root root 367240 Aug 14  2013 /usr/sbin/httpd.worker

现在我们开启httpd服务,查看空闲的进程数:

[[email protected] sbin]# ps aux | grep "httpd*"
root      2843  0.0  1.6 241748  8260 ?        Ss   11:04   0:00 /usr/sbin/httpd
apache    2846  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2847  0.0  0.9 241748  4776 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2848  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2849  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2850  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2851  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2852  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd
apache    2853  0.0  0.9 241748  4772 ?        S    11:04   0:00 /usr/sbin/httpd

root      3550  0.0  0.1 103252   828 pts/1    S+   13:41   0:00 grep httpd*

标记红色斜体的进程正好为8个,对应配置文件默认的开启了8个空闲的进程数。

现在我们切换到httpd.worker工作模式:

先查看下:

[[email protected] sbin]# !ll
ll /usr/sbin/httpd*
-rwxr-xr-x. 1 root root 354816 Aug 14  2013 /usr/sbin/httpd
-rwxr-xr-x. 1 root root 368168 Aug 14  2013 /usr/sbin/httpd.event
-rwxr-xr-x. 1 root root 367240 Aug 14  2013 /usr/sbin/httpd.worker

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

再次重命名文件

[[email protected] sbin]# mv /usr/sbin/httpd  /usr/sbin/httpd.prefork
[[email protected] sbin]# mv /usr/sbin/httpd.event  /usr/sbin/httpd

重启服务

[[email protected] sbin]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

现在我们查看空闲的进程数:

[[email protected] sbin]# !ps
ps aux | grep "httpd*"
root      3578  0.0  0.8 184488  4032 ?        Ss   13:46   0:00 /usr/sbin/httpd
apache    3581  0.0  0.6 528748  3276 ?        Sl   13:46   0:00 /usr/sbin/httpd
apache    3582  0.0  0.6 528748  3284 ?        Sl   13:46   0:00 /usr/sbin/httpd
apache    3583  0.0  0.6 528748  3280 ?        Sl   13:46   0:00 /usr/sbin/httpd
root      3668  0.0  0.1 103252   832 pts/1    S+   13:48   0:00 grep httpd*

加上root用户在80端口开启的监听套接字这个空闲进程,正好4个。

因为httpd服务需要基于套接字文件通信,所以需要ip和端口格式,所以主配置文件也定义了端口的概念,这样可以不通过公认的80端口。

Listen 80
Listen 38080

我这里就定义了一个38080的端口同样给web服务使用,让我们看看实际效果:

[[email protected] sbin]# ss -tnlp | grep "httpd*"
LISTEN     0      128                     :::80                      :::*      users:(("httpd",3805,4),("httpd",3808,4),("httpd",3809,4),("httpd",3810,4),("httpd",3811,4),("httpd",3812,4),("httpd",3813,4),("httpd",3814,4),("httpd",3815,4))
LISTEN     0      128                      :::38080                   :::*      users:(("httpd",3805,6),("httpd",3808,6),("httpd",3809,6),("httpd",3810,6),("httpd",3811,6),("httpd",3812,6),("httpd",3813,6),("httpd",3814,6),("httpd",3815,6))

由于我们的httpd是高度模块化的,能动态加载程序,非常好用!比如:我们想禁掉一个模块的功能,以auth_digest为例,我们来禁掉它。

LoadModule auth_basic_module modules/mod_auth_basic.so

#LoadModule auth_digest_module modules/mod_auth_digest.so

保存并直接查看

[[email protected] ~]# httpd -D DUMP_MODULES | grep "digest"
Syntax OK
[[email protected] ~]# echo $?
1

说明digest模块被我们禁掉了,这里直接注释掉就可以成功,并不需要再次重启服务或重读配置文件。

其实我们的web服务最好不要以root身份直接开启服务,所以配置文件里定义了启动http服务的用户,如下

User apache
Group apache

对应到主机上,看!

apache    3808  0.0  1.1 241880  5564 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3809  0.0  1.1 241880  5564 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3810  0.0  1.1 241748  5444 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3811  0.0  1.1 241748  5444 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3812  0.0  1.1 241748  5444 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3813  0.0  1.1 241880  5564 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3814  0.0  1.1 241748  5440 ?        S    14:00   0:00 /usr/sbin/httpd
apache    3815  0.0  1.1 241748  5444 ?        S    14:00   0:00 /usr/sbin/httpd

我们再次说说web主页的主页地址在哪里,因为我们的环境CentOS6.5这台linux系统主机是提供httpd服务的,所以主页很可能定义到linux下某个目录作为web服务的入口,在配置文件里面写到

DocumentRoot /var/www/html

它定义了web服务的“入口”,假设它在linux主机下有个1.html文件,如果编辑好了该文件,用我们的客户端(win7)访问一定能访问到1.html,对吧,让我们试试:

[[email protected] ~]# ll /var/www/html/1.html
-rw-r--r-- 1 root root 18 Aug  9 14:22 /var/www/html/1.html

[[email protected] ~]# cat /var/www/html/1.html
hellooooooooooooo

让我们的客户请求这个网页

没错吧!

先说下,httpd目录下通常有个index.html,这个页面通常是定义的主页面,如果没有它,服务器会变成一个类似“下载”的页面,让我们看看

[[email protected] ~]# ll /var/www/html/
1.html      c6/         ct6.cfg     hello.html  hi.html     ks.cfg      repodata/   test.html   zabbix/

并没有index.html是吧。让我们的客户端访问它试试:

这个是为什么呢?

其实这个是配置文件里定义了访问机制造成的,在配置文件中有一项规定了默认的DocumentRoot下的页面参数,注意在配置文件的这里,

<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks

主要看Indexes这个参数,如果带上它就会显示上图那样,出现一个下载列表,让你挑选下载,这是不是一个潜在的巨大泄露,通常我们可以去掉这一项,如果去掉,看成什么样子了,如在Indexes前面加一个-字符,这样其实很大程度上保证了安全性。其实我们配置文件在这里就写到了

400 # same purpose, but it is much slower.
401 #
402 DirectoryIndex index.html index.html.var

从这里找index.html作为主页

<Directory "/var/www/html"> 
    Options -Indexes FollowSymLinks

保存并重读配置文件。

哈哈,是不是很神奇!

而这个followSymLinks是什么意思呢,让我们举个例子:

先对根文件目录下的1.html创建一个软链接,格式如下:

[[email protected] html]# ln -sv /tmp/1.html /var/www/html/2014.html
`/var/www/html/2014.html‘ -> `/tmp/1.html‘

然后配置文件中默认开启了FollowSymLinks,则可以通过输入URL http://192.168.1.184/2014.html找到1.html,看:

我们的httpd还有日志功能,日志分两种,一种是错误日志,一种是CustomLog访问日志,而且配置文件都定义了路径在哪里,先看CustomLog的位置

CustomLog logs/access_log combined

还有错误日志的:ErrorLog logs/error_log

lrwxrwxrwx. 1 root root   19 Jun 29 17:21 logs -> ../../var/log/httpd这里其实是一个链接,指向了/var/log/httpd/

[[email protected] logs]# cd /var/log/httpd/
[[email protected] httpd]# ll
total 1348
-rw-r--r-- 1 root root   34583 Aug  9 23:24 access_log
-rw-r--r-- 1 root root    3874 Jul 26 22:07 access_log-20140727
-rw-r--r-- 1 root root 1280638 Jul 30 19:09 access_log-20140803

-rw-r--r-- 1 root root   22171 Aug  9 23:22 error_log
-rw-r--r-- 1 root root    7697 Jul 27 10:20 error_log-20140727
-rw-r--r-- 1 root root   15110 Aug  3 09:48 error_log-20140803

我们的httpd服务还有一个好的功能,可以定义路径别名,随便建立一个目录,把它当做类似前面的“根文件目录”一样。如下,我现在定义个路径别名

在配置文件里添加Alias /music/  "/tmp/music/",然后再在/tmp/music里面创建一个23.html。

[[email protected] music]# cd /tmp/music/
[[email protected] music]# ll
total 4
-rw-r--r-- 1 root root 14 Aug 10 00:10 23.html

[[email protected] music]# cat 23.html
1111111111111

然后我们客户端在浏览器输入:http://192.168.1.184/music/23.html

成功,就不在借助根文件目录。

下一篇我们来介绍更多的新特性!!!!

CentOS6.5 web-http协议之httpd篇之一,布布扣,bubuko.com

时间: 2024-10-25 05:01:56

CentOS6.5 web-http协议之httpd篇之一的相关文章

web工作原理及http协议(基础篇)

web工作原理及http协议(基础篇)1.常见的应用架构(1)C/S?全称client/sever,即客户端/服务器C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,用户表示层,需要程序员自己写客户端:第二层是通过网络结合了数据库服务器,数据库层.(2)B/S?全称Browser/Server,即浏览器/服务器只要有浏览器就可以打开2.WEB工作原理HTTP处理流程:建立连接-->客户端浏览器发送请求信息--->web服务器解析请求并找到

02http协议及httpd基础

http协议及httpd基础 --以下内容摘自马哥教育课堂 HTTP/2.0 目前没有大规模应用 可以查看相关rfc文档 一次完整的http工作过程浅析: (1)处理连接 处理客户端请求--接收/拒绝请求 tcp连接怎么建立--三次握手 tcp连接怎么断开--四次断开 tcp连接有两种,持久连接和非持久连接 tcp连接建立以后,请求第一个资源完成后不会立刻断开,可以基于该连接请求第二个资源,这样可以避免频繁的创建和断开连接 而如果连接建立以后长时间没有传输web资源则会浪费服务器的连接资源,因为

http协议及httpd特性详解

前言 随着互联网的迅猛发展和网络的普及,各类网站层出不穷,网站也成为企业宣传和实力展现的主要途径之一,说到网站就不得不说一下web服务了,现在比较流行的web服务还是当属Apache即httpd.本文将详解http协议及httpd的特性. http协议详解 http协议 http: Hyper Text Transfer Protocol 超文本传输协议 传输文本:HTML html: Hyper Text Mark Language 超文本标记语言 html文档的生成方式 静态:纯html格式

构建安全的Xml Web Service系列之SSL篇

原文:构建安全的Xml Web Service系列之SSL篇 首先介绍一下SSL, SSL 的英文全称是 "Secure Sockets Layer" ,中文名为 "安全套接层协议层 ",它是网景( Netscape )公司提出的基于 WEB 应用的安全协议.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装.压缩.加密等基本功能的支持.SSL是Security Socke

基于Netty的聊天系统(三)协议定制----消息篇

今天我们继续来讨论协议,今天基本就把一对一聊天的协议定制完毕了,上一篇我们讲述了登录的过程,那么登录完毕就是聊天了,首先我们还是以A和B为例子,A发送消息给B,那么这条消息的的协议如下 发送消息协议: {"id":"xxxx","#":"msg","text":"内容","to":"接收用户ID","type":0,"

Centos6.5 x86_64系统安装kvm虚拟机—基础篇

KVM简介: KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机). 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案. 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko). KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面. KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,

基于Netty的聊天系统(二)协议定制----登录篇

上一篇文章我们讨论了聊天的基本流程,那么我们现在基于上一篇文章的流程开始定义协议,如果有朋友有更好的建议,可以在下边回复一起学习讨论,我们说登录分为两部分,第一部分为和服务器的连接阶段,第二部分为验证阶段,那么首先我们基于这2个部分来指定协议: 连接阶段: {"id":"xxxx","#":"conn","u":1[email protected]/ios,"v":100} id:客户端

Java Web HTTP协议的提交方式

TTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式: OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法.也可以利用向Web服务器发送'*'的请求来测试服务器的功能性. HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回.这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息. GET 向特定的资源发出请求.注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web App

黑马程序员 委托模式--类别、协议、Block篇

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>. <a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! ----------------------- 委托模式--类别.协