基于rpm包安装的httpd基础及基本配置

http:hyper text transfer protocol超文本传输协议

一、http简介

我们在浏览网页时,一定见过以html结尾的网页,这里html(hyper text mark language超文本标记语言)是一种编程语言,由html编写出来的文档即为超文本文档。

在早期,http只能传输超文本信息,而不能传输音视频等其他格式的文件,后来http协议中引入了MIME(mutipurpose Internet Mail Extesion)的机制,MIME可以将非文本文件编码成文本文件,并从一方发送到对方,再通过反向还原,将文本还原成非文本文件,简单说来就是基于文本的形式发送非文本数据。所以说现在的http协议已经支持多媒体了。

http是一种无状态连接,就是服务器端无法持续追踪访问者来源,后来引入了URL重写机制和cookie机制,通过此种机制追踪访问者来源。

下面介绍一下http工作原理:

http协议是基于TCP传输的应用层协议,http协议的最主要目的是实现跨主机发送文档。

下图为http协议的简单工作流程:                    

客户端基于http协议向服务器端发送请求,服务器内核收到请求后判断为该主机上web服务进程的请求,如过是,则把请求发送给该进程,然后,运行在服务器端的进程判断客户端请求的文件是什么文件,并从硬盘中调用此文件,封装成http响应报文后,通过网络送达给客户端。所以说,http的工作机制大体上分为http请求(图中123)和http响应(图中456)。

这些请求得来的超文本文件或音视频文件就是我们平常所说的web资源,web服务器就是存放了web资源的服务器,这些资源分为静态文件和动态文件两类:

(1)静态资源:客户端发送请求到服务器端,服务器调用资源直接响应,常见的静态文件格式:.jpg .gif .html .txt .js .mp3等等;

(2)动态资源:服务器端接收到客户端请求,并在服务器端通过特定的响应程序运行后得到某文件,再把这个文件响应给客户端,常见的动态文件格式:.php .jsp。

url(uniform resourcelocator统一资源定位符):用于描述服务某服务器某特定资源的位置(任何资源有且仅有一个位置)。

我们在访问页面的时候,请求的资源貌似仅仅是一个资源,但很多情况下不是这样,因为一个网页中会含有很多图片或一些音视频等等,其中每一个图片就是一个资源,每一个音视频也是一个资源,还可以通过一些其他的方式实现盗链等等。这些资源所在的位置是通过url来定位的。

url的格式:scheme://server:port/path/to/resource

举例:http://www.hao123.com/images/logo.jpg

上述例子中,端口号默认是80端口,/images/logo.jpg对应的是服务器本地的一个路径的图片资源。

一次完整的http请求处理过程分为以下7步:

(1) 建立或处理连接:接收客户端请求或拒绝请求;

(2) 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;

如果多个客户端同时请求服务器,那么就涉及到了服务器的I/O并发响应模型:

1)单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;

举例:两个客户端访问web服务器,该服务器只能接收处理第一个客户端请求,待处理完毕连接断开后,再接收处理第二个客户端的请求。

2)多进程I/O结构:并行启动多个进程,每个进程响应一个请求;(缺点:各个进程间切换消耗的时间长,耗费的内存大,启动进程数量上限较低)

3)复用I/O结构:一个进程响应N个请求;(实现了每个进程可以处理多个请求)

多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

事件驱动:一个进程生成M个进程,每个进程响应N个请求;

4)复用的多进程I/O结构:启动多个(M)进程,每个进程响应M个请求;

(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息;

(4) 访问资源:获取请求报文中请求的资源;

Web服务器负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot,当访问www.hao123.com/images/1.jpg时,/images/1.jpg是在/var/www/html/路径下,所以实际访问的资源就是www.hao123.com所在服务器的/var/www/html/images/1.jpg

(5) 构建响应报文;当web服务器找到资源,将封装此报文并标记报文封装的内容格式或类型

(6) 发送响应报文;

(7) 记录日志;把用户请求资源的结果和时间记录的日志文件中。

http协议所支持的程序:

http是一种协议,需要通过软件来实现,常见的软件有:httpd (apache)、nginx 、lighttpd,但这三种只能响应静态文件,对动态文件束手无策.

http的特性

(1)      高度模块化设计:core+modules,每一个模块单独运作,其工作与否不影响其他模块运行;

(2)      DSO机制:支持动态装卸载;

(3)      MPM机制:多路处理模块;实现多种不同并发响应模型(I/O并发响应模型);

1)prefork:多进程模型,每个进程响应一个请求;(较早期的模型,最大的优势就是非常稳定)

一个主进程,主进程不负责响应请求,只负责监听套接字:负责生成n个子进程,子进程也称为工作进程,负责连接套接字,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

2)worker:多线程模型,每个线程响应一个请求;(类似复用多路I/O模型,由于使用线程响应,相对于prefork模型要轻量些,但并没有显著提升)

一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;m进程,n线程:响应的请求数为m*n

3)event:事件驱动模型,每个线程响应n个请求;

一个主进程:生成m个子进程,每个进程响应n个请求;响应的请求数为m*n

http的功能特性

(1)      支持虚拟主机:基于IP、port、FQDN、CGI(通用网关接口);

(2)      支持正反向代理;

(3)      支持负载均衡;

(4)      支持路径别名;

(5)      支持用户认证机制;

(6)      支持第三方模块;

二、http基本配置及应用

1、安装:

(1)rpm安装

配置好yum仓库后,直接执行命令yum install httpd

安装完成后直接运行即可service httpd start

其中rpm包安装的httpd的默认工作目录(根目录):/etc/httpd

程序环境

配置文件:

主配置文件:/etc/httpd/conf/httpd.conf

分段配置文件:/etc/httpd/conf.d/*.conf

服务脚本:

/etc/rc.d/init.d/httpd

脚本的配置文件:/etc/sysconfig/httpd

模块文件目录:

/etc/httpd/modules(符号链接) -->/usr/lib64/httpd/modules(真正文件目录)

主程序文件:

/usr/sbin/httpd(prefork模型)

/usr/sbin/httpd.worker(worker模型)

/usr/sbin/httpd.event(event模型)

日志文件目录:

/var/log/httpd

access_log:访问日志文件

error_log:错误日志

站点文档目录:

/var/www/html

欢迎页面配置文件

/etc/httpd/conf.d/welcome.conf

下面仔细分析一下httpd的主配置文件/etc/httpd/conf/httpd.conf

首先使用grep命令查看配置文件的总体段落分层;

1)Global Environment全局环境配置

2)‘Main‘server configuration中心服务器配置

3)Virtual Hosts虚拟主机配置

注意:‘Main‘ server configuration和Virtual Hosts不能同时启用,默认启用‘Main‘server

下是几种常见的配置:

1)修改监听地址和端口

在section1中,找到Listen 80的字样

正确用法应该是Listen [IP:]80,省略地址表示监听本机上所有可用的IP地址;

也可使用多个地址和端口,如本机上有两个IP地址172.16.50.2,172.16.50.4,那么此处可写成

表示,监听在这两个地址的80端口上;

也可以使用相同地址和不同端口,如:

用户访问时默认访问服务器的80端口,如需要访问其他端口,要在地址后面加上端口号。

2)持久连接相关配置

首先要明确的是:当用户访问页面时,经过4个步骤:1、DNS解析;2、TCP连接建立;3、传输数据;4、拆除连接

其中只有3是真正获得数据的阶段,其他步骤都有一部分时间浪费。我们知道一个页面上有很多个资源,那访问此页面时就要建立和拆除多个连接,如果只建立一次连接,拆除一次连接(持久连接),而不是每次访问都建立和拆除连接(非持久连接),这样就减少了很多不必要的时间浪费。

持久连接:连接建立后,每个资源获取结束不会断开连接,而继续等待其它资源请求并完成传输,优点是在大量资源传输时提高效率。但如果一直处于连接状态,则会占用带宽。所以,就需要在连接一段时间后断开,这里有两个断开的方式,1、时间;2、请求数量;,这两个值无论那个达到峰值,则此次连接立即断开。缺点是:对并发访问量较大的服务器,开持久连接会有些请求得不到服务。

上图是配置持久连接的相关信息。

3)配置MPM(多路处理模块)

1查看现在是prefork or work or event? vim/etc/sysconfig/httpd

其中,work模块被注释掉了。所以现在使用的是prefork模型,如要使用work模型,直接去掉注释即可。

2用命令查看:httpd –l

3用ps命令查看:确定httpd服务启动后,使用ps –aux查看

上图中结尾都是以httd结尾,而没有.work结尾,则现在使用的是prefork的默认模型

httpd 命令的简单使用方法:httpd –h

图中列出了httpd的一些常见用法。

使用httpd –M查看httpd模块

有很多,不一一列出

上图中标注static的是静态模块,是程序自带的,标注shared的模块可以动态装卸载。

这三种模块的工作模式可以在主配置文件里更改参数vim /etc/httpd/conf/httpd.conf

在section1中,找到如下画面:

# preforkMPM

#StartServers: number of server processes to start

#MinSpareServers: minimum number of server processes which are kept spare

#MaxSpareServers: maximum number of server processes which are kept spare

#ServerLimit: maximum value for MaxClients for the lifetime of the server

#MaxClients: maximum number of server processes allowed to start

#MaxRequestsPerChild: maximum number of requests a server process serves

<IfModuleprefork.c>

StartServers       8      服务启动时默认启动空闲进程数

MinSpareServers    5  最少空闲进程数

MaxSpareServers   20   最大空闲进程数

ServerLimit      256      最多启动的进程数

MaxClients       256   最大客户端并发请求连接数

MaxRequestsPerChild  4000  每个子进程最多响应的请求数

</IfModule>

# workerMPM

#StartServers: initial number of server processes to start

#MaxClients: maximum number of simultaneous client connections

# MinSpareThreads:minimum number of worker threads which are kept spare

#MaxSpareThreads: maximum number of worker threads which are kept spare

#ThreadsPerChild: constant number of worker threads in each server process

#MaxRequestsPerChild: maximum number of requests a server process serves

<IfModuleworker.c>

StartServers         4           启动的子进程数

MaxClients         300        最大并发连接数

MinSpareThreads     25        最少空闲线程数

MaxSpareThreads     75       最大空闲线程数

ThreadsPerChild     25          每个子进程最多生成的线程数

MaxRequestsPerChild  0         每个线程处理的请求数(为0则表示不限制)

</IfModule>

模块的装卸载

在主配置文件中找到LoadModule,开启和关闭只需要在前面加上或删除注释即可。

定义文档页面路径

在配置文件中找到Document Root字样

将/var/www/html替换成想要设定的路径即可。

定义默认的主页面

DirectoryIndexindex.html index.html.var

自左而右,找到首次匹配到的文件;就将其做为默认主页面返回。

路径别名

例:定义Alias /bbs/"/web/bbs/htdocs/"

则访问的URL:http://www.hao123.com/bbs/index.html -->实际上就是访问/web/bbs/htdocs/index.html

配置文件修改位置如下:

基于站点路径访问控制

简单来说就是允许哪些用户或IP地址可以访问页面,哪些用户或IP地址是不可以访问页面的。定义访问控制的方法有两种,一种是通过文件系统路径(Directory)定义的,一种是通过URL路径定义的:

文件系统路径定义的格式:

<Directory"/PATH/TO/SOMEDIR">

...

</Directory>

如上图所示,在Directory定义路径中还有其他选项:

1)Options

Indexes:当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户;非常危险,不建议使用;

FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其它文件时,将直接显示目标文件的内容,一般也不建议使用;

None:none

All:所有的都启用;

2)基于来源地址访问控制(图中Require的选项)

Order:检查次序

OrderAllow Deny:只有明确Allow的来源地址,才允许访问,其它的均为Deny

OrderDeny Allow: 只有明确Deny的来源地址,才禁止访问,其它的均为Allow

Allowfrom:允许访问的来源地址

Denyfrom:拒绝访问的来源地址

from后可跟上的地址格式:

IP地址;

网络地址:以下都表示172.16网段

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

举例:我把/etc/httpd/conf.d/welcome.conf删掉后,就没有欢迎页面了,再在/var/www/html/中添加一个a.html文件,将主配置文件按下面方式设定

由于Options中的Indexes被我去掉了,所以所有主机都访问172.16.50.1时不能直接访问a.html,而是需要输入172.16.50.1/a.html才可以访问,另外访问控制限制了IP地址,所以得到的结果中会看到除了172.16.50.2访问不了,172.16.0.0内的主机都可以访问172.16.50.1的页面。

URL路径定义的格式:

<Location"/URL">

...

</Location>

基于用户的访问控制

通过限制用户的访问权限来控制访问结果,经由质询(提示用户输入账号密码)、认证(客户端输入账号密码后判断是否正确),授权用户通过认证。

http的认证方式有两种:

BASIC基本认证, 基于BASE64编码后发送,但该认证方式中,账号和密码通过铭文发送,较不安全,但常用;

Digest摘要认证,但很多浏览器不支持此中认证方式。

举例:BASIC认证的实现

(1)在/var/www/html下建立一个employee文件夹,并在此文件夹中创建一个html文件,设定employee文件夹基于用户认证的访问控制,在/etc/httpd/conf/httpd.conf中单独顶一个一个Directory

<Directory"/var/www/html/employee">在父域下面单独定义的子域

Options None

AllowOverride None

AuthType Basic认证类型

AuthName "Employee Infomation,only for employee"认证域的名字

AuthUserFile /etc/httpd/users/.htpasswd认证用户账号密码文件(这里的用户是虚拟用户,不是登陆系统的用户)

Require User tom jerry(可填valid-user或user1,user2)

</Directory>

提供用户的账号文件

使用htpasswd –c(创建添加第一个用户时,添加文件) –m(使用MD5格式加密用户密码) –D(删除指定用户) passwdfile username

首先创建目录mkdir/etc/httpd/users –pv

为tom创建用户账号文件htpasswd–c –m /etc/httpd/users/.passwd tom

为jerry创建密码htpasswd–m /etc/httpd/users/.passwd jerry

接下来检查语法错误httpd –t

无问题后启动服务查看效果

success!

一般这种访问机制会对部分路径下的文件进行访问控制,比如,服务器上有三个文件,有两个完全对外开放,一个需要输入用户名密码认证才能访问。这也就是一个安全域。

(2)基于组认证

<Directory"/data/web/html/employee">

Options None

AllowOverride None

AuthType Basic

AuthName "Employee Infomation, only for employee"

AuthUserFile /etc/httpd/users/.htpasswd

AuthGroupFile /etc/httpd/users/.htgroup组文件存放位置

Require group 1组名

</Directory>

提供组文件vim/etc/httpd/users/.htgroup,添加

保存退出,重新载入service httpdreload,打开网页查看效果。

虚拟主机

一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现;

httpd三种类型的虚拟主机:基于IP;基于Port;基于FQDN(最常用的类型);

注意:得首先关闭‘Main‘server,注释DocumentRoot指令即可;

定义虚拟主机:

<VirtualHost"IP:PORT">指明IP地址和端口

ServerName

ServerAlias

DocumentRoot

</VirtualHost>

举例1:定义基于端口的虚拟主机(实现访问一个IP地址的不同端口得到不同的主页)

#<VirtualHost*: 80>基于80端口的所有IP地址

#        ServerName www.a.com主机名称

#        DocumentRoot /vhost/a.com/文档页面路径

#<VirtualHost>

注意:这里定义的端口要在section1中的Listen选项中都监听上才可以!

全部配置完毕后保存退出;

创建htdoc并在其中分别创建页面a.html、b.html,内容分别为www.a.com、www.b.org

重启httpd服务,测试访问

举例2:定义基于IP的虚拟主机(实现访问不同的IP地址得到不同的主页)

由于我们一般的主机上都是一个IP地址,所以首先要给主机添加一个IP地址

接下来就可以更改httpd的配置文件

注意:section1中的Listen改成监听在80端口即可,千万不要忘记!

重新启动httpd服务并测试

举例3:基于FQDN的虚拟主机(实现不同的主机名访问不同的页面)

下面VirtualHost的配置全部配置成一个IP地址,但是最上面的虚拟主机名一定要打开,并修改成响应的IP地址,否则会报错。

这样就可以访问FQDN来访问想得到的主页面了,但是在没有DNS的情况下,需要修改一下/etc/hosts文件

添加:

172.16.50.1     www.a.com

172.16.50.1     www.b.org

更改完毕后重启httpd服务,测试访问

以上为三种类型的实现。^_^三种是可以混用的哦

内置的status页面

是http自带的纯文本的状态页面,记录了连接数,处理的连接数等等信息。

启用status页面就是把Location的所在的内容去掉注释即可,status页面通常作为监控使用,所以要尽量在内网基于IP做访问控制。

保存后重启服务,在指定IP的主机上访问172.16.50.1/server-status即可。

更多问题可查询官方文档来了解http://httpd.apache.org/

以上内容如有偏颇请及时指正。

时间: 2024-11-24 11:14:34

基于rpm包安装的httpd基础及基本配置的相关文章

漫漫运维路——基于rpm包安装实现LAMP

LAMP早期即为Linux+Apache+MySQL+PHP,以基于Linux平台的三个软件搭建出动态网页站点,而现在的LAMP不仅仅代表以上几个软件,因为现在的开源软件种类较多,网站的构建人员的选择也较多,所以现在的M可以为MySQL,也可以为maria DB或者是其他的数据库管理系统.而P则也不仅可代表PHP,在实际应用中还可能是Python.Perl.JSP等语言. 本文将基于rpm包安装的形式实现Linux+Apache+MySQL+PHP的LAMP平台,并且实现以下功能: 1.创建两个

LAMP基于RPM包安装详解

1.LAMP介绍 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.本文所介绍的是Linux+Apache+MariaDB+PHP,基于RPM包安装的部署过程. 2.环境描述 操作系统 IP地址 系统环境 用途 CentOS 7.1 172.18.20.10/16 最小化安装 Web服务器 CentOS 7.1

基于RPM包的LAMP搭建

1.     配置概要: a)      172.16.20.10主机运行httpd+php服务(php为模块工作模式) b)      配置两台虚拟主机:wordpress个人博客系统,PHPmyadmin远程控制mysql c)      172.16.20.11主机运行mariadb服务(mysql) 2.     配置流程: a)      首先配置172.16.20.10主机:http服务 i.         安装程序 1.      #yum install httpd php p

RPM包安装LAMP及httpd虚拟机SSL实现

简单罗列基础命令,只分享我的想法! 目的:通过RPM包安装LAMP,提供两个虚拟主机,一个用于WordPress,一个用于phpMyAdmin,为后一个提供ssl访问方式. 环境是vmware的虚拟机CentOS6.6,实机win7,后面的测试会用到win7上面的浏览器,已经把虚拟机中CentOS中的两个httpd的虚拟机的名字加入到win7的hosts文件中. 1.  修改yum源,指向CentOS的系统光盘,需要使用RPM包,配置如下: 图1 2.  安装apache的httpd,直接yum

CentOS 7中基于rpm包方式安装部署apm(php-fpm) + xcache

CentOS 7, 基于rpm包方式安装部署apm(php-fpm) + xcache:a) httpd, php, mariadb分别部署在一个单独的主机上:b) 一个虚拟主机提供phpMyAdmin,另一个虚拟主机提供wordpress:c) 为phpMyAdmim提供https服务: 一.环境配置:关闭防火墙和设置SELinux:使用httpd+FastCGI的方式实现整合:1.php-5.3.3+版本中才能默认实现:2.httpd支持proxy_fcgi_module,默认httpd-2

LAMP基于RPM包搭建

一:简述 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. HTTP是一个客户端和服务器端请求和应答的标准(TCP).客户端是终端用户,服务器端是网站.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求.(我们称这个客户端)叫用户代理(user agent).应答的服务器上存储着(一些)资源,比如HTML文件和图像.(我们称)这个

CentOS使用yum源中自带的rpm包安装LAMP环境

CentOS使用yum源中自带的rpm包安装LAMP环境.这是Linux下安装LAMP的环境一种最基本最简便的方式.新手可以从容安装使用. 1. 安装基础包(可选安装)yum install -y wget zip unzip gzipyum install -y python ruby perlyum install -y gc gcc gcc-c++ 2. 安装php及其相关组件yum install -y php php-gdyum install -y php-mbstring php-

rpm包安装apache发布多个虚拟主机

今天在单位服务器上用rpm包的方式部署多个服务的时候,出现问题.结果在网上查到了一篇帖子<rpm包安装apache发布多个虚拟主机>,看完这篇帖子之后才知道自己哪些地方配置的时候出现了遗漏.在此摘抄过来,以备自己以后查看.链接地址:http://www.2cto.com/net/201107/96685.html Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.用rpm包安装apac

fedora22用rpm包安装配置postgresql数据库

严格内网环境,无网络连接,新装fedora 22系统,无任何其他配置. 安装 1.安装环境: 操作系统:fedora 22 数据库:postgresql-9.4 安装过程使用root用户 2.安装包: postgresql94-libs-9.4.4-1PGDG.f22.x86_64.rpm postgresql94-9.4.4-1PGDG.f22.x86_64.rpm postgresql94-server-9.4.4-1PGDG.f22.x86_64.rpm 3.严格按照顺序安装: rpm -