目录:
Apache简介
安装Apache HTTP Server软件
配置文件解析
应用案例

Apache简介
Apache HTTP Server项目是在Windows与Unix等平台上都可以运行的跨平台开源HTTP服务器软件,该项目的目标是提供安全、高效、可扩展的HTTP服务。Apache httpd自从1996年发布以来,如今已经成为世界排名第一的Web服务器软件。Apache httpd最新的稳定版本为2.4.4。安装Apache httpd软件可以选择源码安装或二进制包安装,但由于源码安装是可以定制的一种安装方式,这种安装方式灵活性比较大,可以满足企业对这种环境的不同需求。二进制包安装在CentOS 6.3系统中可以选择RPM包安装,这种安装的最大好处就是简单快捷。本书采用的是源码安装软件包,由于源码安装需要大量的依赖包,需要先安装这些依赖软件包。
Apache HTTP Sever非常重要的特性是她采用了模块化设计模型,Apache模块分为静态模块与动态模块,静态模块是Apache最基本的模块,是无法随时添加与卸载的模块,静态模块在编译软件时设定。动态模块是可以随时添加删除的模块,这样的设计使得企业部署Apache时可以获得最大的灵活性,每个企业都可以根据自己的平台以及实际需求,安装使用不同的模块功能。Apache模块将被编译为动态共享对象(DSOs),这些动态共享对象独立于httpd程序,DSO模块可以在编译Apache是添加,也可以后期随时通过Apache Extension Tool(apxs)工具编译添加模块。Apache HTTP Server软件安装完成后可以使用httpd –M查看模块加载清单。
安装Apache软件
1.    下载软件包

  1. [root@centos6 ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.4.tar.gz
  2. [root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz
  3. [root@centos6 ~]# wget http://mirror.bjtu.edu.cn/apache/apr/apr-util-1.5.2.tar.gz

2.    安装软件

  1. [root@centos6 ~]# yum –y install gcc autoconf automake make \
  2. > pcre pcre-devel openssl openssl-devel
  3. [root@centos6 ~]# tar –xzf httpd-2.4.4.tar.gz –C /usr/src/
  4. [root@centos6 ~]# tar –xzf apr-1.4.6.tar.gz –C /usr/src/
  5. [root@centos6 ~]# tar –xzf apr-util-1.5.2.tar.gz –C /usr/src/
  6. [root@centos6 ~]# cd /usr/src/apr-1.4.6/
  7. [root@centos6 apr-1.4.6]# ./configure  --with-apr=/usr/local/apr/
  8. [root@centos6 apr-1.4.6]# make && make install
  9. [root@centos6 apr-1.4.6]# cd /usr/src/apr-util-1.5.2/
  10. [root@centos6 apr-util-1.5.2]# ./configure  --with-apr=/usr/local/apr/
  11. [root@centos6 apr-util-1.5.2]# make && make install
  12. [root@centos6 apr-util-1.5.2]# cd /usr/src/httpd-2.4.4/
  13. [root@centos6 httpd-2.4.4]# ./configure –prefix=/usr/local/apache2 –enable-so \
  14. > --enable-ssl  --enable-rewrite –with-mpm=worker –with-suexec-bin \
  15. > --with-apr=/usr/local/apr/
  16. [root@centos6 httpd-2.4.4]# make && make install

configure脚本用来检查系统环境、查找依赖文件、设置安装路径等操作,configure拥有很多参数,读者可以通过./configure --help查看该脚本支持的所有参数。
下面是configure常用参数说明:
参数            描述
--prefix            指定Apache httpd程序的安装主目录
--enable-so         开启模块化功能,支持DSO(动态共享对象)
--enable-ssl        支持SSL加密
--enable-rewrite    支持地址重写
--with-mpm          设置Apache httpd工作模式
--with-suexec-bin   支持SUID、SGID
--with-apr          指定apr程序绝对路径
3.    启动服务

  1. [root@centos6 ~]# /usr/local/apache2/bin/apachectl start
  2. [root@centos6 ~]# netstat -ntulp |grep http
  3. [root@centos6 ~]# iptables -I INPUT -p tcp -dport 80 -j ACCEPT

安装完成后Apache会提供名为apachectl启动脚本,该脚本提供了Apache httpd的启动、关闭以及测试功能,没有修改配置文件的情况下使用start启动httpd程序,可能会返回错误提示:”Could not reliably determine the server’s fully qualified domain name”,提示说明httpd无法确定服务器域名称,可以修改主配置文件的ServerName项来解决。该提示也可以忽略,通过netstat命令查看httpd已经启动成功。
在客户端使用浏览器访问该Web服务器,看到”IT works!”说明服务器可以被正常访问了。
apachectl具体参数如下:
参数            描述
start           启动httpd程序,如果已经启动过该程序则报错
stop            关闭httpd程序
restart         重启httpd程序
graceful        启动httpd,不中断现有的连接
graceful-stop   关闭httpd,不中断现有的连接
status          查看httpd程序当前状态
configtest      检查httpd主配置文件语法
配置文件解析
Apache配置文件默认位于/usr/local/apache2/conf目录下,在该目录下最主要的配置文件是httpd.conf文件,还有一些位于extra目录下的附加配置文件。此外original目录中存有所有这些配置文件的副本。Apache HTTP Sever主配置文件主要由指令以及容器组成,容器使用<容器名称>开始,</容器名称>结尾,容器的指令一般仅在局部有效。下面是对主配置文件重点指定的具体描述。
SeverRoot指令
ServerRoot指令设置Apache软件的安装主目录,如果采用源码安装则默认路径为/usr/local/apache2。
Listen指令
Listen指令设置服务器监听的IP以及端口号,默认监听服务器本机所有的IP地址的80端口。语法格式为Listen [IP地址:]端口 [协议],其中IP地址与协议为可选项,默认监听所有IP,使用TCP协议。一个配置文件中可以多次使用Listen指令来开启多个端口。
LoadModule指令
Apache HTTP Server的特色之一就是她的功能多数是以模块方式加载的,但如果希望Apache动态加载模块,需要在编译Apache时通过--enable-so将mod_so以静态方式编译到Apache核心模块中,LoadModule指令的作用就是加载模块。语法格式为LoadModule 模块 模块文件名称,模块文件一般位于ServerRoot指定目录下的modules目录中。
LoadFile指令
LoadFile指令功能类似于LoadModule,区别在于LoadFile可以通过绝对路径加载modules目录以为的模块文件。
ServerAdmin指令
当网站出现故障时,需要为客户提供一个可以帮助解决问题的邮件地址,ServerAdmin指令的作用就是提供这样的邮件地址。
ServerName指令
ServerName指令设置服务器本机的主机名称以及端口,对于URL地址的重定向很重要。
DocumentRoot指令
该指令设置Web服务对客户端开放可见的文档根目录,也就是客户端访问网站的根路径,默认为/usr/local/apache2/htdocs。
ErrorLog指令
ErrorLog定位服务器错误日志的位置,默认使用相对路径,为ServerRoot指定目录下的”logs/error_log”文件。
ErrorLogFormat指令
设置错误日志的格式,Apache HTTP Server事先定义了很多格式字串 可以直接引用。
CustomLog指令
该指令设置客户端的访问日志文件名以及日志格式,默认为”logs/access_log”,语法格式为CustomLog 文件名 格式。
LogFormat指令
描述用户日志文件格式,可以直接使用Apache预先设置的格式字串,一般我们会为LogFormat指令设置的日志格式创建别名,然后可以再通过CustomLog指令调用该日志格式别名。
Include指令
Include指令允许Apache在主配置文件中加载其他的配置文件,该指令语法比较简单,Inclde指令后直接跟上其他附加配置文件路径即可。
Options指令
为特定目录设置选项,语法格式为Options [+|-]选项 [[+|-]选项]。选项可以设置为None,代表不启用任何额外功能,也可以使用如下常用选项。
All:开启出来MultiViews之外的所有选项。
ExecCGI:允许执行CGI脚本。
FollowSymlinks:允许目录下通过链接文件链接到目录外的文件或目录。
Indexes:如果与URL对应的目录下,没有DirectoryIndex指定的首页文档,则Apache
将会把当前目录的所有文件索引出来。
Order指令
控制默认访问状态以及Allow与Deny次序,如果使用Order deny,allow,则先检查拒绝,没有拒绝则默认允许。如何使用Order allow,deny,则先检查允许,没有允许则默认拒绝。
以下为具体案例:
Order deny,allow
Deny from all
先检查拒绝规则,再检查允许规则,默认为允许。这里Deny From all代表拒绝所有,所以最终结果为拒绝所有。
Order Allow,Deny
allow from All
先检查允许规则,再检查拒绝规则,allow from all代表允许所有,所以最终结果为允许所有。
Order Allow,Deny
allow from 192.168.0.1
先检查允许规则时允许192.168.0.1,其余为默认值,默认为拒绝所有,最终除192.168.0.1外拒绝所有。
Order Allow,Deny
allow from 192.168.0.1
Deny from All
先检查允许规则时允许192.168.0.1访问,但检查拒绝规则时为拒绝所有,而192.168.0.1也包含在all之中,当Allow与Deny有冲突时,以Order最后的规则覆盖其他的规则,本案例将使用Deny规则覆盖Allow规则,最终效果为拒绝所有人访问。
Order Deny,Allow
Deny from all
allow from 192.168.0.1
先检查拒绝规则,再检查允许规则,拒绝规则为拒绝所有,允许规则为允许192.168.0.1,拒绝与允许规则有冲突的部分本案例将采用Allow的规则,最终本案例可以实现仅允许192.168.0.1访问,其他任何主机均无法访问Apache服务。
IfDefine容器
IfDefine容器封装的指令仅在启动Apache时测试条件为真才会被处理,测试条件需要在启动Apache时通过httpd -D定义。语法格式为<IfDefine>指令</IfDefine>。具体案例如下:
<IfDefine MemCache>
LoadModule mem_cache_module modules/mod_mem_cache.so
</IfDefine>
<IfDefine UseCache>
LoadModule cache_module modules/mod_ cache.so
</IfDefine>
这样的配置可以让管理员采用多种配置方式启动Apache,启动Apache时如果使用了httpd -DuseCache -DMemCache,则Apache将加载mod_mem_cache与mod_cache模块,如果没有使用-D指定任何参数,则Apache将不加载这些模块。
IfModule容器
使用IfModule容器可以封装仅在条件满足时才会处理的指令,根据指定的模块是否加载决定条件是否满足,语法格式<IfModule [!] 模块>指令</IfModule>。具体案例如下:
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
以上配置说明,仅在Apache加载了unixd_module模块后User daemon与Group daemon才会被Apache处理。
Directory容器
该容器内的指令仅应用于特定的文件系统目录、子目录以及目录下的内容,语法格式为<Directory directory-path>指令</Directory>。路径可以使用~匹配正则表达式。具体案例如下:
<Directory “/usr/local/apche2/htdocs”>
Options Indexs FollowSymLinks
</Directory>
<Directory ~ “^/www/[0-9]{3}”>
AllowOverride None
</Directory>
以上案例中Opions Index FollowSymLins仅对/usr/local/apache2/htdocs目录有效,AllowOverride None仅对所有/www目录下包含三个数字的子目录有效。
<DirectoryMatch>
DirectoryMatch类似于Directory,但可以直接使用正则表达式匹配,而无需像Directory一样使用~符号才可以匹配。
Files容器
该容器类似于Directory容器,但Files容器内的指令仅应用于特定的文件,语法格式如下:<Files 文件名>指令</File>,与Directory类似可以使用~匹配正则表达式。
FilesMatch容器
仅使用正则表达式匹配需要的文件,容器内的指令仅应用于匹配成功的特定文件。FilesMatch等同于使用了~符号的Files。
Location容器
Location容器内定义的指令仅对特定的URL有效,语法格式为<Location URL-path|URL>指令</Location>,如果需要使用正则表达式匹配URL可以使用~符号。
LocationMathch容器
LocationMatch仅使用正则表达式匹配URL,等同于使用了~符号匹配的Location。
VirtualHost容器
虚拟主机应用案例
虚拟主机是在一台服务器上同时运行多个网站业务,Apache HTTP Server支持基于域名以及基于IP虚拟主机类型。在Apache配置文件中虚拟主机指令需要使用VirtualHost容器封装。基于IP的虚拟主机可以根据不同的IP地址以及端口号定位不同的网站请求,但基于IP的虚拟主机需要独立的IP地址定位连接的网站,而目前IP地址是互联网的稀缺资源,所以很多时候我们更喜欢基于域名的虚拟主机,服务器可以根据客户端访问HTTP的头部信息来实现网站的分离解析,客户端可以使用不同的域名访问位于同一IP地址的服务器资源。
当客户端请求到达后,服务器会根据<VirtualHost IP地址:[端口号]>参数匹配IP地址与端口号,IP地址可以使用*匹配服务器本地所有IP地址。接下来我们通过一个案例说明基于域名虚拟主机的实现方式,首先我们需要将主配置文件中Include conf/extra/httpd-vhosts.conf这样功能开启,默认该行为注释行,去除#符号即可。Include指令会将httpd-vhosts.conf文件视作为配置文件的一部分。下面我们仅列出该配置文件中需要修改的部分。

  1. [root@centos6 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  2. <VirtualHost *:80>
  3. ServerAdmin Jacob_test@gmail.com
  4. DocumentRoot "/usr/local/apache2/htdocs/example"
  5. ServerName www.example.com
  6. ServerAlias web.example.com
  7. ErrorLog "logs/www.example.com-error_log"
  8. CustomLog "logs/www.example.com-access_log" common
  9. </VirtualHost>
  10. <VirtualHost *:80>
  11. ServerAdmin Jacob_test@gmail.com
  12. DocumentRoot "/usr/local/apache2/htdocs/test"
  13. ServerName www.test.com
  14. ErrorLog "logs/test. com-error_log"
  15. CustomLog "logs/test.com-access_log" common
  16. </VirtualHost>
  1. [root@centos6 ~]# mkdir -p /usr/local/apache2/htdocs/{example,test}
  2. [root@centos6 ~]# echo “example.com” > /usr/local/apache2/htdocs/example/index.html
  3. [root@centos6 ~]# echo “test.com” > /usr/local/apache2/htdocs/test/index.html
  4. [root@centos6 ~]# iptables -I INPUT -p tcp -dport 80 -j ACCEPT
  5. [root@centos6 ~]# /usr/local/apache2/bin/apachectl restart

Apache HTTP Sever完成以上配置后即可实现基于相同IP地址的www.example.com与www.test.com网站。可以使用客户端访问这两个域名测试效果,如果没有合法的DNS服务器可以通过修改hosts文件的方式进行域名解析。如果读者需要实现基于IP地址的虚拟主机,只需要将VirtualHost后面的*修改为固定的IP地址即可,多个虚拟主机需要使用多个VirtualHost封装。
http://manual.blog.51cto.com/3300438/1186157  丁丁历险

转载于:https://blog.51cto.com/manual/1186157

Apache HTTP Server搭建虚拟主机相关推荐

  1. ubuntu安装discourse论坛----结合在apache服务上建立虚拟主机

    指导操作:https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md 一.先安装 Docker / Git: wg ...

  2. rpm包安装apache发布多个虚拟主机

    今天在单位服务器上用rpm包的方式部署多个服务的时候,出现问题.结果在网上查到了一篇帖子<rpm包安装apache发布多个虚拟主机>,看完这篇帖子之后才知道自己哪些地方配置的时候出现了遗漏 ...

  3. win10系统配置apache 2.4的虚拟主机以及查看 apache的版本

    一.背景 写这篇博客的原因是因为上午在配置虚拟主机的时候,明明很简单的配置,却花了大量的时间,我这边按照win7下配置apache 2.4版本,一直出错,所以记录一下. win7下配置apache 2 ...

  4. Linux、CentOS简单搭建虚拟主机

    Linux.CentOS简单搭建虚拟主机(仅供参考) 1.       基于域名的虚拟主机 a.       新建目录/usr/local/webapps/123 b.       在123目录下面新 ...

  5. 用云服务器搭建虚拟主机,用云服务器搭建虚拟主机

    用云服务器搭建虚拟主机 内容精选 换一换 设置HECS登录密码设置Windows云服务器登录密码设置Linux云服务器登录密码登录HECS了解Windows云服务器的登录方式了解Linux云服务器的登 ...

  6. 服务器可以搭建虚拟主机吗,云服务器能搭建虚拟主机吗

    云服务器能搭建虚拟主机吗 内容精选 换一换 用户可以在管理控制台对专属主机上的云服务器进行管理类操作,包括开机.关机.重启.删除.登录管理控制台.单击管理控制台左上角的,选择区域和项目.选择" ...

  7. 如何搭建php虚拟主机环境,在本地如何搭建虚拟主机环境?

    现在很多中小型企业在建站的时候,也都会选择虚拟主机建站.因为虚拟主机价格便宜,有其独到的优点和优势,所以现在还是很受企业用户和站长使用的.但是对于一些新手站长来说,在使用虚拟主机的时候在本地如何搭建虚 ...

  8. Apache中Virtual Host虚拟主机配置及rewrite参数说明

    这篇文章主要介绍了Apache中Virtual Host虚拟主机配置及rewrite模块中的重要参数说明,是在同一个Apache服务器软件上部署多个站点的基础方法,需要的朋友可以参考下 Virtual ...

  9. 虚拟主机搭建微信公众号服务器,建web服务器同时如何搭建虚拟主机?方法有几种?...

    所说的虚拟主机就是在一台服务器里运作几个网站,提供WEB.Mail.FTP等服务.那么在搭建wed服务器的同时,那么如何在[url=http://www.iisp.com/ztview/F_qgc5. ...

最新文章

  1. 招聘|腾讯地图平台部招点云算法工程师
  2. 写给Java程序员的Java虚拟机学习指南
  3. SpringMVC4 返回Json数据
  4. java.exe 安装程序_java实现可安装的exe程序实例详解
  5. python匿名函数里用for_请问这段Python代码如何用匿名函数简化?
  6. step7db块寻址_step7 根据db地址块怎样找I/O点
  7. 如果你需要品质背景素材,看过来
  8. 数据库链接池c3p0配置踩坑
  9. Nginx中修改php.ini的上传设置upload_max_filesize的值
  10. 删除下拉框只找23火星软件_删除下拉框速来火星下拉,删除下拉框就推92火星软件...
  11. 朗格Lange 1古董车展特别版表落谁家?法拉利 335 Sport非常合衬
  12. 代理服务器CCProxy基本设置
  13. 真实有效解决Open browser failed!! Please check if you have installed the browser correctly!
  14. 怎样判断路由器的好坏和选择路由器?
  15. unity之使用FPS第一人称后鼠标消失
  16. VB.net 移动文件夹去另一个地址,删除文件夹里某种类型的文件
  17. 布莱克斯科尔斯模型(五) 方程求解过程
  18. 生物信息学笔记01-- 绪论
  19. Chrome浏览器更新
  20. 创建基础 protractor 项目

热门文章

  1. Linux学习笔记:touch新建文件、修改访问、改动时间
  2. [Tkinter 教程] 布局管理 (Pack Place Grid)
  3. JavaScript常用技巧之数组操作
  4. js在线压缩工具 支持Base62 encode 和 Shrink variables
  5. 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(Part5) 转
  6. ggtree实现系统发育树可视化
  7. 使用MATLAB如何生成jar包
  8. python统计excel中重复数据_EXCEL公式解读:统计不重复个数
  9. wdatepicker设置时间范围_Mac新手必看,这些设置可以让你的Mac更好用!
  10. android摄像头方向与屏方向,Android通过ExifInterface判断Camera图片方向的方法