设为首页 收藏本站
查看: 2981|回复: 0

[经验分享] 基于rpm包安装的httpd基础及基本配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-4 08:34:53 | 显示全部楼层 |阅读模式
                      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协议的简单工作流程:                     wKioL1VvGe2DEUEOAACNp13qKDc389.jpg
客户端基于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
举例:
上述例子中,端口号默认是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,当访问时,/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命令查看配置文件的总体段落分层;
wKioL1VvGh6QxRjPAABaFFAFYcM170.jpg
1)Global Environment全局环境配置
2)'Main'server configuration中心服务器配置
3)Virtual Hosts虚拟主机配置
注意:'Main' server configuration和Virtual Hosts不能同时启用,默认启用'Main'server
下是几种常见的配置:
1)修改监听地址和端口
在section1中,找到Listen 80的字样
wKiom1VvGJbDfIz2AAAW4cQPQmY680.jpg
正确用法应该是Listen [IP:]80,省略地址表示监听本机上所有可用的IP地址;
也可使用多个地址和端口,如本机上有两个IP地址172.16.50.2,172.16.50.4,那么此处可写成
wKioL1VvGkSRnFodAAAvLsi9wvw766.jpg 表示,监听在这两个地址的80端口上;
也可以使用相同地址和不同端口,如:
wKiom1VvGLuSdUDnAAAdIIZYfCc629.jpg
用户访问时默认访问服务器的80端口,如需要访问其他端口,要在地址后面加上端口号。
2)持久连接相关配置
首先要明确的是:当用户访问页面时,经过4个步骤:1、DNS解析;2、TCP连接建立;3、传输数据;4、拆除连接
其中只有3是真正获得数据的阶段,其他步骤都有一部分时间浪费。我们知道一个页面上有很多个资源,那访问此页面时就要建立和拆除多个连接,如果只建立一次连接,拆除一次连接(持久连接),而不是每次访问都建立和拆除连接(非持久连接),这样就减少了很多不必要的时间浪费。
持久连接:连接建立后,每个资源获取结束不会断开连接,而继续等待其它资源请求并完成传输,优点是在大量资源传输时提高效率。但如果一直处于连接状态,则会占用带宽。所以,就需要在连接一段时间后断开,这里有两个断开的方式,1、时间;2、请求数量;,这两个值无论那个达到峰值,则此次连接立即断开。缺点是:对并发访问量较大的服务器,开持久连接会有些请求得不到服务。
wKioL1VvGmrSJrtoAAEfQDq_Jew131.jpg
上图是配置持久连接的相关信息。

3)配置MPM(多路处理模块)
1查看现在是prefork or work or event? vim/etc/sysconfig/httpd
wKiom1VvGOOws6yuAAAT3UOQDJo248.jpg
其中,work模块被注释掉了。所以现在使用的是prefork模型,如要使用work模型,直接去掉注释即可。
2用命令查看:httpd –l
wKioL1VvGo-iCO72AABGqhNyyJM890.jpg
3用ps命令查看:确定httpd服务启动后,使用ps –aux查看
wKioL1VvGqXiWtN7AAEb8l0kkAQ381.jpg
上图中结尾都是以httd结尾,而没有.work结尾,则现在使用的是prefork的默认模型

httpd 命令的简单使用方法:httpd –h
wKiom1VvGSDDhgTJAAG6cULzrmE339.jpg
图中列出了httpd的一些常见用法。
使用httpd –M查看httpd模块
wKioL1VvGs_S1lthAAAmvKpw3Pw524.jpg 有很多,不一一列出
上图中标注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字样
wKiom1VvGUzS5qu_AACElBIH09U908.jpg
将/var/www/html替换成想要设定的路径即可。

定义默认的主页面
wKioL1VvGvzg8CvbAACepwqCUqw200.jpg
         DirectoryIndexindex.html index.html.var
         自左而右,找到首次匹配到的文件;就将其做为默认主页面返回。

路径别名
例:定义Alias /bbs/"/web/bbs/htdocs/"
         则访问的URL:http://www.hao123.com/bbs/index.html -->实际上就是访问/web/bbs/htdocs/index.html
配置文件修改位置如下:
wKiom1VvGYWCOqTBAAEnLVSebQw170.jpg
基于站点路径访问控制
简单来说就是允许哪些用户或IP地址可以访问页面,哪些用户或IP地址是不可以访问页面的。定义访问控制的方法有两种,一种是通过文件系统路径(Directory)定义的,一种是通过URL路径定义的:
文件系统路径定义的格式:
                   <Directory"/PATH/TO/SOMEDIR">
                                     ...
                   </Directory>
wKioL1VvGzyRw2UCAAGWyrh9RoI197.jpg
如上图所示,在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文件,将主配置文件按下面方式设定
wKioL1VvG5nxuD7aAAGwYOcO9fw451.jpg
由于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
wKiom1VvGi_AFAcrAACIE9X5-eg898.jpg
<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
wKioL1VvG-Kjtl7-AACJfDWb1Aw317.jpg
接下来检查语法错误httpd –t
无问题后启动服务查看效果
wKioL1VvG_mx2OMSAADZeNjGdWk694.jpg success!
一般这种访问机制会对部分路径下的文件进行访问控制,比如,服务器上有三个文件,有两个完全对外开放,一个需要输入用户名密码认证才能访问。这也就是一个安全域。
(2)基于组认证
wKiom1VvGnaxOsVkAACetwp7SlE769.jpg
<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,添加
wKioL1VvHCTTZEABAAAKZLl4pa8835.jpg
保存退出,重新载入service httpdreload,打开网页查看效果。
虚拟主机
一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现;
httpd三种类型的虚拟主机:基于IP;基于Port;基于FQDN(最常用的类型);
注意:得首先关闭'Main'server,注释DocumentRoot指令即可;
定义虚拟主机:
<VirtualHost"IP:PORT">指明IP地址和端口
         ServerName
         ServerAlias
         DocumentRoot
</VirtualHost>
举例1:定义基于端口的虚拟主机(实现访问一个IP地址的不同端口得到不同的主页)
wKiom1VvGpmBxFmsAABjtl6o7c0285.jpg
#<VirtualHost*: 80>基于80端口的所有IP地址
#        ServerName www.a.com主机名称
#        DocumentRoot /vhost/a.com/文档页面路径
#<VirtualHost>
注意:这里定义的端口要在section1中的Listen选项中都监听上才可以!
wKiom1VvGq3RKETyAAAPQpTWN8g897.jpg
全部配置完毕后保存退出;
创建htdoc并在其中分别创建页面a.html、b.html,内容分别为www.a.comwww.b.org
wKioL1VvHFrx16_wAAB_QdJbC3k696.jpg
重启httpd服务,测试访问
wKiom1VvGs-ConCWAACTUnk0oX0944.jpg
举例2:定义基于IP的虚拟主机(实现访问不同的IP地址得到不同的主页)
由于我们一般的主机上都是一个IP地址,所以首先要给主机添加一个IP地址
wKioL1VvHI2i0zS6AAHHh8Hnfvw554.jpg
接下来就可以更改httpd的配置文件
wKioL1VvHKPhgPydAAB1Lc41ZRU543.jpg
注意:section1中的Listen改成监听在80端口即可,千万不要忘记!
重新启动httpd服务并测试
wKioL1VvHLLzeDyUAADKqf33pXs598.jpg
举例3:基于FQDN的虚拟主机(实现不同的主机名访问不同的页面)
wKiom1VvGyfiS49SAAGxVun6V4g659.jpg
下面VirtualHost的配置全部配置成一个IP地址,但是最上面的虚拟主机名一定要打开,并修改成响应的IP地址,否则会报错。
这样就可以访问FQDN来访问想得到的主页面了,但是在没有DNS的情况下,需要修改一下/etc/hosts文件
添加:
172.16.50.1     www.a.com
172.16.50.1     www.b.org
更改完毕后重启httpd服务,测试访问
wKioL1VvHOiR0C7ZAAChTFmPSEs583.jpg
以上为三种类型的实现。^_^三种是可以混用的哦
内置的status页面
是http自带的纯文本的状态页面,记录了连接数,处理的连接数等等信息。
启用status页面就是把Location的所在的内容去掉注释即可,status页面通常作为监控使用,所以要尽量在内网基于IP做访问控制。
wKiom1VvG2HAkbKyAACknPASVwY157.jpg
保存后重启服务,在指定IP的主机上访问172.16.50.1/server-status即可。

更多问题可查询官方文档来了解http://httpd.apache.org/
以上内容如有偏颇请及时指正。
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-73662-1-1.html 上篇帖子: [RHEL7.1]重新封装系统(制作模板) 下篇帖子: [RHEL7.1]sed的用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表