Web Service 之 http基础原理

========================================================================

概述:

    本篇主要介绍web服务中的http的基础及相关安装和配置

========================================================================

网络通信基础

进程间通信:IPC

  • Socket(套接字):ip:port

Client <--> Server

  • Server:listen(监听状态,表示服务器正在等待新的传输链接进入)

  • Client:

客户端与服务器间通信实际上是客户端套接字和服务器端套接字间通信

  • IP:PORT(Clint) <--> IP:PORT(Server)

IANA定义的服务所使用的port(端口)信息:

0-1023:

  • 永久地分配给固定的应用使用,80/http, 443/https,21/ftp, 25/smtp, 110/pop3, 143/imap4;

  • 仅root有权限使用,特权端口。并且这些默认的端口是可以省略的,协议自身会去识别;

1024-41951:

  • 注册端口,但不严格,3306/mysql, 11211/memcached,

41952+:

  • 客户端程序使用的随机端口,动态端口,或称为私有端口;

  • 范围定义在:/proc/sys/net/ipv4/ip_local_port_range

BSD Socket :

  • IPC的一种实现,允许位于不同主机(也可以是同一主机)上进程间的通信;

Socket API(封装了内核中的socket通信相关的系统调用)

  • SOCK_STREAM:tcp套接字 

  • SOCK_DGRAM: UDP套接字

  • SOCK_RAW :  raw(裸)套接字(应用层直接发往IP层中间不经过传输层)

根据套接字所使用的地址格式:Socket Domain

  •  IPv4:AF_INET

  •  IPv6:AF_INET6

  • Unix_Sock:AF_UNIX(不使用地址加端口这种方式进行通信,而是使用一个文件进行通信)

TCP FSM(有限状态机)

Web Service 之 http(一)_第1张图片

TCP协议的特性:

  • 建立链接:三次握手;

  • 将数据打包成段:校验和(CRC32)

  • 确认、重传及超时;

  • 排序:逻辑序号;

  • 流量控制:滑动窗口算法;

  • 拥塞控制:慢启动和拥塞避免算法

http协议

 1.相关介绍

http协议是一种应用层协议,80/tcp,

核心作用:解决超文本传输

协议版本:

  • http/0.9:原型版本,功能简陋;

  • http/1.0:Cache,MIME,method

            MIME: multipurpose internet mail extension(多用途互联网邮件扩展协议)

            method(资源的传递方法):GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

  • http/1.1:缓存功能,条件式请求

           speedy:SPDY

  • http/2.0

           rfc

html:hyper text mark language  编程语言,超文本标记语言

  • HTML是一种纯文字的文本信息,通过所谓的标签来规范所要显示的内容格式,在客户端通过浏览器可以对HTML及多媒体资源进行解析,然后呈现在各个终端之上。

格式:

  • 分两部分:

Web Service 之 http(一)_第2张图片

注意:

  • http是一种协议,而html是一种语言,是两种不同的东西;但二者又有联系,即:http协议是用来传送html这种语言开发的文档的。

  • http协议除了传送html之外还可以传送css,js,p_w_picpath...

             css:Cascading Style Sheet(层叠样式表)

             js:java Script:客户端脚本

  • 类型数据 (通过MIME识别数据传送的类型)

      major/minor:(主/次类型)

             p_w_picpaths/(p_w_picpaths/jpeg, p_w_picpaths/png, p_w_picpaths/gif, ...)

             text/(text/plain, text/html, text/js, ...)

             application/

              ...

http协议的实现(开源实现)

常见服务器程序

  • httpd(apache)

  • nginx

  • lighttpd      

web服务器的工作是基于C/S结构的

C: browser(浏览器), user agent(用户代理) 

  • 图形化的浏览器:chrome,ie,firefox,safari, opera, ...

  • 文本的浏览器:elinks,curl,wget ...

  • S:httpd(apache), nginx,lighttpd, ...

通信模型:

请求/响应

  • stateless(无状态协议):任何请求和访问之间没有任何关系;

  • cookie机制:追踪用户身份

http协议的主要特点:

支持客户/服务器模式;

简单快速

  • 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有:GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快;

灵活

  • HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记;

无连接

  • 无连接的含义是限制每次连接只处理一个请求服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间;

无状态

  • HTTP协议是无状态协议。无状态协议是指对于事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时他的应答就较快。    

 2.一次完整的http请求的处理过程

过程如下:

 1)建立或处理连接请求;

 2)接受请求;

 3)解析请求,处理请求;

 4)加载用户请求的资源;

 5)构建响应报文;

 6)发送响应报文;

 7)记录日志信息。

接受请求的模型

并发访问响应模型(Web I/O)

单进程I/O模型:

  • 启动一个进程处理用户请求;这意味着一次只能处理一个请求;多个请求被串行响应;

多进程I/O结构:

  • 并行启动多个进程,每个进程响应一个请求;

复用I/O结构:一个进程响应n个请求;

  • 多线程模式:一个进程生成n个线程,每个线程响应一个用户请求;

  • 事件驱动(event-driven):一个进程直接n个请求;

复用多进程I/O结构:

  • 启动多个(m)进程,每个进程响应n个请求;

  • 响应的请求数量:m*n

处理请求:

  • 对请求报文进行解析,并获取请求的资源及请求的方法等相关信息,解析后的报文信息首部称为元数据。

http协议:

  • http请求报文的首部

  • http响应报文的首部

请求报文首部格式:

       

         HEADERS:(name:value)

       

资源传递的方法(method)

  • GET:从服务器获取一个资源;

  • HEAD:只从服务器获取文档的响应首部;

  • POST向服务器发送要处理的数据;

  • PUT:将请求的主体部分存储在服务器上;

  • DELETE:请求删除服务器上指定的文档;

  • TRACE:追踪请求到达服务器上中间经过的代理服务器;

  • OPTIONS:请求服务器返回对指定资源支持使用的请求方法;

访问资源:获取请求报文中请求的资源。    

web服务器      

  • web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或者运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot(发布目录)

            如: /var/www/html其中有个子目录及文件 /p_w_picpaths/logo.jgp,

                   那么其对应的URL为: http://www.magedu.com/p_w_picpaths/logo.jgp

web服务器的资源路径映射方式:

  • docroot:发布目录;

  • alias:路径别名;

  • 虚拟主机docroot:虚拟主机的发布目录;

  • 用户家目录docroot:系统用户的家目录;   

Web Service 之 http(一)_第3张图片


事务:request 和 response

  • 服务器在接受请求和解释请求消息后,会像客户端返回一个HTTP响应消息,因此HTTP是存在事务的,也就是说HTTP有请求(request)报文和响应(response)报文。

Web Service 之 http(一)_第4张图片

  请求方法,标明客户端希望服务器对资源执行的动作,

  • 就是上面说的:GET,HEAD,POST, PUT, DELETE, OPTIONS, TRACE, ...

 三位数字,如200,301,302,404,502;标记请求处理过程中发生的情况

  • 1xx:信息提示

  • 2xx:成功响应

  • 3xx:重定向响应

  • 4xx:客户端错误

  • 5xx:服务器端错误

HEADERS:

  • 每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值,即:Name:Value 格式。如下图所示:

打开浏览器,按F12就可进入

Web Service 之 http(一)_第5张图片

version:

  • HTTP/.HTTP的版本号;

reason-phrase:

  • 状态码所标记的状态的简要描述; 

entity-body:

  • 请求是附加的数据或响应时附加的数据  

httpd(httpd是著名的http协议的实现

 1.介绍及基础配置

httpd

  • httpd早期叫做apache--a patchy server=apache,属于Apache软件基金会(ASF:apache software foundation)的一个项目,后来apache更名为httpd,因此这样更符合http server这个含义了。 

httpd官方站点:

  • http://httpd.apache.org  

http所具有的特性

高度模块化设计:

  • core  modules + standard modules  + 3rd party module

动态链接库 DSO: 

  • Dynamic Shared Object

多模块处理 MPM:multipath process modules 

preforkprocess

  • 多进程模型,每进程响应一个请求; 

  • (两级架构:主控进程接受请求,子进程响应请求)

worker:thread

  • 多线程模型,每线程响应一个请求;

  • (为三级结构,主进程生成子进程,子进程生成线程) 

event:thread

  • 事件驱动模型,每线程响应n个请求; 

Web Service 之 http(一)_第6张图片

httpd的功能特性:

  • CGI:通用网关接口,可实现动态网站;

  • 虚拟主机:IP,PORT,ServerName

  • 反向代理:http, fcgi, wsgi, ajp, ...

  • 负载均衡:

  • 路径别名;

  • 丰富的用户认证机制,如:basic和digest

  • 支持第三方模块

     ...

httpd的版本

      httpd-1.x

      httpd-2.0

      httpd-2.2 CentOS 6

      httpd-2.4 CentOS 7

安装使用httpd

  • httpd的安装和其他软件安装方式一样,可以通过rpm包和源码编译的方式进行安装

  • rpm包的方式可通过yum命令来进行:# yum install httpd -y

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

注意:

  • 我们在安装时首选base源(如阿里云中centos的os),其次选择epel源

[root@centos7 ~]# yum info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 40.el7.centos
Size        : 9.4 M
Repo        : installed
From repo   : base
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and
            : extensible web server.

程序环境以CentOS 7为例 即:httpd 2.4版本

主程序文件:

  • /usr/sbin/httpd

模块文件:

  • /usr/lib64/httpd/modules/*.so

主配置文件:

  • /etc/httpd/conf/httpd.conf

  • /etc/httpd/conf.d/*.conf

  • /etc/httpd/conf.modules.d/*.conf 

站点文档路径:

  • /var/www/html

日志文件路径:

  • /var/log/httpd/

         access_log:访问日志

         error_log:错误日志

Unit File:

  • /usr/lib/systemd/system/httpd.service

自带脚本:

  • /usr/sbin/apachectl

启动http服务,检查端口,及配置相关文件

启动http服务:

  • # systemctl start httpd.service

使http服务开机自启:

  • # systemctl enable httpd.service 

检测是否监听在80端口

  • # ss -tnlp | grep ":80\>"

[root@centos7 ~]# systemctl start httpd
[root@centos7  ~]# ss -tnl |grep ":80\>"
LISTEN     0      128         :::80                      :::*  

[root@centos7 ~]# ps aux # 查看进程是否有httpd
apache     1769  0.0  0.6 228364  6332 ?        S    16:34   0:00 /usr/sbin/httpd -DFOREGROUND
apache     1770  0.0  0.6 228364  6332 ?        S    16:34   0:00 /usr/sbin/httpd -DFOREGROUND
apache     1771  0.0  0.6 228364  6332 ?        S    16:34   0:00 /usr/sbin/httpd -DFOREGROUND
apache     1772  0.0  0.6 228364  6332 ?        S    16:34   0:00 /usr/sbin/httpd -DFOREGROUND
apache     1773  0.0  0.6 228364  6332 ?        S    16:34   0:00 /usr/sbin/httpd -DFOREGROUND

1.启动完成之后我们就可以在浏览器中输入IP地址打开http服务,如下:

Web Service 之 http(一)_第7张图片


2.如上图,首次打开是一个测试页面,我们需要在配置文件(/etc/httpd/conf.d)中把welcome.conf修改成不易.conf结尾即可,然后重载

[root@centos7 ~]# cd /etc/httpd/conf.d  
[root@centos7 conf.d]# ls
autoindex.conf  README  userdir.conf  welcome.conf
[root@centos7 conf.d]# mv welcome.conf {,.bak}  # 修改为.bak结尾
[root@centos7 conf.d]# ll
total 16
-rw-r--r-- 1 root root 2926 Nov 20  2015 autoindex.conf
-rw-r--r-- 1 root root  366 Nov 20  2015 README
-rw-r--r-- 1 root root 1252 Nov 20  2015 userdir.conf
-rw-r--r-- 1 root root  824 Nov 20  2015 welcome.conf.bak
 
[root@centos7 conf.d]# systemctl reload httpd.service # 重载

3.重新刷新之后如下图:

Web Service 之 http(一)_第8张图片4.接下来我们就可以编辑 /var/www/html 文件自己提供一个网页文件了

[root@centos7 ~]# vim /var/www/html/test.html # 编辑文件,新建一个test.html的网页
  1 
  2       
  3            Test Page
  4             
  5       
  6            

My Test Page

  7          8 

 再次刷新如下:

Web Service 之 http(一)_第9张图片


 如上,我们就完成了一些基本的配置...

httpd-2.4基础配置

 1.定制http服务的工作特性

配置文件

  • /etc/httpd/conf/httpd.conf

  • /etc/httpd/conf.d/*.conf

  • /etc/httpd/conf.modules.d/*.conf

可以修改这些以.conf结尾的配置文件来完成配置,也可以自己手动添加以.conf结尾的配置文件完成相应的配置 

配置文件语法格式:

  • DIRECTIVE  VALUE

DIRECTIVE(指令):

  • 不区分字符大小写;例如ServerRoot;

VALUE(值):

  • 除了文件系统路径,大多数也不区分字符大小写;

 通过grep命令来获取配置文件分哪些段落:(CentOS 6)

[root@CentOS6 ~]# grep "Section" /etc/httpd/conf/httpd.conf 
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts

注意:

  • 'Main' server(中心主机)和Virtual Hosts(虚拟主机)不能同时启用;默认启用的是'Main' server,但如果使用虚拟主机,中心主机就会自动失效

配置修改完成后:

测试语法;

  • # httpd -t

让服务程序重载配置文件:

  • # service httpd reload

  • # systemctl  reload  httpd.service 

 2.http常见配置的修改

指定监听地址和端口

格式:Listen [IP:]port

  • Listen指令可以重复使用多次,用于指明多个不同的监听端口或套接字;

  • IP省略时表示监听本机上所有可用的IP地址;

示例:  

[root@centos7 ~]# cd /etc/httpd/  # 进入主配置文件
[root@centos7 httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@centos7 httpd]# cp conf/httpd.conf{,.bak}  # 为了保证之后可以还原,首先备份
[root@centos7 httpd]# cd conf
[root@centos7 conf]# ls
httpd.conf  httpd.conf.bak # 备份的文件 magic
[root@centos7 conf]# cd ..
[root@centos7 httpd]# vim conf/httpd.conf # 编辑配置文件

Web Service 之 http(一)_第10张图片  保存退出后并重载:systemctl reload httpd

 查看端口如下:

[root@centos7 ~]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6010                                                                *:*                  
LISTEN      0      128                                                    :::8080                                                               :::*                  
LISTEN      0      128                                                    :::80                                                                 :::*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      128                                                    :::8088                                                               :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6010                                                               :::*                  
[root@centos7 ~]#

注意:

  • 在使用浏览器访问时,默认的是80端口,所以不用输入端口地址,但如果访问非标准端口就要输入端口

Web Service 之 http(一)_第11张图片  

 3.保持链接

持久连接persistent connection:

  • tcp连接建立后,资源获取完成之后不会断开连接,而是继续等待请求其它资源;

如何断开?

  • 数量限制

  • 时间限制

保持连接相关的参数:

  • KeepAlive On|Off

  • MaxKeepAliveRequests 100 (表示一次请求连接最多允许请求多少个资源)

  • KeepAliveTimeout 10 (表示持久时长为10秒钟,也可以定义毫秒)

可以通过telnet命令来进行保持连接的测试      

测试保持连接:

[root@centos7 ~]# telnet 10.1.252.161 80
Trying 10.1.252.161...
Connected to 10.1.252.161.
Escape character is '^]'.
GET /test.html HTTP/1.1  # 获取的资源
Host:10.1.252.161        # 服务器主机
                         # 这里要再敲一次回车换行
HTTP/1.1 200 OK
Date: Sat, 08 Oct 2016 11:56:52 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sat, 08 Oct 2016 09:00:41 GMT
ETag: "8b-53e56c2e88652"
Accept-Ranges: bytes
Content-Length: 139
Content-Type: text/html; charset=UTF-8


      
           Test Page
      
      
           

My Test Page

       Connection closed by foreign host.

 1.关闭保持连接

# 在/etc/httpd/conf.d下添加一个以.conf结尾的文件,并写上KeepAlive Off即可
[root@centos7 httpd]# vim conf.d/keepalive.conf  
 KeepAlive Off
[root@centos7 httpd]# systemctl reload httpd

2.定义数量限制和时间限制

 [root@centos7 httpd]# vim conf.d/keepalive.conf
  1 KeepAlive On
  2 MaxKeepAliveRequests 20
  3 KeepAliveTimeout 5
 [root@centos7 httpd]#  systemctl reload httpd

 4.DSO机制

DSO:配置指令模块加载,卸载

httpd命令:获取模块

  • -t -D DUMP_MODULES : show all loaded modules

  • -M : a synonym for -t -D DUMP_MODULES (表示查看已装载的模块)

加载模块,格式如下:

  • LoadModule  mod_name  modules/mod_file_name

  • 如果某个模块不想用的话,只需要注释掉即可

相对路径

  • 相对于ServerRoot指令的值来说:/etc/httpd/

[root@centos7 httpd]# ll
total 0
drwxr-xr-x 2 root root  56 Oct  8 19:11 conf
drwxr-xr-x 2 root root 103 Oct  8 20:10 conf.d
drwxr-xr-x 2 root root 139 Oct  8 20:28 conf.modules.d
lrwxrwxrwx 1 root root  19 Aug 25 14:37 logs -> ../../var/log/httpd  # 软链接
lrwxrwxrwx 1 root root  29 Aug 25 14:37 modules -> ../../usr/lib64/httpd/modules # 软链接

修改完之后要重载:

  • # systemctl reload httpd

演示:

1.注释掉不需要的模块 文件:/etc/httpd/conf.modules.d/00-base.conf

[root@centos7 httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run
[root@centos7 httpd]# cd conf.modules.d/
[root@centos7 conf.modules.d]# ls
00-base.conf  00-dav.conf  00-lua.conf  00-mpm.conf  00-proxy.conf  00-systemd.conf  01-cgi.conf
[root@centos7 conf.modules.d]# vim 00-base.conf 
LoadModule substitute_module modules/mod_substitute.so
 57 LoadModule suexec_module modules/mod_suexec.so
 58 LoadModule unique_id_module modules/mod_unique_id.so
 59 LoadModule unixd_module modules/mod_unixd.so
 60 LoadModule userdir_module modules/mod_userdir.so
 61 LoadModule version_module modules/mod_version.so
 62 LoadModule vhost_alias_module modules/mod_vhost_alias.so
 63 
 64 #LoadModule buffer_module modules/mod_buffer.so
 65 #LoadModule watchdog_module modules/mod_watchdog.so
 66 #LoadModule heartbeat_module modules/mod_heartbeat.so
[root@centos7 httpd]#  systemctl reload httpd

 4.定义站点默认的主页面

用法:

  • 可以定义多个值,自左向右,找到首次匹配到的文件,就将其作为默认主页面返回;

格式:

  • DirectoryIndex filename1 filename2 ...  例如:DirectoryIndex index.php index.html 

注意:

  • 这里的默认主页面对应的文件名格式必须为 index.php,index.html 才可以自左向右检索默认主页面。

演示:

在/etc/httpd/conf/httpd.conf中修改添加

Web Service 之 http(一)_第12张图片


 5.Main Server 中心服务器相关配置

DocumentRoot 指令,站点文档访问路径

  • 文档路径的映射;

  • DocumentRoot 指向的路径为URL起始的位置

Web Service 之 http(一)_第13张图片

ServerName 服务器名称

站点文档访问授权

Web Service 之 http(一)_第14张图片


基于URL进行:

  • 提供了基于URL的访问控制。与指令类似,它也会启用一个以结尾的配置段。配置段的处理位于, .htaccess, 之后,并依照在配置文件中出现的顺序进行处理。

  • 配置段完全独立于文件系统之外操作这有几个重要的后果。最重要的是不能用于针对文件系统的访问控制。因为可能会有几个不同的URL指向文件系统中的同一个文件,所以这样的控制常常会被很容易的绕过。

  • 使用来将指令应用于独立于文件系统之外的内容。文件系统之内的内容请使用指令。不过一个例外是 ,它可以方便的作用于所用URL

  • 所有的原始(非代理)请求来说,匹配的URL应该是具有"/path/"形式的URL路径。不包括访问方法、主机名、端口或查询字符串等。对于代理的请求,匹配的URL必须为"scheme://servername/path"的形式,而且必须包括前缀

演示: 

  在真正的生产环境中,网页文件并不一定放置在/var/www/html中,很有可能是自己规划的一个专用位置,怎么实现呢?只需修改DocumentRoot即可,如下:

  1.首先修改/etc/httpd/conf/httpd.conf中DocumentRoot 指向的站点文档

Web Service 之 http(一)_第15张图片 2.创建相关目录和文件

[root@centos7 httpd]# mkdir -pv /web/htdocs  # 在根下创建指定目录
mkdir: created directory ‘/web’
mkdir: created directory ‘/web/htdocs’

[root@centos7 ~]# ls /web/  # 创建的目录已经生成
htdocs

[root@centos7 ~]# vim /web/htdocs/test.html # 创建html文件
/web/htdocs/test.html   # 随便添加一行

[root@centos7 ~]# systemctl reload httpd # 重载

 刷新页面如下:

Web Service 之 http(一)_第16张图片

  3.我们需要对站点文档访问授权,站点路径和访问授权路径必须要相同

Web Service 之 http(一)_第17张图片    重新加载后刷新页面,如下,访问成功

Web Service 之 http(一)_第18张图片 6.Directory中的访问控制定义

Options:定义页面资源的服务方式

  • None:所有的都不启用

  • All:所有的都启用    

Indexes:索引

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

FollowSymLinks: 

  • 允许跟踪符号链接,建议关闭

示例如下:

# 在/var/www/html中创建一个文件的软链接
[root@centos7 conf]# ln -sv /etc/fstab /var/www/html/fstab.html  
‘/var/www/html/fstab.html’ -> ‘/etc/fstab’
[root@centos7 conf]# ll /var/www/html/fstab.html
lrwxrwxrwx 1 root root 10 Oct  9 19:33 /var/www/html/fstab.html -> /etc/fstab

查看网页,看能否访问到软链接指向的文件

Web Service 之 http(一)_第19张图片      

ExecCGI:允许执行CGI脚本

Web Service 之 http(一)_第20张图片


AllowOverride :是否允许覆盖

  • httpd的访问控制配置,允许每目录单独进行;在每个目录下建立一个.htaccess文件;

  • AllowOverride表示是否允许目录中的 .htaccess 文中的配置来覆盖当前配置段中的配置;

  • 取值:Options,FileInfo,AuthConfig,Limit,All,None

  • 一般来说不创建 .htaccess,会影响性能,所以这里默认都使用None

Web Service 之 http(一)_第21张图片


基于源地址(IP地址)的访问控制

  • 允许所有地址访问:Require all granted

  • 拒绝所有地址访问:Require all denied

Web Service 之 http(一)_第22张图片


示例:

除了ip地址为10.1.252.161的地址,其他ip都允许访问

Web Service 之 http(一)_第23张图片

 7.User/Group

  • 进程的运行者身份,要保证使用http服务的客户端能够有权限访问到资源,通常属主和属组都为apache。

[root@centos7 conf]#  ll /var/www/html
total 4
drwxr-xr-x 2 root root  23 Oct  8 20:49 admin
-rw-r--r-- 1 root root 139 Oct  8 17:00 test.html # 其它用户有读权限

Web Service 之 http(一)_第24张图片


 8.路径别名

格式:

  • Alias /URL/  /path/to/some_directory

示例:

    如DucumentRoot "/var/www/html",在/var/www/html/web/htdocs/下面又有bbs/index.html,显然通过url访问的时候是这样的:

          URL: http://10.1.252.161/web/htdocs/bbs/index.html

    此时,定义别名路径:Alias /magebbs/ /varwww/html/web/htdocs/bbs/ 来重新定义一个别名路径,那么我们可以通过访问新的url来访问之前同样的内容:

          URL:http://10.1.252.161/magebbs/index.html

注意:

  • 路径的映射 

  • 如果定义的路径别名不在/var/www/html下,假如在/date/bbs中创建文件,我们需要对新添加的路径进行访问授权,如上第4点,需要在Alias下添加授权,如下:

             

                    Options None

                    AllowOverride None

                    Require all granted

             

演示:

 1.编辑配置文件/etc/httpd/conf/httpd.conf,定义别名

Web Service 之 http(一)_第25张图片 2.在浏览器中访问如下:

Web Service 之 http(一)_第26张图片


9.httpd-manual

如果无法访问互联网,可以通过安装本地自带文档进行查寻

  • # yum -y install httpd-manual

  • # systemctl reload httpd 安装完成之后要重载httpd服务

manual实际上也是定义了一个路径别名

[root@centos7 html]# rpm  -ql httpd-manual |less
/etc/httpd/conf.d/manual.conf
/usr/share/httpd/manual
  • 查看配置文件:conf.d/manual.conf

[root@centos7 ~]# cat /etc/httpd/conf.d/manual.conf 
#
# This configuration file allows the manual to be accessed at 
# http://localhost/manual/
#
 # 是基于正则表达式模式匹配定义的 
AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/usr/share/httpd/manual$1"
 # 下面是对此别名路径的授权

    Options Indexes
    AllowOverride None
    Require all granted
  • 访问路径 http://host/manual/

Web Service 之 http(一)_第27张图片 


10.内置的 status(状态)页面

首先确保status模块已经装载

# 查看已装载模块
[root@centos7 httpd]# httpd -M| grep "status"
  status_module (shared)

安装方法:

  • 装载之后才能通过此模块向外输出,此时我们需要定义一个路径别名来访问,但是由于在本地路径上没有这个文件,所以不能使用Directory来授权,要使用Location来授权(基于url来控制);

演示:

[root@centos7 httpd]# vim conf.d/status.conf # 重新编辑生成一个文件
   
       SetHandler server-status
       
	   Require ip 127.0.0.1 # 仅允许本地有权限查看
	   Require all denied   # 其他的都不允许
       
   
 
[root@centos7 httpd]# httpd  -t # 检查语法
Syntax OK
[root@centos7 httpd]# !sys  # 重载
systemctl reload httpd

 通过浏览器查看如下:

Web Service 之 http(一)_第28张图片

 



由于篇幅过长,后续内容详见http://1992tao.blog.51cto.com/11606804/1860418