HTTP协议及服务配置 电玩女神 2022-05-26 00:50 159阅读 0赞 HTTP:hyper text transfer protocol,80/tcp 超文本传输协议 http协议版本: HTTP/0.9:原型版本,功能简陋。仅能实现简单的资源交互,不支持多媒体内容。 HTTP/1.0:第一个广泛使用的版本,支持MIME,从而支持多媒体,但缓存机制设计仍然简陋和薄弱 HTTP/1.1:增强了缓存功能 HTTP/2.0: http是基于tcp完成的协议 一次完整的http请求处理过程: (1)建立或处理连接,接收请求或拒绝请求 (2)接收请求,接收来自于网络的请求报文中对某一资源的一次请求的过程 (3)处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息 (4)访问资源,获取请求报文中请求的资源 (5)构建响应报文,一旦web服务器找到资源,而且这个资源也允许被某个客户端访问,这个 时候它就要能够拿到这个资源,把它封装成一个响应报文,并指明这个资源内部的内容格式发 送给客户端。 (6)发送响应报文 (7)记录日志 httpd的特性: 高度模块化:core+modules 任何一个组件出现问题或者需要升级,它只影响一个模块,而不 会影响整体的代码,任何一个模块崩溃,有可能只需要替换一个模块即可 DSO:Dynamic Shared Object 动态共享对象 MPM:Mutipath Processing Modules:实现多种不同的I/O模型。 Prefork:多进程模型,主进程,生成多个子进程,每个子进程响应一个请求; worker:多线程模式,主进程,生成多个子进程,每个子进程生成多个线程,每个线程响 应一个请求; event:事件驱动模型,主进程,生成多个子进程,每个子进程响应多个请求; I/O类型 同步和异步:synchronous,asynchronous;关注的是消息通知机制 同步:调用发出后不会立即返回,但是一旦返回,则返回的是最终结果。 异步:调用发出后,被调方立即返回消息,但返回并非最终结果,被调用者通过状态,通知 机制等来通知调用者,或通过回调函数来处理结果。 阻塞和非阻塞:block,noblock ;关注的是调用者等待被调用者返回结果时的状态 阻塞:调用结果返回前,调用者被挂起;调用者只有在得到返回结果之后才能继续; 非阻塞:调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者; I/O模型: blocking IO:阻塞式IO noblocking IO:非阻塞IO IO multiplexing:复用型IO signal driven IO:事件驱动式IO 通知: 水平触发:多次通知 边缘触发:只通知一次 asynchronous IO:异步IO 一个进程发起IO调用时,这个IO将由两个阶段组成(一次IO,指的是磁盘IO),第一步:数据 从磁盘到内核内存,第二步:数据从内核内存到进程内存。真正被称为IO是数据从内核内存到进 程内存的过程。 ![这里写图片描述][SouthEast] 实际上,除非特别指定,几乎所有的IO接口 ( 包括socket接口 ) 都是阻塞型的。这给网络编程带来了一个很大的问题,如在调用send()的同时,线程将被阻塞,在此期间,线程将无法执行任何运算或响应任何的网络请求。 程序环境: 配置文件: /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 配置文件组成部分: ~]# grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global Environment ### Section 2: 'Main' server configuration ### Section 3: Virtual Hosts ### 常用配置: ### #### 1 修改监听的IP和PORT #### Listen [IP:]PORT IP可省略,省略表示监听本地所有ip地址;listen可以应用多次 ![这里写图片描述][SouthEast 1] #### 2 持久连接 #### 目前多数的浏览器都请求服务器保持持续连接,这种功能就称为“KeepAlive“,它是HTTP1.1标 准规格,一般是用来强化服务器的性能。在使用保持连接功能时,设置客户一次请求连接能影响 文件的最大上限,建议把默认值设为ON,以便提高访问性能。但当使用负载均衡时,会影响负载 均衡的效果,在未断开连接之前,同一客户端时中被定向至同一台服务器。 Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待 其他的请求完成; KeepAlived On|Off 是否开启持久连接 MaxKeepAliveRequests # 数量限制 KeepAliveTimout # 时间限制 测试: telnet HOST PORT GET /URL HTTP/1.1 Host: HOSTNAME or IP #### 3 MPM 多路处理模块 prefork,worker,event #### http-2.2不支持同时编译多个模块,所以一次编译只能选定一个,rpm安装的包提供 三个二进制执行程序,分别用于实现对不同MPM机制的支持。 <IfModule prefork.c> #判定模块是否存在 StartServers 8 #默认启动的工作进程数;不包括主进程,主进程只是负责子进程的创建回收等 MinSpareServers 5 #最少空闲进程数 MaxSpareServers 20 #最大空闲进程数 ServerLimit 256 #最大活动进程数 MaxClients 256 #并发请求的最大数;请求连接进来不一定会活动,要小与等与ServerLimit MaxRequestsPerChild 4000 #每个进程在生命周期内所能服务的最多的请求个数; </IfModule> <IfModule worker.c> StartServers 4 #启动的子进程的个数 MaxClients 300 #并发请求的最大数 MinSpareThreads 25 #最小空闲线程数 MaxSpareThreads 75 #最大空闲线程数 ThreadsPerChild 25 #每个子进程可生成的线程数 MaxRequestsPerChild 0 #每个子进程在生命周期内所能服务的最多的请求个数,0标示不限定 </IfModule> 默认为/usr/sbin/httpd,其使用prefork。 更换使用的httpd程序: /etc/sysconfig/httpd HTTPD= 重启服务生效; ![这里写图片描述][SouthEast 2] ![这里写图片描述][SouthEast 3] #### 4 DSO模块加载方式 #### 配置指令实现模块加载 LoadModule <mod_name> <mode_path> 模块路径可使用相对地址,相对于ServerRoot(/etc/httpd)指向的路径而言: /etc/httpd/modules/ httpd -M:列出已经装载的所有DSO以及非DSO模块 httpd -l:列出支持使用的非DSO模块 ![这里写图片描述][70] #### 5 定义站点根目录 #### DocumentRoot /path/to/somewhere 文档路径映射: DocumentRoot指向的路径为URL路径的起始位置; DocumentRoot “/var/www/html“ test/index.html --> http://HOST:PORT/test/index.html apache服务器存放页面的路径,默认所有要求提供HTTP服务的连接,都要以这个目录为主目录,默认为/var/www/html #### 6 站点访问控制 #### 可基于两种类型的路径指明对哪些资源进行访问控制 文件系统路径 <Directory ""> </Directory> <FileMatch ""> <FileMatch> URL路径: <Location ""> </Location> ... 访问控制机制: 基于来源地址; 基于帐号; #### 7 Directory中“基于来源地址“实现访问控制 #### (1)Options 所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None All Indexes:缺少指定的默认页面时,允许将目录中所有文件以列表形式返回给用户,危险! Includes:允许是用mod_include模块实现服务器端包含(SSI); FollowSymlinks:允许跟踪符号连接文件; SymlinksIfOwnerMatch:在链接文件属主属组与源文件的属主属组相同时,允许跟随符号连接所指向的原始文件; ExecCGI:允许是用mod_cgi模块执行CGI脚本; MultiViews:允许是用mod_negotiation实现内容协商; None:所有都不启用; All:允许所有; (2)基于来源地址的访问控制机制 Order:检查次序 Order allow,deny Order deny,allow Allow from Deny from 来源地址:IP 或 NetAddr 172.16 | 172.16.0.0 | 172.16.0.0/16 <Directory>可以配置网站目录下的访问属性,使用<Directory ~ "path">可以基于正则表达式的匹配,但是一般不建议使用,会消耗时间。类似的指令还有: <Location [~] "">:配置URL访问属性,与<Directory>相似(可以配置ststus页面或者定义了别名的路径等); <File [~] "">:限制单个文件的访问属性; <locationmatch "">:相当于Location ~,但一般建议使用此配置进行正则匹配; 如果某要配置其属性的URL能映射到某具体文件系统路径,建议使用。 #### 8 定义默认主页面 #### DirectryIndex index.html index.html.var 自左而右,依次匹配 #### 9 日志设定 #### 默认日志目录:/var/log/httpd 错误日志: ErrorLog logs/error_log LogLevel warn debug, info, notice, warn, error, crit, alert, emerg 访问日志: CustomLog logs/access_log_combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined %h:客户端IP地址; %l:Remote logname (from identd, if supplied) -表示为空; %u:Remote user,(from auth;may be bogus if return status (%s) is 401); %t:服务器收到请求的时间; %r:请求报文的道行信息; %>s:响应状态码; %b:响应报文的大小,单位是字节,不包括响应报文首部; "%{Referer}i:请求报文中“referer“首部的值;当前资源的访问入口; "%{User-Agent}i:请求报文中“User-Agent“首部的值,即发出请求用到的应用程序; 详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats #### 10 路径别名 #### DocumentRoot "www/htdocs" http://server1/download/bash-4.4.2-3.el6.x86_64.rpm --> /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm Alias /alias/ "/PATH/TO/SOMEDIR/" 意味着访问http://Server_IP/alias时,其页面文件来自于/PATH/TO/SOMEDIR/这个位置 注意:前后路径要一致,结尾都有“/“或者都没有 Alias /bbs/ "/forum/htdocs" http://server1/bbs/index.html --> /forum/htdocs/index.html #### 11 设定默认字符集 #### AddDefaultCharset UTF-8 GBK,GB2313,GB18030 #### 12 基于用户的访问控制 #### 当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制 认证质询: WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供帐号和密码; 认证: Authorization:客户端用户天如帐号和密码后,再次发送请求报文,认证成功,则服务器发送响应资源 认证类型: basic:明文 digest:消息摘要,hash编程后发送,大多浏览器不支持 安全域:需要用户认证后方能访问的路径; 应该通过名称对其进行标示,并用于告知用户认证的原因; 用户的帐号和密码存储于何处? 虚拟帐号:仅用于访问某服务器时用到的认证标识; 存储: 文本文件;SQL数据库;ldap,nis basic认证: (1)定义安全域 <Directory ""> Options None AllowOverride None AuthType Basic AuthName "STRING" AuthUserFile "/PATH/TO/HTTPD_USERPASSWD_FILE" Require user username1 username2 ... </Directoty> 允许帐号文件中的所有用户登陆访问: Requie valid-user (2)提供帐号和密码存储(文本文件) 使用htpasswd命令进行管理 htpasswd [options] passwordfile username -c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用; -m:md5加密用户密码; -s:sha1加密用户密码; -D:删除指定用户; (3)实现基于组进行认证 <Directory ""> Options None AllowOverride None AuthType Basic AuthName "STRING" AuthUserFile "/PATH/TO/HTTPD_USERPASSWD_FILE" AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" Require group GROUP1 GROUP2 ... </Directoty> 要提供:用户帐号文件和组文件; 组文件:每行定义一个组 **基于用户的访问控制** 1 使用htpasswd命令生成用户认证库; ![这里写图片描述][SouthEast 4] 2 编写配置文件 /etc/httpd/conf/httpd.conf ![这里写图片描述][SouthEast 5] 3 创建安全域,即访问目录。最后重新加载服务即可 ![这里写图片描述][SouthEast 6] **基于组进行认证** 1 使用htpasswd命令生成认证库,同上。创建组文件。 ![这里写图片描述][SouthEast 7] 2 修改配置文件 /etc/httpd/conf/httpd.conf ![这里写图片描述][SouthEast 8] 3 创建安全域,即访问目录。最后重新加载服务即可 ![这里写图片描述][SouthEast 9] #### 13 虚拟主机 #### 即为一个物理服务器提供多个站点。有三种实现方案: 基于ip:为每个虚拟主机准备至少一个ip地址; 基于port:为每个虚拟主机准备至少一个专用port;实践中很少使用; 基于hostname:为每个虚拟主机准备至少一个专用hostname; 注意:一般虚拟主机不要与中心主机混用,所以,要使用虚拟主机,先禁用中心主机; 禁用中心主机:注释DocumentRoot NameVirtualHost *:80 #使用基于域名的虚拟主机时需要启动此项,在httpd-2.4中不需要使用 每个虚拟主机都有专用配置: <VirtualHost "IP:PORT"> ServerName DocumentRoot "" </VirtualHost> **基于ip** 1 分别创建安全域目录,并配置主页面。 2 修改配置文件 /etc/httpd/conf/httpd.conf ![这里写图片描述][70 1] 实验效果:分别输入不同的ip,访问到不同的页面。 ![这里写图片描述][70 2] ![这里写图片描述][70 3] **基于port** 1 创建安全域目录,并配置主页面。 2 修改配置文件 /etc/httpd/conf/httpd.conf ![这里写图片描述][70 4] 实验效果:分别输入ip的不同端口,访问到不同的页面。前提是在listen处打开这个端口。 ![这里写图片描述][70 5] ![这里写图片描述][70 6] **基于域名** 1 创建安全域目录,并配置主页面。 2 修改配置文件 /etc/httpd/conf/httpd.conf 3 注意打开修改NameVirtualHost选项! ![这里写图片描述][70 7] ![这里写图片描述][70 8] 实验效果:分别输入不同域名,访问到不同的页面。访问的主机做好域名解析! ![这里写图片描述][70 9] #### 14 内置的status页面 #### <Location /server-status> SetHandler server-status Order dent,allow Dent from all Allow from 172.25 </Location> 实现:基于帐号实现访问控制 ![这里写图片描述][70 10] [SouthEast]: /images/20220526/91a3e0cad3a94f8382682765d1140804.png [SouthEast 1]: /images/20220526/45c0e991f4e44e1c9c76fe6f78111d91.png [SouthEast 2]: /images/20220526/dad82dc1ec09414e885f0d17484fe3b1.png [SouthEast 3]: /images/20220526/39c00b15a9a441bfb806b5eaa3db2443.png [70]: /images/20220526/3fa53e79955849df981d674ec8222ba3.png [SouthEast 4]: /images/20220526/8873703034934aebb1dd18a006ca6e68.png [SouthEast 5]: /images/20220526/81691d2db1f94f318757c7884ada5985.png [SouthEast 6]: /images/20220526/23412f58d3b84791818f7c6df33d122b.png [SouthEast 7]: /images/20220526/c02683b252d7491f91e01f03f6bb4349.png [SouthEast 8]: /images/20220526/44673aa4972b4203bda91f2fe71ded95.png [SouthEast 9]: /images/20220526/7d54ee4ffe50459389f7955bd3c0ebc4.png [70 1]: /images/20220526/2409cc5bc14746b1a8ba7b69b656c24c.png [70 2]: /images/20220526/9610c04b148b45138f70dd504f8c1616.png [70 3]: /images/20220526/6b58c8fbff194715b7fefff073c91d62.png [70 4]: /images/20220526/5b73a74e6371482cbca94bbf1d5b3470.png [70 5]: /images/20220526/b951efa7cb3942b8949538b635eb28bf.png [70 6]: /images/20220526/e516707548884b0fa0ee71794be9cd63.png [70 7]: /images/20220526/d6843e7d480141c5900dfd24e6e691f8.png [70 8]: /images/20220526/3b4d6cfdccfd4046b1a912fb32953b8e.png [70 9]: /images/20220526/de8c0264ead7406fb05879c32240f583.png [70 10]: /images/20220526/6dbfe67464df472aa93661145b82dc1e.png
还没有评论,来说两句吧...