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)
上一篇 2016-12-22 17:57
下一篇 2016-12-22 20:14

相关推荐

  • iptables详解

    iptables命令: iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specificatio…

    Linux干货 2017-11-12
  • linux 文件管理命令

    目录与路径    1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 "路径" 以及 "相对路径" 与 "绝对路径" 的概念。在之前的学习中,就反复的强调了Linux的目录是 "树状目录" 。假设我们需要在任意一个目…

    Linux干货 2016-11-06
  • M20-1权限作业

    1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? [root@centos7 testdir]# ls -ld /testdir/ drwxr-xrw-. 3 root root 27 Aug  5 0…

    Linux干货 2016-08-05
  • N21天天第十三周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-12-05
  • Linux系统程序包管理—rpm

     概述:      本章内容:软件的运行环境,软件包基础,rpm包管理,yum管理,定制yum仓库,编译安装 一、软件运行环境     1.□API:Application Programming Interface (应用程序开发接口)         &n…

    Linux干货 2016-09-01
  • 三次握手和四次挥手

    今天来聊一下事实标准协议TCP/IP中传输层里TCP协议中,主机与服务器建立连接时的三次握手,和断开连接时的四次挥手。 本博文分两部分介绍,    一:状态详解    二:三次握手和四次挥手状态介绍 这里总共涉及到十种状态,其实总共有十一种状态,接下来分别介绍一下它们; 一:状态详解 CLOSED:关闭—&…

    2017-09-01

评论列表(1条)

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

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