Apache服务器安装与配置

操作系统课程报告

题目:Apache服务器安装与配置

目录

1. 配置文件 (1)

1.1 简介 (1)

1.2 安装模块 (1)

1.3 指令 (2)

1.3.1. 指令参数类型 (3)

1.3.2. 指令上下文 (3)

1.3.3. 局部上下文(Local Config) (3)

2. Apache目录结构 (4)

2.1 根目录 (4)

2.2 Bin目录 (4)

2.3 Conf目录 (5)

2.4 httpd.conf主配置文件常见配置 (5)

2.4.1. .htaccess (6)

2.4.2. access.conf和srm.conf (6)

3. 虚拟主机配置文件 (7)

3.1.1. Linux中虚拟主机的分类 (7)

3.1.2. 基于端口的虚拟主机的配置 (7)

4. 修改Apache默认站点 (8)

5. 配置多站点方式 (9)

6. 配置Apache支持Url重写 (10)

7. 配置反盗链 (11)

8. 配置缓存 (11)

1.配置文件

1.1简介

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web 服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。

Apache作为一个强大的非常灵活的Web服务器,配置文件功不可没,通过修改和调整配置文件,用户可以将Apache的功能发挥到极限。事实上,大部分的Apache管理员的工作就是调整Apache的配置文件,调整指令的参数。但是Apache 的配置文件也是庞大的,指令的数目就够令人望而生畏,而且还在不断的扩充之中。尽管目前有很多的Apache的管理宝典之类的书指导用户如何使用这些指令,但是大部分的系统管理员对配置文件的机制已经指令的内部运行并不能很好的理解。它们并不了解指令是如何对Apache产生效果的,因此指令的使用也仅仅是人云亦云,简单模范而已。

古人云:知其然而知其所以然。或者说“授之以鱼,不如授之以渔”。本章我们将详细的对Apache的配置文件进行了深入的剖析,同时我们将追踪配置指令的作用流程,从而明白配置文件是如何产生效果的。

1、WWW的工作是基于C/S模式的。由WEB浏览器和WEB服务器构成,两者之间用HTTP超文本传输协议进行通信。HTTP是基于TCP/IP之上的应用层协议

2、APACHE 服务器是从NCSA HTTPD发展而来的支持多平台,线程,HTTP 1.1协议,CGL,虚拟主机,IPV6,DSO等功能

3、APACHE的安装分为RPM安装和源代码编译安装,两种安装所生成的文件结构并不相同,源代码编译安装中默认支持DSO功能,可以使用CONFIGURE命令配置模块安装为动态共享对象,而RPM包并没有包括该功能!

4、APACHE的主要配置文件为HTTP.CONF,分为全局环境,本地服务和虚拟主机服务三个部分

5、APACHE日志文件主要包括错误日志和访问日志,分别记录系统事件和访问事件。APACHE可以和PHP脚本语言及MYSQL数据协作,为用户提供复杂的数据查询和动态访问的功能。

1.2安装模块

安装Apache的主要步骤如下:

1. 解包

tar zxvf httpd-2.2.9.tar.gz -C /usr/src/

2. 编译前的配置

cd /usr/src/httpd-2.2.9

./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite 这一步是根据你的特定平台和个人需求配置源代码树。位于发行源代码根目录的configure脚本会完成这个步骤(对下载Apache CVS版源代码的开发者,需要装有autoconf和libtool ,并需要执行buildconf ,对于官方的发行版则没这个必要)。

要想用所有的默认值配置源代码树只要简单的执行 ./configure 命令就可以了,同时configure还可以接受命令行参数以改变默认值。

最重要的选项是Apache安装目录的前缀:--prefix ,因为Apache需要知道这个目录才能正常运作。更多的微调选项请参考配置选项详解。

这样,你就可以通过在配置选项中指定要启用或禁用哪些模块来定制Apache的特性。Base组的模块默认包含在Apache中。其他组的模块可以通过--enable-module 指令启用。其中module是模块名去掉"mod_"并将下划线转换成连字符后的字符串。你也可以使用 --enable-module=shared 指令将模块编译为可在运行时加载和卸载的动态共享对象(DSO)。同样的,你也可以使用--disable-module 指令禁用Base组的模块。注意,使用这些指令的时候configure不会对你拼写错误的模块发出警告说找不到某某模块,而只是简单的忽略这个选项。

另外,有时候还必须提供给configure脚本关于编译器、库、头文件位置的更多信息。这些可以通过环境变量或者命令行选项传递给configure脚本。要了解更多信息,请参考配置源代码树。

为了让你对能指定什么有一个简单的印象,此例演示编译Apache ,并将其安装在/sw/pkg/apache目录,指定了一个特定的编译器以及编译参数,而且允许今后将两个附加的模块mod_rewrite和mod_speling通过DSO机制在运行时动态加载:

$ CC="pgcc" CFLAGS="-O2" \

./configure --prefix=/sw/pkg/apache \

--enable-rewrite=shared \

--enable-speling=shared

configure需要运行几分钟,以测试指定的功能在你的系统中是否有效,并建立稍后编译时所需的许多Makefile文件。

1.3指令

配置文件中的各个指令的作用范围是不一样的,可以分为全局指令,局部指令以及条件指令。默认情况下,配置文件中的指令是作用于整个服务器的,比如上面的示例中的ServerRoot和TimeOut指令,它们的作用范围则是针对整个服务器而言,但并不是所有的指令都这样,有些指令只是针对某个特定的目录,文件或者URL地址,通常情况下,那么我们将这类指令称之为局部指令,这类指令总是嵌在相关的配置指令段中,比如, ,

, , , 以及 ,比如上面的示

例片断中中的指令仅仅对目录C:/Program Files/Apache

Group/Apache2/manual中的文件产生作用。

另外还有一些指令并不是针对某个目录的,而是在特定的条件下才会产生效果的,我们将它们称之为条件指令。

类似于的这类指令我们称之为容器指令或者称之为配置段指令。比如以及等等。

局部指令和条件指令都是以<…>…之间,我们将这两种指令称之为配置段指令。

1.3.1.指令参数类型

Apache中不同指令的参数差异很大,从没有参数到多个参数不等。为了能够准确的处理各种指令以及它的参数,Apache中使用指令参数类型来标识一个指令的参数。不同的指令参数类型指导指令处理程序如何处理指令的参数。Apache中提供了12种类型的指令,这些类型是与实际的配置文件中指令处理相一致的。每种指令都大同小异,唯一的区别就在于其处理的参数的数目以及在将指令传递给指令实现函数之前,服务器如何解释这些参数的方式。由于各个指令的参数不相同,为此也导致了指令的处理函数的格式不相同。

1.3.

2.指令上下文

一个指令它所能影响的范围以及它产生效果的条件,我们称之为指令的上下文,在用户使用任何一个核心指令之前,了解指令能够使用的上下文环境是一件非常重要的工作,换句话说,你必须能够知道指令的作用上下文或者指令的范围。主服务器上下文(Server Config)

如果指令的上下文是主服务器,那么它能够作用的范围将是配置文件中容器配置段之外的所有的范围,即可以出现在httpd.conf,srm.conf以及

access.conf,但却不能出现在或者配置指令片断中。该指令也不能出现在.htaccess文件中。

1.3.3.局部上下文(Local Config)

局部上下文通常是指某个虚拟主机,某个目录,某个URI以及某个Location,这种上下文之间的关系可以用下图进行描述。

局部上下文可以分为两大类,一种是直接通过局部配置段指定,另外一种则是通过.htaccess文件进行指定。

最常用的配置段是针对文件系统和网络空间特定位置的配置段。首先必须理解文件系统和网络空间这两个概念的区别,文件系统是指操作系统所看见的磁盘视图,比如,在Unix文件系统中,Apache会被默认安装到

/usr/local/apache2 ,在Windows文件系统中,Apache会被默认安装到"C:/Program Files/Apache Group/Apache2"(注意:Apache始终用正斜杠而不是反斜杠作为路径的分隔符,即使是在Windows中)。相反,网络空间是网站被web服务器发送以及被客户在浏览器中所看到的视图。所以网络空间中的路径/dir/ 在Apache采用默认安装路径的情况下对应于Unix文件系统中的路径

/usr/local/apache2/htdocs/dir/ 。由于网页可以从数据库或其他地方动态生成,因此,网络空间无须直接映射到文件系统。

2.Apache目录结构

2.1根目录

|-- bin 程序命令目录

|-- build

|-- cgi-bin

|-- conf 配置文件目录

|-- error

|-- htdocs 编译安装时站点目录

|-- icons

|-- include

|-- lib

|-- logs 默认日志文件存放包括错误日志(error_log)和访问日志

(access_log) tail -f access_log可以随时看访问记录,里面httpd.pid 还会记录主进程号

|-- man

|-- manual

|-- modules 模块目录例如PHP MEMCACHE编译后的模块在这里面

2.2 Bin目录

|-- ab apache http服务器性能压力测试工具,类似的jmeter loadrunner webbench

|-- apachectl apache的启动命令

|-- apr-1-config

|-- apu-1-config

|-- apxs apache服务器编译和安装扩展的工具,在进行DSO方式模块编译时会用到例如编译PHP时就用到:--with-apxs2=/usr/local/apache/bin/apxs

|-- checkgid

|-- dbmmanage

|-- envvars

|-- envvars-std

|-- htcacheclean 清理磁盘缓存区的命令,一般少用

|-- htdbm

|-- htdigest

|-- htpasswd 建立更新基本认证文件例如配置nagio监控时候会用到

|-- httpd 为apache的控制命令程序,apachectl执行的时候会调用到httpd |-- httxt2dbm

|-- logresolve

2.3 Conf目录

|-- extra 辅助apache配置文件

| |-- httpd-autoindex.conf

| |-- httpd-dav.conf dav支持配置

| |-- httpd-default.conf apache相关服务配置如超时时间保持连接时间| |-- httpd-info.conf

| |-- httpd-languages.conf 语言支持

| |-- httpd-manual.conf

| |-- httpd-mpm.conf 服务器池管理,如apache模式配置连接等

| |-- httpd-multilang-errordoc.conf

| |-- httpd-ssl.conf 支持SSL加密配置

| |-- httpd-userdir.conf

| |-- httpd-vhosts.conf 虚拟机配置文件

|-- httpd.conf 主配置文件

|-- magic

|-- mime.types

|-- original

2.4 httpd.conf主配置文件常见配置

httpd.conf是Apache中最重要的配置文件,通常位于$ServerRoot下的conf 目录中。不过在一些特殊的发行版本中,可能并不是这个名字,比如在许多支持SSL的Apache二进制发行版本中都会将二进制文件命名为httdsd,与之对应,配置文件也相应的改名为httdsd.conf。不管名称如何,文件内部的指令都是一样的。Httpd.conf是默认的配置文件,一般情况下不建议对其进行修改,因此

通常的建议是你重新拷贝一份,对该拷贝进行修改,因此这种情况下,你可以在指令行中使用-f参数来指定新的非默认的配置文件。

从Apache 1.3.13 起通过-f指令不仅可以指定配置文件,还可以指定配置目录,即,如果配置文件是一个目录,Apache会解析该目录及其子目录中的所有文件作为配置文件。一种可能的用途是,可以通过在这个目录中建立小的配置文件来设置虚拟主机,这样就可以简单地增加和删除虚拟主机,而不用修改其他任何文件,使类似操作的自动化容易了许多。

通常,在服务器启动的时候,该文件被读取处理一次,同时在每次重新启动的时候又会被处理一次,因此对配置文件的任何修改都要等待到服务器重启后才能生效。

2.4.1. .htaccess

httpd.conf文件通常用于控制全局的配置信息,但是有的时候Apache需要提供目录级别的控制,比如定制特定目录被访问或者被列表显示等等。尽管httpd.conf内部提供了相关的目录配置指令,但是如果需要控制的目录数目较大的话,httpd.conf无疑会急剧膨胀。因此Apache中提供了另外的一种目录级别的配置,就是.htaccess。通常情况下,.htaccess文件位于需要进行控制的目录之内,因此系统中可能存在多个.htaccess。每个.htaccesss文件都有能力为它所处的目录以及所有的子目录设置授权、目录索引、过滤器以及其余的各种相关指令。因为.htaccess文件总是包含在用户自己的共享目录文档中,因此用户完全可以建立、更新和修改自己的.htaccess文件,而不需要直接去修改httpd.conf文件,从而可以保证httpd.conf的安全性,你要知道,每个人都去修改httpd.conf的话,造成的问题,你可能甚至都无法预料。

2.4.2.access.conf和srm.conf

在Apache1.3以前的版本中,除了httpd.conf和.htaccess之外,还有两个相关的配置文件,就是access.conf和srm.conf。access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制,srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件。这两个文件都是从NCSA服务器继承而来的,具体的文件可以通过httpd.conf中的AccessConfig和ResourceConfig指令进行指定。不过从Apache1.3开始,这两个文件就已经废弃不用了,因此在Apache2.0中你看不到这两个文件,不过如果

你非要设置AccessConfig和ResourceConfig指令,那么你可以将它们设置为“/dev/null”。

除了这三个设置文件之外,Apache还使用mime.types文件用于标识不同文件。其文件名由TypesConfig指定,缺省时是mime.types。对应的MIME类型, magic文件设置不同MIME类型文件的一些特殊标识,使得Apache服务器从文档后缀不能判断出文件的MIME 类型时,能通过文件内容中的这些特殊标记来判断文档的MIME类型。

3.虚拟主机配置文件

所谓虚拟主机,也叫“网站空间”就是把一台运行在互联网上的服务器划分成多个“虚拟”的服务器,每一个虚拟主机都具有独立的域名和完整的Internet 服务器(支持WWW、FTP、E-mail等)功能。一台服务器上的不同虚拟主机是各自独立的,并由用户自行管理。

虚拟主机技术是互联网服务器采用的节省服务器硬体成本的技术,虚拟主机技术主要应用于HTTP服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬体资源。如果划分是系统级别的,则称为虚拟服务器。

3.1.1.Linux中虚拟主机的分类

1、基于IP地址的虚拟主机

如果某公司有多个独立的IP地址可用,那么可以用不同的IP地址来配置虚拟主机。

2、基于端口的虚拟主机

如果只有一个IP地址,但是要架设多个站点,可以使用端口来区分,每个端口对应一个站点。这样配置的话,用户在访问的时候必须在URL中指明端口号才能访问相应的网站。

3、基于名称的虚拟主机

使用基于IP地址或者端口的虚拟主机,能够配置的站点数目有限,而使用基于名称的虚拟主机,可以配置任意数目的虚拟主机,而不需要额外的IP地址,也不需要修改端口号。

3.1.2.基于端口的虚拟主机的配置

1、在/etc/httpd目录中,建立一个名为vhostconf.d的子目录,用来存放虚拟主机的配置文件。

2、在/var/www目录中,建立一个名为websites的子目录,用于存放网站源

文件;在website目录下再建立ipvhost1和ipvhost2文件夹,用于区分各个站点。

3、将网站源文件复制到/var/www/websites/ ipvhost1目录中

4、修改主配置文件/etc/httpd/conf/httpd.conf,在配置文件的最后一行

添加如下语句,这一步的作用是将虚拟主机的配置文件包含进来。

include /etc/httpd/vhostconf.d/*.conf

5、在/etc/httpd/vhostconf.d/目录中,新建一个名为ipvports.conf的文件,使用文本编辑工具打开,输入以下内容(蓝色部分为注释,不用输入): # 基于端口的虚拟主机配置文件

Listen 8000 #监听的端口号 #IP地址和端口请使用实际的配置Serveradmin webmaster@https://www.360docs.net/doc/424561129.html, #服务器管

理员邮件地址DocumentRoot /var/www/website/ipvhost1 #站点的根目录DirectoryIndex index.html index.htmindex.php #网站主页文件的搜索顺序ServerName https://www.360docs.net/doc/424561129.html, #站点名称

ErrorLog https://www.360docs.net/doc/424561129.html,-error_log #记录网站错误日志的文件名

CustomLog https://www.360docs.net/doc/424561129.html,-access_log common #记录用户访问信

息的日志文件名

6、重新启动Apache服务器。

[root@localhost ~]#service httpd restart

7、在【系统】【管理】【安全级别和防火墙】中,讲站点使用的端口设置为

信任。

8、测试:在本机和其他计算机中用以下地址访问站点。

http://服务器地址:8000

4.修改Apache默认站点

在Linux下修改Apache的配置文件,编辑/etc/httpd/httpd.conf。加#号的是注释,是给你看的样板或说明,不会真正执行。

一般默认是Listen 80,表示监听所有80端口的所有非特定请求;如果增加一行Listen 800,表示增加监听800端口的所有非特定请求;

如果增加一行Listen IP或域名:801,表示监听801端口,但只有该域名或IP 的访问请求才作出回应。

另外可以增加虚拟主机的选项,虚拟主机可以基于不同IP(一台服务器可以捆绑多个IP)、不同端口、不同主机名(域名)。

如果有多个IP地址,可以根据IP不同而在同一主机上设置多个虚机;

对个人用户而言,ISP分配的公网IP一般只有1个,所以可以通过不同的端口来添加多个虚机;

对网站运营商而言,为了节省IP地址,端口也不能随便改(只能用80),因此较多采用基于域名的虚拟主机。

一、基于端口的虚拟主机举例:

默认主机一般放在DocumentRoot "/var/www/html",Listen 80端口。现在我需要增加面向所有域名的800端口的监听,因此添加一行: Listen 800 对应800端口的虚拟主机配置如下:

ServerAdmin webmaster@https://www.360docs.net/doc/424561129.html, #站主的电子邮箱地址

DocumentRoot /var/www/web1 #定义网站的根目录,将网页放在此目录

下 ErrorLog logs/https://www.360docs.net/doc/424561129.html,-error_log #错误日志存放在

此 CustomLog logs/https://www.360docs.net/doc/424561129.html,-access_log common #客户日

配置完毕运行/etc/rc.d/init.d/httpd restart,然后在浏览器上输入localhost:800应该可以看到该端口虚拟主机的内容了。

二、基于主机域名的虚拟主机和基于端口的虚机配置格式相似,但要在同一个端口下可以定义多个基于名称的虚机,因此在要多一项服务器名的配置,并在添加端口侦听时指明主机域名:

Listen 域名:端口号,譬如Listen https://www.360docs.net/doc/424561129.html,:80 ServerAdmin webmaster@https://www.360docs.net/doc/424561129.html, #站主的电子邮箱地址

DocumentRoot /var/www/web2 #定义网站的根目录

ServerName https://www.360docs.net/doc/424561129.html, #填写服务器域名

ErrorLog logs/https://www.360docs.net/doc/424561129.html,-error_log #错误日志存放在此

CustomLog logs/https://www.360docs.net/doc/424561129.html,-access_log common #客户日志

配置完毕运行/etc/rc.d/init.d/httpd restart,然后在浏览器上输入https://www.360docs.net/doc/424561129.html,应该可以看到该域名虚拟主机的内容了,如果要公网上的用户也能登陆,需要配置好动态域名软件或设置好域名服务器,将该域名指向本机的IP地址。

5.配置多站点方式

方式一拷贝配置文件,安装新服务

1、将httpd.conf复制一个新的文件httpdNew.conf

2、将httpdNew.conf中的侦听端口改成未使用的自定义的端口。 Listen:8111

3、将httpdNew.conf中的网站目录 DocumentRoot "原绝对路径" 改成DocumentRoot "新绝对路径"

4、将httpdNew.conf中的权限设置 改成

5、安装新服务。Dos下进到Apache安装目录下的Bin目录,输入命令 httpd.exe -k install -n "服务名" -f "X:\Apache安装目录根目录\conf\httpdNew.conf"

6、启动新服务。输入命令 httpd -k start

方式二添加新端口,新虚拟目录的方式

1、httpd.conf在之前侦听端口的基础上,加上新侦听端口 Listen 8333.这样Apache有多个侦听端口

2、httpd.conf中加入虚拟主机支持。加入指令:NameVirtualHost *

3、找到 definition注释所在位置。加入指令:

ServerName localhost

DocumentRoot "虚拟站点新绝对路径"

方式三建立虚拟主机方式

1、修改虚拟主机配置文件 X:\Apache安装目录根目录

\conf\extra\httpd-vhosts.conf文件.加入配置:

DocumentRoot "虚拟站点新绝对路径"

ServerName https://www.360docs.net/doc/424561129.html,

ErrorLog "虚拟站点新绝对路径/error.log"

2、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#号

3、修改主配置文件X:\Apache安装目录根目录\conf\httpd.conf。加目录权限:

Options Indexes FollowSymLinks MultiViews ExecCGI

AllowOverride All

Order allow,deny

Allow from all

4、重启对应的Apache服务

6.配置Apache支持Url重写

1、加载重写模块。httpd.conf中找到 #LoadModule rewrite_module

modules/mod_rewrite.so,去掉#号

2、httpd.conf中找到AllowOverride None,改成 AllowOverride All (All表示整台服务器上都支持URL规则重写)

3、httpd.conf加入

Options FollowSymLinks

AllowOverride All

4、重启Apache服务器并启动服务

5、在URL重写的网站目录下放一个.htaccess文件,文件名是.htaccess。如无此文件或此文件中没定义任何关于URL重写的规则,则重写不会生效。

6、在.htaccess中通过正则表达式映射需要伪静态的页面。URL正则表达式如下:RewriteEngine on

RewriteRule index.html index.php

RewriteRule (\d+).htmlinfo\.php\?infoid=1

效果为:https://www.360docs.net/doc/424561129.html,/info/info.php?infoid=100

映射为 https://www.360docs.net/doc/424561129.html,/info/100.html

可用于以下用途:

1、http错误的自定义页。格式 ErrorDocument 错误代码 /目录名/名.扩展名ErrorDocument 404 /errors/notfound.html

ErrorDocument 401 "你权限访问该页面!"

2、拒绝某IP的访问

order allow,deny

deny from 210.10.56.32

deny from 219.5.45.

deny from https://www.360docs.net/doc/424561129.html,

allow from all

3、保护.htaccess文档

4、Url转向(文档迁移,目录更改,显示友好易记的url)。格式:

Redirect /旧目录/旧文档名新文档名

Redirect 旧目录新目录

5、更改默认主页

DirectoryIndex 新的缺省名

DirectoryIndex filename.html index.cgi index.pl default.htm

6、反盗链

RewriteEngine on

RewriteCond %{ HTTP_REFERER } !^RewriteCond [NC]

RewriteRule .(gif&line;jpg)- [F] RewriteRule .(gif&line;jpg)

https://www.360docs.net/doc/424561129.html,/替代名 [R,L]

7.配置反盗链

1、参见配置Apache支持Url重写节,配置Apache支持url重写

2、在站点的.htaccess文件中加入

RewriteEngine on

#允许空“HTTP_REFERER”的访问

RewriteCond %{HTTP_REFERER} !^[NC]RewriteCond https://www.360docs.net/doc/424561129.html,/no.png [R,NC,L]

说明:

R 就是转向的意思

NC 指的是不区分大小写

L 的作用是指明本次转向到此结束,后续的转向不受先前判断语句的影响

多个扩展名用|分隔

8.配置缓存

LoadModule cache_module modules/mod_cache.so

LoadModule mem_cache_module modules/mod_mem_cache.so

#默认缓存有效期(秒)

CacheDefaultExpire 3600

CacheMaxExpire 86400 CacheLastModifiedFactor 0.1

#禁止缓存某些特定的URL

CacheDisable /local_files

#使用特定的存储类型缓存某些特定的URL CacheEnable mem /manual

CacheEnable fd /images

CacheEnable disk /

CacheEnable mem /

MCacheSize 8192 MCacheMaxObjectCount 10000 MCacheMinObjectSize 1 MCacheMaxObjectSize 51200

#MCacheRemovalAlgorithm LRU

相关文档
最新文档