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

相关推荐

  • 硬盘的读写原理

     硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160就是基于SCSI-3标准的;IDE 遵循的是ATA标准,而目前流行的SATA,…

    Linux干货 2015-04-10
  • linux中常用文本处理工具

       在linux文件系统中经常会使用到文本处理工具,这里简单介绍几种文本处理工具: 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep , egrep 文件查看命令:cat, tac,rev,more,less   cat命令是用户经常使用的用来查看文本…

    Linux干货 2016-08-07
  • 用户与组管理

    如何成为linux用户?     在linux系统中,要想从系统中获取资源、对系统进行管理和控制,就需要向系统申请一个账号,从而实现特定用途,当申请到账号后,要对它设置口令,这样用户账号就申请成功了,然后可以登陆系统,当用户登陆系统时,需要通过系统的认证,认证成功后才给予授权,在用户的使用过程中还会对用户进行审计。 为什么要设置…

    Linux干货 2016-08-08
  • centos7从最小化安装到图形界面

    man /etc/inittab
    systemctl get-default
    sytemctl set-default graphical.target|multi-user.target
    yum install $a -y

    2017-12-09
  • N25期–第十五周作业

    1、 总结sed和awk的详细用法; 2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符; # sed ‘s@^[[:space:]]\+@@’ /boot/grub/grub.conf 3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符; # sed ‘s@^#[[:space:]]*@@…

    Linux干货 2017-05-08
  • shell脚本之函数相关

       本节主要是作业和select 与case的相关 一、作业 1、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-…

    Linux干货 2016-08-22

评论列表(1条)

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

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