httpd的介绍以及常用配置

继上一篇写了LAMP的编译安装之后没有介绍如何配置使用,接下来的几篇会依次介绍,编译安装的过程为http://www.178linux.com/64006

一.httpd介绍

1.httpd是http协议的一个经典实现,也是apache组织中的一个顶级项目,其官方站点为httpd.apache.org。

2.httpd的运行机制

高度模块化(Core+Modules):采用核心模块+扩展模块的机制
DSO(Dynamic Shared Object)机制:可以按需动态的装载模块来实现相应的功能

采用MPM(Multipath Processing Moules):使用多路处理模块,有三种工作模型

 (1)prefork模型:多进程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将请求分发给子进程,由子进程具体负责处理用户请求,工作方式为,事先生成几个空闲的进程,随时等待着处理用户请求。

 (2)worker模型:多进程,多线程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将用户请求分发给每个子进程,而每个子进程又生成多个线程,每个线程负责具体的处理用户请求。

 (3)event:事件驱动,多进程模型,一个主进程负责管理子进程,创建套接字,接受用户请求,并将用户请求交给子进程,每个子进程基于事件驱动处理多个请求,并将结果返回给客户端。

3.httpd有丰富的功能特性,常用的有:

支持CGI(Common Gataway Interface)协议
支持虚拟主机:可以基于ip,port,FQDN实现虚拟主机
支持反向代理机制
支持负载均衡功能
具有丰富的认证机制
支持第三方模块
支持路径别名

二.关于httpd的配置文件

  1. httpd的主配置文件分为三部分,分别是:

Global Environment:全局配置段,主要定义与httpd工作特性相关的配置
Main Server Configuration:中心主机配置段,主要用于定义中心主机的配置,httpd默认开启中心主机
Virtual Host:虚拟主机配置段,分别定义不同的虚拟主机相关的配置

同时,在httpd配置文件的conf.d目录下所有以.conf结尾的文件也是其配置文件,要实现不同功能,可以在不同位置的配置文件中进行定义。

三.httpd常用的配置

1.在httpd中实现虚拟主机

所谓的虚拟主机是指在通过在配置文件中提供不同的配置,从而可以实现在同一台物理服务器上提供多个站点的访问路径,实现方式有三种,分别是:

IP地址相同,监听的端口不同,通过不同的端口号来访问
IP地址不同,端口可以相同,通过不同的IP来访问
主机名不同,端口号和IP地址可以相同,通过不同的主机名称来访问。

使用虚拟主机的前提是关闭中心主机功能,即将主配置文件中的DocumentRoot这一指令注释。

(1)基于不同端口号来实现的虚拟主机:

a.配置虚拟主机的名称和和根文档目录,但不常用,因为客户端来访问时候不知道服务器端监听的端口号

配置1.png

b.打开监听的端口号

端口号.png

c.测试结果

结果.png

(2)基于不同的IP地址来访问,可以通过在物理服务器上安装多块网卡来实现

配置3.png

(3)基于不同的主机名称来实现虚拟主机

a.修改主配置文件

配置4.png

b.修改/etc/hosts文件,在其中加入主机名与IP地址的对应关系

配置7.png

c.测试结果

结果3.png

2.持久和非持久连接

 当客户端与服务器端进行长时间的通信时,客户端会发出一系列的请求,服务器端要这些请求一一进行响应,而http协议基于tcp协议建立连接,于是对这一系列的请求和响应可以每次经过一个单独的tcp连接发送,也可以都经过同一个tcp连接进行发送;每次(每个资源的传输)都使用不同的tcp进行发送的方式就叫做非持久连接,每次都经过同一个tcp连接发送的方式叫做持久连接。在httpd中实现持久功能:

KeepAlive {on|off}:开启或关闭持久连接功能

MaxKeepAliveRequests 100 :允许建立持久连接的最大客户端请求数量

KeepAliveTimeout 15 :每个连接的最大持久连接时长

3.监听的端口号

Listen 80

4.加载模块:

LoadModule Module_name

5.中心主机的根文档,而httpd默认就是运行于中心主机

DocumentRoot "/web/app/host1"

6.定义默认的主页

DirectoryIndex index.html index.html.var

7.定义错误日志的存放位置

ErrorLog logs/error_log

8.定义错误日志的等级

LogLevel {debug|info|notice|warn|error|crit|alert|emerg}

9.定义日志的格式,可以根据需要自行定义,需要了解每个宏的意思,当使用ELK做日志分析时能便于定义输出格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

有很多宏定义,可以参考官方文档。

10.基于路径做访问控制

(1)基于物理服务器的文件系统做访问路径做控制

<Directory "/var/www/html">

   Options {Indexes FollowSymLinks}

    AllowOverride None 

    Order allow,deny

    Allow from all

</Directory>

其中:

Options Indexes :如果访问路径中不存在资源时,将所有的资源列出来

Options FollowSymLinks:当站点上的资源是符号连接文件时,客户端是否能访问到其所链接指向的文件

AllowOverride None:是否允许在每个页面下建立.htaccess的文件来做访问

Order allow,deny:定义访问控制的机制,若先allow,后deny的话即为黑名单机制,反之则为白名单机制

Allow from all :定义允许访问的客户端

配置示例:基于白名单机制,拒绝192.168.88网络的主机,只允许192.168.88.132访问。

4.png

测试结果:使用192.168.88.150访问

2.png

使用192.168.88.132访问

3.png

(2)基于URL做访问控制

<Location /server-status>

   SetHandler server-status

   Order deny,allow

   Deny from all

   Allow from .example.com

</Location>

11.设定默认字符集

AddDefaultCharset UTF-8

12.基于用户做页面访问控制

基于用户对指定页面做访问控制的方式有两种:基本认证和摘要认证

基本认证是:服务器端生成一个存有虚拟用户名和密码的文件,当用户访问时页面时,就会弹出对话框要求输入用户名和密码,此页面的状态码为401,只有当用户认证通过以后,才能访问该页面;而摘要认证则是服务器为每一连接生成一个唯一的随机数, 客户端对用这个随机数做密码进行MD5加密. 然后发送到服务器. 服务器端也用此随机数对密码加密, 然后和客户端传送过来的加密数据进行比较,结果相同则认证通过。

(1)例如对根路径配下的auth页面做认证basic认证,配置方式为:

a.在对应的页面下创建认证文件,为了安全可以创建隐藏文件,也可以创建非隐藏文件

5.png

b.编辑httpd.conf配置文件

7.png

c.测试结果

6.png

13.开启httpd的信息页面,默认是不打开的,如果要打开,最好最做白名单的访问控制

<Location /server-info>

      SetHandler server-info

      Order deny,allow

      Deny from all

      Allow from 192.168.88.1/24

     Allow from .example.com

</Location>

14.开启服务器的状态页面

<Location /server-status>

     SetHandler server-status

     Order deny,allow

     Deny from all

     Allow from .example.com

     Allow from 192.168.88.1/24

</Location>

14.配置httpdMPM的工作特性

<IfModule prefork.c>

  StartServers      8    #启动服务时启动的进程数

  MinSpareServers    5    #最少空闲的进程数 

  MaxSpareServers   20     #最大空闲的进程数

  ServerLimit      256    #服务器允许打开的最大进程数

  MaxClients       256    #允许的最大用户连接数

  MaxRequestsPerChild  4000  #每个子进程所能处理的最大用户请求数量

</IfModule>

15.httpd实现https功能

ssl是web服务之间进行信息安全传输的协议,其通过建立ssl会话来实现信息的安全传送,基于客户端的ip地址建立会话,因此,每个客户端IP只建立一个ssl会话,每个会话的建立要基于ssl握手来实现,类似于tcp的三次握手,ssl握手要完成交换协议版本号,协商双方都支持的加密算法,以及实现身份认证等。而此时客户端也要对服务器端的证书做检验,检测证书的有效期,CA的可信度等,等双方握手完成以后,才能基于加密的方式进行信息的交换。而实现的ssl协议的http协议就被称为https,监听于tcp的443端口。

实现https的步骤为:

(1)https的实现依赖于mod_ssl模块

9.png

(2).创建CA服务器,CA服务器为192.168.88.1

a.生成CA服务器端私钥文件

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem)

b.创建自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem

c.为CA提供必要的辅助文件

mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

touch /etc/pki/CA/{serial,index.txt}

echo 01 > serial

(3)在客户端创建私钥文件以及生成签署请求

a.生成私钥文件

(umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key)

b.生成签署请求

openssl req -new -key  /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

(4)签署    

a.将签署请求发送到CA服务器上

scp /etc/httpd/ssl/httpd.crt root@192.168.88.134:/tmp

b.CA签署请求

openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/cert/httpd.crt

(5)编辑ssl.conf配置文件

https7.png

至此,对httpd已经能基本使用了。

原创文章,作者:zhangbao,如若转载,请注明出处:http://www.178linux.com/64272

(0)
zhangbaozhangbao
上一篇 2016-12-22
下一篇 2016-12-22

相关推荐

  • 马哥教育网络班21期-第1周课程练习

    1、  描述计算机的组成及其功能。 计算机由硬件系统和软件系统两部分组成。硬件系统由运算器,控制器,存储器,输入设备和输出设备组成.     运算器:计算机中进行算术运算和逻辑运算的部件。     控制器:计算机的控制中心。协调和指挥计算机系统的操作。  &n…

    Linux干货 2016-07-12
  • 在centos6.9上实现软RAID

    在centos6.9上实现软RAID 什么是RAID?     RAID,全称Redundant Arrays of Inexpensive(Independent)Disks。简单翻译叫磁盘阵列。    通俗一点讲就是多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提…

    Linux干货 2017-08-12
  • Linux终端类型

    前言 终端是一个很重要的外设,用过终端设备的人都知道如果设备类型不对就会有乱字符,也可用仿真终端软件如netterm试验一下,Linux的终端信息放在 /usr/share/terminfo下,在这个目录的子目录v下就有许多的如vt100,vt102,vt200等,看一下就知道了。 终端类型的区别与概念 1、 pty(虚拟终端): 但是如果我们远程telne…

    Linux干货 2016-10-14
  • 逻辑卷配置管理

    逻辑卷管理逻辑卷创建1、fdisk t 8e //修改分区类型 2、pvcreate  /dev/sd{a7,b} //创建物理卷pvs pvdisplay   //查看物理卷信息 3、vgcreate  vg0  /dev/sd{a7,b}  //创建卷组v…

    Linux干货 2016-08-30
  • LINUX集群概念

    反向代理服务器:客户端发现请求给反向代理服务器,反向代理服务器与后端真实服务器进行通信,并由反向代理服务器返回信息给客户端 不同的服务,反向代理服务器使用的协议不同(如http、mysql等): 反代服务器后端的真实服务器一般是多台服务器组成的集群 Linux Cluster:          集群:将多台…

    Linux干货 2017-01-10
  • LVS(Linux Virtual Server)学习笔记

    LVS(Linux Virtual Server)学习笔记 此文主要对lvs负载均衡学习的总结,一为记录,二为巩固。主要介绍:1、lvs基础;2、lvs的配置;3、lvs的实现 前提:负载均衡(LB Cluster)     负载均衡实现方法有两种:硬件实现和软件实现;    &…

    Linux干货 2017-02-13

评论列表(1条)

  • 马哥教育
    马哥教育 2017-01-03 16:50

    理论和操作相结合且脉络清晰,是一篇可以拿的出手的好文章。