1 apache简介
讲解apache之前需要首先说明一下几个概念。
- HTML 语言 :超文本标记语言。使用html语言编写的文本叫超文本,“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
- HTTP 协议:超文本传输协议。HTTP使用统一资源标识符(URL)来建立连接和传输数据。是一个基于TCP/IP通信协议来传递数据的协议,属于应用层协议。
- URL :统一资源定位符。统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。格式:http://www.atguigu.com:80/image/a.jpg。
备注:URI :统一资源标志符,URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,就是说URL是URI的一部分。
Apache是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python/php等解释器编译到服务器中。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。apache的一个实际启动过程如下:
Apache一共有3种稳定的MPM模式(MPM:多进程处理模块),它们分别是 prefork、worker、event模式。
1.1 prefork 工作模式
Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。其主要优缺点如下:
- 优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
- 缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求。
1.2 worker 工作模式
使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些。其主要优缺点如下:
- 优点:占据更少的内存,高并发下表现更优秀。
- 缺点:必须考虑线程安全的问题。
1.3 event 工作模式
它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
HTTP采用keepalive方式减少TCP连接数量,但是由于需要与服务器线程或进程进行绑定,导致一个繁忙的服务器会消耗完所有的线程。Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限制,此时Event MPM方式是最有效的,但不能在HTTPS访问下工作。
查看方式:
# httpd -V | grep -i "server mpm"
指定方式 :
在编译时,在选项中指定,--with-mpm=xxx
2 配置文件以及相关功能介绍
2.1 配置文件位置
配置文件位置 :
源码包安装:
- PREFIX/etc/httpd.conf(主配置文件)
- PREFIX/etc/extra/*.conf(子配置文件)
rpm包安装:
- /etc/httpd/conf/httpd.conf
网页文件位置 :
- 源码包安装: PREFIX/htdocs/
- rpm包安装: /var/www/html/
日志文件位置 :
- 源码包安装: PREFIX/logs/
- rpm包安装: /var/log/httpd/
2.2 apache目录别名
当 apache 接受请求时,在默认情况下会将 DocumentRoot 目录中的文件送到客户端,如果想将某一不在 DocumentRoot 目录中的文件共享到网站上,并希望将它们留在本来位置而不需要进行移动的话,处理这种情况可以通过alias建立别名的方式将 URL 指向特定的目录。
实验略。
2.3 Apache 的用户认证
有时候,我们需要给一些特殊的访问设置一个用户认证机制,增加安全。比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码,但我们为了更加安全,可以再设置一层用户身份认证。
实验略。
2.4 虚拟主机
虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。
虚拟主机的分类:
- 基于 IP 的虚拟主机:一台服务器,多个 ip,搭建多个网站;
- 基于端口的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网络使用不同端口访问;
- 基于域名的虚拟主机:一台服务器,一个 ip,搭建多个网站,每个网站使用不同域名访问;(常用)
实验略。
2.5 域名跳转
一个站点难免会有多个域名(比如公司改名后域名不用改,因为改的话前期做的相关宣传工作或资源都浪费了),而多个域名总得有一个主次,比如我的网站可以用两个域名访问:www.sina.com 和 www.sohu.cn 但大家发现不管我用哪个域名访问,最终都会跳转到 www.sina.com 上来。这个行为就叫做域名跳转,状态码:301 是永久跳转,302 是临时跳转,网站上一定要设置为 301,这样对搜索引擎是比较友好的。
实验略。
2.5 Apache+openssl 实现 https
HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的 HTTP通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,用于安全的 HTTP 数据传输。这个系统被内置于浏览器中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
实验略。
实现过程参照:
对于公司颁发的key和证书,不需要再进行申请证书和key,直接将公司的证书和key放进/etc/pki/tls/certs/、/etc/pki/tls/private/这两个文件夹即可。
2.6 Apache 日志切割
我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实 apache 有相关的配置,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志。
实验略。
2.7 不记录指定文件类型的日志
如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有 js、css 等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?可以通过类似安全黑名单的方式不记录这些日志。
实验略。
2.8 Apache 配置静态缓存
所说的静态文件指的是图片、js、css 等文件,用户访问一个站点,其实大多数元素都是图片、js、css 等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。
实验略。