httpd的安装与使用
引言
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。目前使用的主要有HTTP/1.1、HTTP/2.0版本。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
一次完整的http请求处理过程如下:
(1) 建立或处理连接:接收请求或拒绝请求;
(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;
(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息; (4) 访问资源:获取请求报文中请求的资源;
(5) 构建响应报文:
(6) 发送响应报文:
(7) 记录日志:
web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下;此路径称为DocRoot;实现web服务器的软件有很多,这里仅介绍CentOS6、7自带的httpd2.2、2.4版本软件的安装与使用。
httpd的功能特性有很多,如 CGI:Common Gateway Interface、虚拟主机、反向代理、 负载均衡、路径别名、丰富的用户认证机制、支持第三方模块
下面通过一些实例来展现httpd的安装与使用
1.安装
httpd软件安装可以通过CentOS发行版中自带的rpm包,或通过httpd源码包编译安装。这里使用rpm包安装软件
yum install httpd httpd-tools
安装后可能通过rpm -ql httpd命令来查看都安装哪些文件,CentOS6与7提供的rpm包版本有所不同,安装后的文件也有一些差别。如下:
CentOS 6:httpd-2.2
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:
/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
CentOS 7:httpd-2.4
程序环境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
模块相关的配置文件:
/etc/httpd/conf.modules.d/*.conf
主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换;
日志文件:
/var/log/httpd:
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制与启动:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service
2.配置文件
主配置文件在/etc/httpd/conf/httpd.conf,但2.2版本与2.4版本的配置文件有所不同,2.2版本通过三段来区别配置文件中配置的不同区域,如 ### Section 1: Global Environment为全局环境配置,定义进程的工作特点或对所有的虚拟主机都通用的工作设定;### Section 2: ‘Main’ server configuration为主服务器配置段;### Section 3: Virtual Hosts为虚拟服务器配置。但2.4版本中不再有这样的设置
配置格式:
directive value
directive:不区分字符大小写;
value:为路径时,是否区分字符大小写,取决于文件系统;
3.下面通过一些功能实现来说明配置文件如何使用
修改监听的IP和PORT
格式:Listen [IP-address:]portnumber [protocol]
(1) 省略IP表示为0.0.0.0;
(2) Listen指令可重复出现多次;
(3) 修改监听socket,重启服务进程方可生效;
(4) 限制其必须通过ssl通信时,protocol需要定义为https;
测试:
1.在/etc/httpd/conf/httpd.conf中再加入一条Listen 10080,表示除了监听80端口外,也监听10080端口或在/etc/httpd/conf.d/中添加一个*.conf文件,在文件中加入Listen 10080
2.systemctl restart httpd //重启服务
3.ss -tln //查看是否监听了80和10080两个端口
持久连接(保持连接,长连接)
Persistent Connection:tcp连接建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行;只有当请求超时或超过请求数量时才断开连接
测试:
1.修改/etc/httpd/conf/httpd.conf文件或在/etc/httpd/conf.d/中添加一个*.conf文件,添加或修改如下内容:
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100
2.通过telnet命令测试长连接是否生效
yum install telnet
telnet 192.168.1.2 80
GET /index.html HTTP/1.1
Host: 192.168.1.2
//通过telnet命令连接到服务器,之后用GET方法获取资源,在输入完Host后要按两次回车就会有信息返回,并且不会断开。如果配置文件中的KeepAlive是Off,那么获取到资源后就会断开
MPM:Multipath processing Modules (多路处理模块)
httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;CentOS 6的rpm包为此专门提供了三个应用程序文件,httpd(prefork), httpd.worker, httpd.event,分别用于实现对不同的MPM机制的支持;
MPM有三种模型,如下:
prefork:两级进程模型,父进程管理子进程,每个子进程响应一个请求;
worker:三级模型,父进程管理子进程,子进程通过线程响应用户请求;每线程处理一个用户请求;
event:两级模型,父进程管理子进程,子进程通过event-driven(事件驱动)机制直接响应n个请求;
CentOS6测试2.2版本:
1.查看静态编译的模块:
httpd -l
httpd.worker -l
httpd.event -l
查看静态编译及动态编译的模块:
httpd -M
httpd.worker -M
httpd.event -M
//标记为static为静态,shared为动态模块,动态模块需要通过LoadModule加载才能工作。
2.修改变量为想要启动的模型
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.{worker,event}
//改为httpd.worker或httpd.event
3.重启服务
service httpd restart
4.查看MPM模型
ps aux | grep httpd
//现在httpd应为上面修改后的MPM模型
CentOS7httpd2.4版本
1.修改MPM模型
vim /etc/httpd/conf.modules.d/00-mpm.conf
//此文件中有MPM的三个模型,将要启动的模型去掉注释,并注释掉不启动的模型
2.重启服务
systemctl restart httpd
3.查看现在的MPM模型
httpd -M | grep mpm
定义中心主机的文档页面路径
配置文件中的ServerName是标识当前主机服务于谁的,与真正的主机名无关。如果这条指定未定义,http启动时会反解服务器本地地址。如果不能反解会在启动时提示。
语法格式: ServerName [scheme://]fully-qualified-domain-name[:port]
DoucmentRoot指向的路径为URL路径的起始位置,其相当于站点URL的根路径;默认是/var/www/html/。如URL中访问的/images/logo.jpg实际路径在/var/www/html/images/logo.jpg
CentOS7httpd2.4版本测试:
1.创建目录
mkdir /data/web/www -pv
2.添加一个主页
vim /data/web/www/index.html
//在index.html中输入内容,如Main Server
3.修改配置文件
vim /etc/httpd/conf/httpd.conf
DocumentRoot “/data/web/www”<Directory "/data/web/www">
Require all granted</Directory>
//修改根路径,Require all granted表示允许任何人访问
4.检查语法是否有误
httpd -t
5.重新启动
systemctl restart httpd
CentOS6httpd2.2版本测试:
1.创建目录
mkdir /data/html -pv
2.添加一个主页
vim /data/html/index.html
//在index.html中输入内容,如Main Server
3.修改配置文件
vim /etc/httpd/conf/httpd.conf
DocumentRoot “/data/html”<Directory "/data/html">
Order allow,deny
allow from all</Directory>
//修改根路径,allow from all表示允许任何人访问
4.检查语法是否有误
httpd -t
5.重新启动
systemctl restart httpd
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89606