一、Apache介绍

1、Apache是什么?

  Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。Apache源于NCSA server服务。

1.1 Apache的应用场合

  1》使用Apache运行静态HTML页,图片,(处理静态文件不如Nginx)

  2》使用Apache结合PHP、Perl等程序,lamp被称之为经典组合

  3》使用Apache结合Tomcat/resin运行jsp,java等程序,成为中小企业的首选

  4》使用Apache做代理.负载均衡,rewrite规则过滤等

二、Apache的编译安装

2、开始安装Apache软件包

  Apache的安装非常简单,具体操作过程如下

2.1 下载安装包

[[email protected] /]# mkdir -p /home/loveyu/tools
[[email protected] /]# cd  /home/loveyu/tools
[[email protected] tools]# wget http://mirrors.hust.edu.cn/apache
[[email protected] tools]# ls -l
-rw-r--r-- 1 root root 7684420 Jan 13 02:38 httpd-2.2.32.tar.gz

2.2 编译安装Apache

  编译安装参数说明(通过命令./configure -help 查看Apache的编译参数)

  1》./configure检查编译环境是否符合编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义

  2》--prefix=/usr/local/apache指定Apache的安装路径为/usr/local/apache,如果不指定安装路径,则为默认路径为/usr/local/apache

  3》--enable-deflate提供对内容的压缩传输编码支持,一般html,js,css的内容的站点,使用此参数会极大提高传输速度,提升访问者的体验

  4》--enable-expires**允许通过配置文件控制http的"expires:"金额"cache-control"头内容,及即对网站图片,js,css等内容,提供客户端浏览器缓存设置。这是Apache调优的一个重要选项之一

  5》--enable-heads 提供允许对http请求头的控制

  6》--with-mpm-worker选择Apache mpm的模式为worker模式,因worker模式原理是更多的使用线程来处理请求,所以可以处理更多的并发请求,而系统资源的开销小于基于进程的mpm prefork(默认为他)

  7》--enable-rewrite 提供基于URL规则的重写功能。即根据已知URL地址,转换其他想要的URL地址,这是Apache调优的一个重要选项之一,(伪静态功能)

  8》 --enable-so**Apache服务的DSO(全称Dynamic Shared Object,动态共享对象)支持,即在以后可以以DSO的、方式编译安装共享模块,这个模块本身不能以DSO方式编译

[[email protected] tools]#./configure --prefix=/usr/local/apache --enable-deflate --enable-expires --enable-heads --with-mpm-worker --enable-rewrite  --enable-so
[[email protected] tools]#make    #执行编译命令
[[email protected] tools]#make install 
[[email protected]  tools]# ln -s /var/local/apache/   /application/apache #将其做个做链接,方便使用
[[email protected]  tools]# ls -ld /application/apache
lrwxrwxrwx 1 root root 17 May  7 11:45 apache -> /usr/local/apache
[[email protected] local]# /application/apache/bin/apachectl -l检查安装

   /application/apache/bin/目录下apachectl是一个shell脚本,用来启动、检查、Apache服务。

2.2 检验安装成果

   apache 完成安装后并不直接提供服务,需要先启动Apache服务,具体操作如下

/application/apache/bin/apachectl  start
[[email protected] local]# netstat -lnt   #检查80端口
lsof -i tcp:80   #反查80端口
ps -ef |grep http查看进程
在浏览器中输入192.168.0.102出现IT works则表时Apache安装成功

注意:在此过程中要学会看/application/apache/logs/error_log Apache的错误日志。

2.3 部署一个简单的web站点

   Apache的默认站点目录,是安装目录下的/application/apache/htdocs,这可以从Apache主配置文件/application/apache/conf/httpd.conf中查到

[[email protected] local]# cat /application/apache/conf/httpd.conf|grep -i Documentroot
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/usr/local/apache/htdocs"执行默认的Apache站点目录
# This should be changed to whatever you set DocumentRoot to.
# access content that does not live under the DocumentRoot.
[[email protected] local]#cat  /application/apache/htdocs/index.html
<html><body><h1>my name is fenghui</h1></body></html>

    wKiom1mB08HCSyt2AAF-qDjYJPg497.png

2.4Apache的bin和log子目录说明

1》bin 下的子目录
ab            #Apache http服务器性能测试工具,简单易用,同类软件有jmeter,loadrunner,webbench等
apachectl     #Apache的启动命令,apachectla是一个脚本
apxs          #它是一个为Apache http服务器编译和安装扩展模块的工具,在进行DSO方式模块编译时会用到.如后文在编译PHP软件时就用到了此命令--with-apxs2=/application/apache/bin/apxs
htcacheclean  #这是清理磁盘缓冲区的命令,需要在编译时指定相关参数才可以,一般很少用
htpasswd      #建立和更新基本认证文件,如,配置nagios等监控服务时会用到
httpd         #httpd为apache的控制命令,也还可以用apachect执行httpd
rotatelogs   #apache 自带的日志轮询命令,也可以用,但在老男孩的工作场景习惯有cronolog等替代
2》logs子目录(这是Apache默认的日志路径包括错误日志即访问日志)
access_log   #这是Apache的默认访问日志文件,使用tail -f access.log 可以查看网站用户访问情况信息
error_log    #这是Apache的错误日志文件,如果Apache出现启动故障等问题时,一定要看这个文件
httpd.pid    #这是httpd的pid文件,http进程启动后,会把所有进程的ID号写到此文件
[[email protected] apache]# ps -ef |grep httpd|grep -v grep
root     28666     1  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28667 28666  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28668 28666  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28669 28666  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28670 28666  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28671 28666  0 11:56 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon   28727 28666  0 12:02 ?        00:00:00 /usr/local/apache/bin/httpd -k start
[[email protected] apache]# cat logs/httpd.pid 
28666
3》modules Apache的模块目录,比如PHP,memcaceh等模块编译后都在这里

2.5Apache的扩展文件

Apache的扩展配置文件是通过在httpd.conf主配置文件中嵌入include命令实现的,不过默认情况是注释状态
摘录http.conf主配置文件 中部分include行,如下所示;
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
如果取消此行前面的#号,表示开启虚拟主机的配置,即加载conf/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include conf/extra/httpd-dav.conf
[[email protected] conf]# tree -L 2 /application/apache/conf/extra/
/application/apache/conf/extra/
├── httpd-autoindex.conf
├── httpd-dav.conf
├── httpd-default.conf  #这个文件配置的是Apache的相关服务参数,如超时时间,保持连接时间等
├── httpd-info.conf
├── httpd-languages.conf  #语言支持配置
├── httpd-manual.conf
├── httpd-mpm.conf   #服务器池管理,也就是优化Apache的一个配置文件,如选择Apache的模式及配置连接数等,常用的模式有worker模式和profork模式
├── httpd-multilang-errordoc.conf
├── httpd-ssl.conf   #提供Apache SSL支持配置文件
├── httpd-userdir.conf
└── httpd-vhosts.conf   #这是虚拟主机的配置文件

2.6Apache虚拟主机的配置

2.6.1基于域名的虚拟主机实战配置

   1》开启配置文件httpd.conf中包含httpd-vhosts.conf文件配置

使用vi命令编辑Apache主配置文件httpd.conf。具体步骤:
[[email protected] loveyu]# cd /application/apache/conf/
[[email protected] conf]# cp httpd.conf httpd.conf.loveyu.20170511
[[email protected] conf]# vi httpd.conf
404 # Virtual hosts
405 Include conf/extra/httpd-vhosts.conf
#取消"#"号等于打开虚拟主机的配置

   2》配置虚拟主机(如果默认的虚拟主机配置不删除,重启Apache会报语法错误)进入虚拟主机配置文件,编辑虚拟主机配置文件 vi httpd-vhosts.conf具体操作如下

[[email protected] /]# cd /application/apache/conf/extra/
[[email protected] extra]# cp httpd-vhosts.conf httpd-vhosts.conf.loveyu.20170511
[[email protected] extra]# grep -v \# httpd-vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/blog"     #(这个站点目录必须存在不然会报错)
ServerName blog.feitianxihuanni.org
ServerAliasfeitain.org
ErrorLog "logs/blog-error_log"
CustomLog "logs/blog-access_log" common
</VirtualHost>
[[email protected] extra]# mkdir /var/blog -p
#检查语法错误:
[[email protected] extra]# ../../bin/apachectl -t
Syntax OK

   3》建立虚拟主机的站点目录和首页index.html(测试用)

     [[email protected] extra]# mkdir /var/blog -p

     [[email protected] extra]# chown -R apache.apache /var/blog赋予权限,这个目录就是将来放程序用的。此处的授权相当重要,本命令不是最安全的配置,更优化的站点目录权限控制方法,见后文优化Apache部分,对于本节可以不执行

[[email protected] extra]# ../../bin/apachectl  graceful重启Apache服务

#提示:这里是graceful参数,graceful表示优雅的重启,这个参数可以在重启是使正在浏览的用户没有感觉,不会强行中断用户的访问参数,而是处理完毕请求后在重新启动

   4》在我们的笔记本电脑上编辑hosts文件添加如下内容

     hosts文件的通用路径为:C:\Windows\System32\drivers\etc,hosts文件是本地的DNS解析文件,其功能是把指定的域名解析成对应的IP,多个域名对应一个IP,默认情况下hosts文件中的配置解析优先于DNS服务器。

    192.168.0.102www.feitian.com添加到hosts文件中,下面是虚拟主机的配置文件,加入了扩展模块,在后面的博客中我们会介绍。

[[email protected] extra]# egrep  -v "^#|^$"  httpd-vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/blog"
    ServerName www.feitian.com
    ServerAlias	feitian.com
    ErrorLog "logs/blog-error_log"
     # CustomLog "logs/blog-access_log" common
    CustomLog "|/usr/local/sbin/cronolog /var/logs/access_www_%w.log" combined
	ExpiresActive On
	ExpiresDefault "access plus 12 month"
	ExpiresByType text/css "now plus 12 month"
	ExpiresByType p_w_picpath/jpeg "access plus 12 months"
	ExpiresByType p_w_picpath/x-icon "access plus 2 months"
	ExpiresByType text/javascript "access plus 12 month"
	ExpiresByType p_w_picpath/gif "access plus 12 month"
	ExpiresByType p_w_picpath/jpg "access plus 12 mont"
	ExpiresByType p_w_picpath/png "access plus 12 mont"
	ExpiresByType application/x-shockwave-flash "access plus 12 month"
	ExpiresByType video/x-flv "access plus 12 month"
	<ifmodule mod_deflate.c>  
	AddOutputFilterByType DEFLATE	text/html text/plain text/css  text/javascript  text/css
	AddOutputFilterByType DEFLATE	application/x-httpd-php
	AddOutputFilterByType DEFLATE	application/x-javascript
	AddOutputFilter DEFLATE js css		
	DeflateCompressionLevel 6  			
	SetOutputFilter DEFLATE  
	</ifmodule> 
</VirtualHost>

wKiom1mDAwqBdDbnAAIeMArH8jA228.png

下面是站点目录中的index.html文件

[[email protected] extra]# ll /var/blog/
total 4
-rw-r--r-- 1 root root 161 Aug  3 18:50 index.html
[[email protected] extra]# cat /var/blog/index.html 
<html>
<head><title>feitian blog</title>
</head> 
<body>
<br><br><br><br>
I am fenghui
<br><br>
https://user.qzone.qq.com/2219701263/infocenter
</body>
</html>