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

相关推荐

  • 网络分层模型(OSI,TCP/IP)

    目前存在的两种网络分层模型:OSI模型和TCP/IP模型。 OSI模型一共分为七层 TCP/IP模型和OSI模型类似,但是只分为四层。 OSI模型 OSI的全程是Open Systems Interconncection,即开放系统互联,它由ISO(International Organization for Standardization)制定。 OSI是…

    2017-11-27
  • ☞Web服务器之apache

    Web服务器之apache http协议 telnet的使用 curl命令 httpd的相关配置 welcome.conf — 403 forbidden 修改监听的端口和地址 保持连接 DSO 定义物理主机站点文档 资源访问授权 路径别名Alias 本地httpd-manual 开启status 日志设定 虚拟主机 基于用户的访问控制 httpd压力测试 …

    Linux干货 2016-10-08
  • mysql主从复制以及扩展

    一、MySQL简单复制相关概念:    1. mysql复制的意义:Mysql复制是使得mysql完成高性能应用的前提    2. mysql复制的机制:             SLAVE端线程: …

    Linux干货 2015-12-16
  • N25-第十一周

    1、详细描述一次加密通讯的过程,结合图示最佳。 发送者: 1.使用单项加密算法提取生成数据的特征码 2.使用自己的私钥加密特征码附加在数据后面 3.生成用于对称加密的临时密钥 4.用此临时密钥加密数据和已经使用私钥加密后的特征码 5.使用接收方的公钥加密此临时密钥,附加在对称后的数据后方 接收方: 1.使用自己的私钥解密的临时秘钥;从而获得对方的对称密钥 2…

    2017-06-05
  • 关于大型网站技术演进的思考(六):存储的瓶颈(6)

    原文出处: 夏天的森林  在讲数据库水平拆分时候,我列出了水平拆分数据库需要解决的两个难题,它们分别是主键的设计问题和单表查询的问题,主键问题前文已经做了比较详细的讲述了,但是第二个问题我没有讲述,今天我将会讲讲如何解决数据表被垂直拆分后的单表查询问题。 要解决数据表被水平拆分后的单表查询问题,我们首先要回到问题的源头,我们为什么需要将数…

    2015-03-11
  • 设计模式(四)原型模式Prototype(创建型)

    1.   概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。 例子1:孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来。 例子2:寄个快递下面是一个邮寄快…

    Linux干货 2015-06-25

评论列表(1条)

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

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