继上一篇写了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的配置文件
-
httpd的主配置文件分为三部分,分别是:
Global Environment:全局配置段,主要定义与httpd工作特性相关的配置 |
Main Server Configuration:中心主机配置段,主要用于定义中心主机的配置,httpd默认开启中心主机 |
Virtual Host:虚拟主机配置段,分别定义不同的虚拟主机相关的配置 |
同时,在httpd配置文件的conf.d目录下所有以.conf结尾的文件也是其配置文件,要实现不同功能,可以在不同位置的配置文件中进行定义。
三.httpd常用的配置
1.在httpd中实现虚拟主机
所谓的虚拟主机是指在通过在配置文件中提供不同的配置,从而可以实现在同一台物理服务器上提供多个站点的访问路径,实现方式有三种,分别是:
IP地址相同,监听的端口不同,通过不同的端口号来访问 |
IP地址不同,端口可以相同,通过不同的IP来访问 |
主机名不同,端口号和IP地址可以相同,通过不同的主机名称来访问。 |
使用虚拟主机的前提是关闭中心主机功能,即将主配置文件中的DocumentRoot这一指令注释。
(1)基于不同端口号来实现的虚拟主机:
a.配置虚拟主机的名称和和根文档目录,但不常用,因为客户端来访问时候不知道服务器端监听的端口号
b.打开监听的端口号
c.测试结果
(2)基于不同的IP地址来访问,可以通过在物理服务器上安装多块网卡来实现
(3)基于不同的主机名称来实现虚拟主机
a.修改主配置文件
b.修改/etc/hosts文件,在其中加入主机名与IP地址的对应关系
c.测试结果
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访问。
测试结果:使用192.168.88.150访问
使用192.168.88.132访问
(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.在对应的页面下创建认证文件,为了安全可以创建隐藏文件,也可以创建非隐藏文件
b.编辑httpd.conf配置文件
c.测试结果
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模块
(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配置文件
至此,对httpd已经能基本使用了。
原创文章,作者:zhangbao,如若转载,请注明出处:http://www.178linux.com/64272
评论列表(1条)
理论和操作相结合且脉络清晰,是一篇可以拿的出手的好文章。