HTTP基础入门及服务配置示例

Http又叫超文本传输协议,是目前被广泛使用的一种应用层协议,也是几乎所有互联网访问者都接触过的协议。日常生活中我们所用到的浏览器,就是用来在客户端上实现此协议的程序,可以说一台电脑,不论它属于吃瓜群众,还是热爱瞎XX鼓捣配置的电脑达人,其上都会有至少一种浏览器来实现在互联网上访问信息和获取资源的需求,所以,http协议的重要性不言而喻。

当然,在客户端所访问到的信息和资源肯定都不是凭空而来的,简单来说,在网络的那一端,我们所要访问的东西都安静地待在某个服务器里,在http协议下,客户端机器通过程序向某个ip下的服务器的某个端口(其实就是80端口)发出请求,服务器上监听在此端口上的服务通过服务端程序进行响应,从而达到了客户端的目的。

一次完整的http请求处理过程
   (1) 建立连接:接收来自客户端的连接请求(有些情况下也可能拒绝)
   (2) 接收请求:接收来自客户端请求报文中对某特定资源的一次请求的过程
   (3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息
   (4) 访问资源:获取请求报文中请求的资源
   (5) 构建响应报文
   (6) 发送响应报文
   (7) 记录日志

而想要实现上述过程,服务器必须要有服务端程序(再加上dns服务器和其他一些配套服务,就可以称为一个web服务器了),在此,我们最常用的就是httpd,也就是apache。

安装并开启此服务,过程有些复杂

]# yum install httpd -y

]# service httpd start

完成!接下来清一下防火墙就可以了,为了装X,我还在/var/www/html(默认的文档页面路径)下建了个文件,做了个主页面,然后打开本机的浏览器,然后输入我的ip,看到了自己的心血之作

当然,这还不算完,要保证自己服务器的性能和安全等需要(假设我已经申请了域名,全世界都能看到我的“hello world”),还要对此服务进行一些配置:

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

1、修改监听的IP和PORT
        Listen  [IP:]PORT
     (1) 省略IP表示为0.0.0.0;
     (2) Listen指令可重复出现多次;
      Listen  80
      Listen  8080
     (3) 修改监听socket,重启服务进程方可生效

2、持久连续
    Persistent Connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行(可避免频繁三次握手四次断手神马的);

限制:时间和数量上
      副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应;
      折衷:使用较短的持久连接时长,以及较少的请求数量; 
   

上图为默认情况,如将KeepAlive改为on,将会连接持续60秒

3、MPM 
    httpd-2.2不支持同时编译多个MPM模块(我用的centos6.7),所以只能编译选定要使用的那个;CentOS 6的rpm包为此专门提供了三个应用程序文件,httpd(prefork), httpd.worker, httpd.event,分别用于实现对不同的MPM机制的支持;确认现在使用的是哪下程序文件的方法:
     ps  aux  | grep httpd
     
    默认使用的为/usr/sbin/httpd,其为prefork的MPM模块 ;
     查看httpd程序的模块列表:
      查看静态编译的模块:
       # httpd  -l
      查看静态编译及动态编译的模块:
       # httpd  -M
       
    更换使用httpd程序,以支持其它MPM机制;
     /etc/sysconfig/httpd
      HTTPD=/usr/sbin/httpd.{worker,event}
      
    注意:重启服务进程方可生效

上图为prefork和worker的配置,http2.2上event属于测试阶段

三种进程模型:

MPM:Multipath processing Modules (多路处理模块)
    prefork:多进程模型,每个进程响应一个请求;
     一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
     n个子进程:每个子进程处理一个请求;
     工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲;
    worker:多进程多线程模型,每线程处理一个用户请求;
     一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
     多个子进程:每个子进程负责生成多个线程;
     每个线程:负责响应用户请求;
     并发响应数量:m*n
      m:子进程数量
      n:每个子进程所能创建的最大线程数量;
    event:事件驱动模型,多进程模型,每个进程响应多个请求;
     一个主进程 :负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
     子进程:基于事件驱动机制直接响应多个请求;

4、DSO
    配置指定实现模块加载
     LoadModule  <mod_name>  modules/MODULE_FILE.SO
     
     模块文件路径可使用相对路径:
      相对于ServerRoot(默认/etc/httpd)

模块文件路径:
     /usr/lib64/httpd/modules(/etc/httpd/modules是链接)

5、定义‘Main‘ server的文档页面路径:

ServerName FQDN:PORT
    DocumentRoot  "/var/www/html"

ServerName是我自己定义的服务器名称, DocumentRoot的路径是系统默认的,我没改,这两项根据自己需求来;

由此两项,我们可知,如果我在网上(假设我这域名能访问)访问 www.jz.com/index.html,实际上我请求的就是/var/www/html/index.html这个文件

6、站点访问控制常见机制
   
    可基于两种机制指明对哪些资源进行何种访问控制
    
     文件系统路径

URL路径

<Directory>中“基于源地址”实现访问控制:(上图为默认)
     (1) Options
      后跟1个或多个以空白字符分隔的“选项”列表;
       Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
       FollowSymLinks:允许跟踪符号链接文件所指向的源文件;
       SymLinksifOwnerMatch
       ExecCGI:允许执行CGI脚本
       All
       None:
       
     (2)  AllowOverride
      httpd允许在网页文档的各目录下使用.htaccess文件实现单目录资源访问控制
      与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;
      All
      None:
       
     (3) order  allow,deny
      order:定义生效次序;写在后面的表示默认法则;
      
      Allow from, Deny from
       来源地址:
        1)IP
        2)NetAddr:
         172.16
         172.16.0.0
         172.16.0.0/16
         172.16.0.0/255.255.0.0
        3)FQDN
        4)DAMAIN

因为涉及到跟踪符号链接指向源文件的问题,建议直接将Options后面改成None,安全又简单;AllowOverride默认为None是处于服务器性能考虑;Order后跟allow,deny,表示除了allow定义的意外,全都deny,用以访问控制,但恰好allow定义的是Allow from all......

7、定义站点主页面:
    DirectoryIndex  index.html  index.html.var

8、定义路径别名
    格式:
     Alias  /URL/  "/PATH/TO/SOMEDIR/"

此处:URL不必存在,只是作为一个指向,而别名则可以是不在DocumentRoot下的文件

9、日志设定
    日志类型:访问日志 和 错误日志
    
    错误日志:
     ErrorLog  logs/error_log
           Possible values include: debug, info, notice, warn, error, crit, alert, emerg.

LogLevel  warn(默认为warn,warn之上的级别才报告)

访问日志:
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
     CustomLog  logs/access_log  combined
     
     LogFormat format strings:
      http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
     
      %h:Remote host,远程主机,客户端IP地址;
      %l:Remote User, 通常为一个减号(“-”);
      %u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
      %t:服务器收到请求时的时间;
      %r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
      %>s:响应状态码;
      %b:响应报文的大小,单位是字节;不包括响应报文的http首部;
      %{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
      %{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;

上图为/var/log/httpd/access_log文件,果然格式一毛一样

10、httpd-manual
     yum install httpd-manual

配置文件:/etc/httpd/conf.d/manual.conf/
     重加载服务

访问路径:
      http://SERVER_IP/manual/

11、基于用户的访问控制
    
    认证质询:
     WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;
    
    认证:
     Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;
     
     认证方式有两种:
      basic:明文
      digest:消息摘要认证
    
    安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因;

存储:
      文本文件;
      SQL数据库;
      ldap目录存储;

(httpd要有相应的适配模块)

basic认证配置示例:
     (1) 定义安全域
      <Directory "">
       Options None
       AllowOverride None
       AuthType Basic
       AuthName "For Administrators"
       AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"
       Require  user  username1  username2 ...
      </Directory>
      
      允许账号文件中的所有用户登录访问:
       Require  valid-user
      
     (2) 提供账号和密码存储(文本文件)
      使用专用命令完成此类文件的创建及用户管理
       htpasswd  [options]   /PATH/TO/HTTPD_PASSWD_FILE  username
        -c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
        -m:md5格式加密
        -s: sha格式加密
        -D:删除指定用户
        
     另外:基于组账号进行认证;
      (1) 定义安全域
       <Directory "">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "For Administrators"
        AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"
        AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
        Require  group  grpname1  grpname2 ...
       </Directory>
       
      (2) 创建用户账号和组账号文件;
       
       组文件:每一行定义一个组
        GRP_NAME: username1  username2  ...

12、虚拟主机
    多个站点基于不同的信息进行标识;
    
    站点标识:
     IP相同,端口不同;
     IP不同,端口相同;
     FQDN不同;
     
    虚拟主机就有了三种实现方式:
     基于IP的虚拟主机:
      每个虚拟主机使用一独有的IP地址;
     基于PORT的虚拟主机:
      每个虚拟主机使用一个独有的PORT;
     基于FQDN的虚拟主机:
      每个虚拟主机使用一个独有的FQDN;
      
    注意:虚拟主机与“主服务器”不能够同时使用;
     
     虚拟主机的配置方法:
      <VirtualHost IP:PORT>
       ServerName
       DocumentRoot
      </VirtualHost>
      
      其它常用指令:
       Errorlog
       CusomLog
       Alias
       ServerAlias
       ...
       
     基于IP的虚拟主机示例:
      前提:本机需要配置了用到的所有IP地址;
      
      <VirtualHost 172.16.100.71:80>
       ServerName www1.magedu.com
       DocumentRoot /data/vhosts/www1
      </VirtualHost>
      <VirtualHost 172.16.100.72:80>
       ServerName www2.magedu.com
       DocumentRoot /data/vhosts/www2
      </VirtualHost>
      
     基于端口的虚拟主机示例:
      前提:httpd监听了用到的所有端口;
      
      <VirtualHost 172.16.100.71:80>
       ServerName www1.magedu.com
       DocumentRoot /data/vhosts/www1
      </VirtualHost>
      <VirtualHost 172.16.100.71:8080>
       ServerName www2.magedu.com
       DocumentRoot /data/vhosts/www2
      </VirtualHost>      
        
     基于FQDN的虚拟主机示例:
      NameVirtualHost 172.16.100.71:80
      
      <VirtualHost 172.16.100.71:80>
       ServerName www1.magedu.com
       DocumentRoot /data/vhosts/www1
      </VirtualHost>
      <VirtualHost 172.16.100.71:80>
       ServerName www2.magedu.com
       DocumentRoot /data/vhosts/www2
      </VirtualHost>

虚拟主机开启后,主服务器自动失效

以上就是httpd的一些配置,当然,还有许多配置有待补全,我们下回分解。

时间: 2024-10-15 10:04:45

HTTP基础入门及服务配置示例的相关文章

Nginx基础入门之相关配置模板样例参考

关于nginx,在不同的环境下有不同的配置,比如nginx在LNMP环境中有lamp 环境的配置,从到反向代理时,有反向代理的配置,在做负载均衡时,有负载均衡的配置,下面我们来介绍一下关于nginx不同应用环境的配置样例 通常在配置nginx时,我习惯将nginx配置分为nginx分为两大部分:1.共用nginx配置:2.include引用的web配置,如下所示 * 共用nginx配置模板参考 #user  nobody; user nginx ;   worker_processes  aut

rsync同步服务配置手记

Rsync在推送或抓取数据时,在rsync客户端会出现性能问题, 负载比较大且数据量比较大的生产环境要注意这一点. 本文只是个人平时配置示例,可以简单修改后用于实际环境使用,rsync不仅可以实现服务器间的复制,对于本地目录的同步也相当方便. 1. linux平台rsync服务配置示例 (1) 客户端同步脚本 #!/bin/bash   # author: koumm    # desc: backup for /data/ to 10    # date: 20xx-xx-xx    # ve

kubernetes基础入门之-配置kubernetes skyDNS服务

kubernetes基础入门之-安装部署配置示例 部署kubernetes skyDNS  kubernetes可以为pod提供dns内部域名解析服务. 其主要作用是为pod提供可以直接通过service的名字解析为对应service的ip的功能! 1.首先在各节点的kubelet 进程中添加选项: KUBELET_ARGS="--cluster_dns=10.254.0.10 --cluster_domain=kube.local" [Master 节点操作如下:] [[email 

Java-Spring-WebService最基础的配置示例

很早很早之前,就初步学习了WebService,感觉还是比较"好"的.  使用Web服务,感觉就像普通API一样,和HTTP接口比较起来.  WebService有个很大的局限,就是事务,分布式事务麻烦程度就上升了不少,暂时没有搞过.    最近1年做的2个比较完整的项目,都有WebService的配置,只不过,都是别人配置好的.    别人的,终究是别人的.    作为一名热爱学习并学以致用的程序员,我也来亲自搞个配置~    下面的例子,是我今天亲自一步步配的,而且运行成功了.  

Linux基础入门之网络属性配置

Linux基础入门之网络属性配置 摘要 Linux网络属性配置,最根本的就是ip和子网掩码(netmask),子网掩码是用来让本地主机来判断通信目标是否是本地网络内主机的,从而采取不同的通信机制. Linux网络属性配置,最根本的就是ip和子网掩码(netmask),子网掩码是用来让本地主机来判断通信目标是否是本地网络内主机的,如果在同一网络内,那么可以通过ARP广播机制得到对方mac地址后就可以进行通信的,如果不是本地网络内就必须将数据报文封装后一层一层的经由网关路由进行转发.无论目标是哪的一

Android基础入门教程——8.3.2 绘图类实战示例

Android基础入门教程--8.3.2 绘图类实战示例 标签(空格分隔): Android基础入门教程 本节引言: 前两节我们学了Bitmap和一些基本的绘图API的属性以及常用的方法,但心里总觉得有点 不踏实,总得写点什么加深下映像是吧,嗯,本节我们就来写两个简单的例子: 1.简单画图板的实现 2.帮美女擦衣服的简单实现 嘿嘿,第二个例子是小猪刚学安卓写的一个小Demo~嘿嘿~ 开始本节内容~ 1.实战示例1:简单画图板的实现: 这个相信大家都不陌生,很多手机都会自带一个给用户涂鸦的画图板,

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程 WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程5 风哥主讲:介绍Oracle WebLogic中间件的概念,WebLogic概念,域,JDK,JVM,数据源,连接池,控制台,集群相关,Weblogic安装与部署. 视频学习地址: http://edu.51cto.com/course/course_id-3744.html

Oracle GoldenGate零基础入门培训--安装、配置、诊断

Oracle GoldenGate零基础入门培训--安装.配置.诊断课程学习地址:http://www.xuetuwuyou.com/course/158课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程介绍: 本课程通过理论讲解以及实战操作的方式,向大家阐述了GoldenGate数据复制软件的产品体系.技术架构.安装配置.数据初始化.数据复制及操作.安全控制等相关内容.课程结合讲师的理解和实际工作经验对部分难点.重点.易错点进行了比较深入的探讨,希望可以为大家带来

linux云自动化运维基础知识23(DDNS服务配置)

DDNS(Dynamic Domain Name Server)是动态域名服务的缩写. DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析. DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,这样其他上网用户就可以通过域名来进行交流.而最终客户所要记忆的全部,就是记住动态域名商给予的域名即可,而不用去管他们是如何实现的. 动态