LAMP架构之:apache配置必知必会

         在前面的博文中,聊了关于LAMP架构的搭建,httpd.conf配置文件的解析,这里再聊一聊关于apache配置的必知必会的内容...所谓必知必会,基本上我觉得是应该知道和掌握的知识。这里要说

明一下的是,此文还是针对apache 2.2的版本,虽然2.4中有所变化,但总体上能实现的功能是一致的。在此之后,还会出一篇关于2.22.4中有所区别的个人总结,也是给自己理一下思路。

         接下来,将针对性的聊一聊,apache配置中必知必会的东西

测试环境:

Hostnametest1.lxm.com

OSCentOS6.5x64

Soft: httpd-2.2.15

 

:本实验中所有的软件包,都是CentOS6.5x64 ISO中自带的rpm软件包

 

安装httpd软件包:

#yum –y install  httpd

 

.基本站点配置

         对于一个基本站点来说,基本上安装好httpd软件就已经搭建了一个基本站点,此时只要启动httpd服务即可。但是这里会遇到这样一个错误:

[root@test1 conf]# service httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for test1.lxm.com

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]

[root@test1 conf]#

从上面的信息可以看出,启动报错了,但是此时查看httpd进程发现也启动了,如下信息所示:
[root@test1 conf]# ps aux | grep httpd

root      1387  0.0  0.7 177772  3876 ?        Ss   17:00   0:00 /usr/sbin/httpd

apache    1389  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1390  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1391  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1392  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1393  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1394  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1395  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

apache    1396  0.0  0.4 177772  2484 ?        S    17:00   0:00 /usr/sbin/httpd

root      1411  0.0  0.1 103244   844 pts/0    S+   17:01   0:00 grep httpd

[root@test1 conf]#

 

所以这个情况比较特殊,记得在以前的版本中,还没有这个问题,基本上安装后,启动httpd服务即可。所以为了解决这个问题,有两种方式,其实这个我已经在LAMP架构搭建中说过,这里在重复一下:

1.是修改httpd.conf文件中的ServerName,可以是IP形式,也可以是域名形式,当然如果你要使用默认站点配置域名主机,肯定是使用域名形式了,我这里为了方便测试,使用ip

wKioL1QZXI-Cr7tXAABqzs264Pc855.jpg

 

2./etc/hosts文件中,增加一条到主机名的解析

10.0.10.11        test1.lxm.com 

 

不管你使用那种方式,此时在重新启动httpd服务:

[root@test1 conf]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 conf]#

这里信息显示,已经不在报错了,看一下浏览器在默认情况下的访问页面:
wKiom1QZXHjR8yapAAEoyCs7-ww986.jpg

 

信息显示,默认访问的是apache的欢迎测试页面,如果能访问到这个页面,基本上站点访问是没有问题了。这里是因为还没有配置自己的页面,所以apache默认调用了欢迎页面。

 

下面设置一个自己的测试页面,看看效果:

[root@test1 conf.d]# cd /var/www/html

[root@test1 html]# ls

 [root@test1 html]# echo "<h1> this is a web test page !!! </h1>" > index.html

echo "<h1> this is a web test page ls! </h1>" > index.html

[root@test1 html]# ls

index.html

[root@test1 html]# cat index.html

<h1> this is a web test page ls! </h1>

[root@test1 html]#

 

这里不用重启httpd服务,站点的内容配置跟httpd服务没有关系,只有当httpd的自身配置文件发生了变化,才需要重新启动httpd服务以便应用新的设置。

 

测试:

wKioL1QZXJCgrWbHAADXzH2gsvI162.jpg

 

从访问结果来看,能够正常的访问了。细心的人可能发现了,我输入的是三个!号,怎么出来变成ls!了。哈,这是因为!!shell中有特殊的意义,表示调用最后一次指向的命令。

 

基本上一个默认站点,就是httpd的默认设置即可。但是这里我要说的一个问题就是关于欢迎页面的问题。有时候当你的配置发生问题的时候,你可能很容易打开的就是欢迎页面的内容,此时你不知道到底是什么问题?这个时候你要做的就是不让它显示欢迎页面。

 

关于欢迎页面的配置是在/etc/httpd/conf.d/welcome.conf,如果你不想显示欢迎页面,就删除该配置文件,或者将其中的配置给注释掉。

看一下该配置文件的内容,有个映像:

wKiom1QZXHiTKsdcAAEVkmI7raw936.jpg

 

这里面其实有几个要注意的地方,一个是LocationMatch,一个是-Indexes,一个是ErrorDocument,不知你是否都会,这个在后面会聊到,这里就不赘述了。

 

.个人站点配置

         个人站点配置应该说是httpd的一个特色,不过除了提供个人站点的网站来说,基本上在公司里面,我还没见到过用到这个功能,不过了解一下还是有必要的。

 

对于刚接触的人,这个配置还是有点晦涩的,其实httpd.conf配置文件中已经给了很充分的说明,先看一看:
wKioL1QZXJDx99GkAAEnyc_SXb0093.jpg

这个是httpd.conf关于用户个人站点的一段注释内容,这里面很清楚的介绍了要怎么样配置个人站点,怎么样来访问个人站点。(这里我插一句,有人可能觉得我说的好多啊,我的本意就是不光要让你知道怎么配,还要让你知道怎么学习他怎么配,学知识最后还要靠自己)

 

1.要想启用个人站点功能,就必须开启UserDir的功能,取消配置文件中对public_html相关的注释

2.通过浏览器访问的时候,如果接收到一个关于~user的访问请求,就会调用这里的配置,这里的user在访问的时候就是具体的用户名,这里的用户名必须是系统上存在的用户名

3.配置用户的个人站点,必须开启下面的public_html的目录访问设置,而且在每个用户的家目录下都必须创建public_html目录,其实这里的public_html目录可以根据自己的意愿进行修改,只要符合要求就行

4.关于用户个人站点权限的设置,首先要知道的是用户的个人站点所在的目录是每个用户自身的家目录,对于气家目录必须是711的权限,其次在每个个人站点的家目录下要创建public_html目录,该目录的权限必须是755的权限,而在public_html目录下的内容都必须保证全局可读的权限

 

下面以搭建tom用户的个人站点为例,来说明具体的过程:

第一步:创建需要搭建个人站点的用户

wKioL1QZXQihbkprAAEPKQJCf0I330.jpg

第二步:打开httpd.conf配置文件中关于用户个人站点的设置

wKioL1QZXQiAX592AAIqufRj1RE917.jpg

 

第三步:创建用户个人站点目录和测试文件

wKiom1QZXPCiQ61XAADj5z-zitk854.jpg

第四步:设置权限

[root@test1 tom]# cd /home

[root@test1 home]# ls -ld tom

drwx------ 3 tom tom 4096 Sep 17 09:33 tom

[root@test1 home]# chmod 711 tom

[root@test1 home]# ls -ld tom

drwx--x--x 3 tom tom 4096 Sep 17 09:33 tom

[root@test1 home]# cd tom

[root@test1 tom]# ls -l public_html/

total 4

-rw-r--r-- 1 root root 31 Sep 17 09:33 index.html

[root@test1 tom]# ls -ld public_html/

drwxr-xr-x 2 root root 4096 Sep 17 09:33 public_html/

[root@test1 tom]# chown -R tom.tom /home/tom/

[root@test1 tom]# ls -ld public_html/

drwxr-xr-x 2 tom tom 4096 Sep 17 09:33 public_html/

[root@test1 tom]#

 

第五步:重新启动httpd服务

[root@test1 tom]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 tom]#

 

第六步:浏览器测试访问

 wKioL1QZXQjDtFazAADRyA4EbvY426.jpg

 

到这里为止,可以看到tom的个人站点搭建成功。这里的步骤随你个人的习惯,不一定非要一样。

 

但是对于有些人似乎会有点疑问,我也大概知道你会有什么疑问。接下来就针对这些疑问讨论一下:

1.如果系统中有很多用户,默认情况***释掉UserDir disabled这个配置会开启所有用户的个人站点功能,这似乎会存在一种安全隐患,那此时怎么办?怎么样只开启某些人的个人站点呢?

针对这个问题,配置如下:

wKiom1QZXPCwa86vAAAudyfvSPM146.jpg

从上面的配置可见,不再注释掉本身的disabled的设置,然后添加一条UserDir enable username 用来开启具体的用户个人站点即可,这个测试请自行测试了。

 

 

2.从上面的测试可以发现,访问个人站点时必须是~user的形式来访问,有人觉得这样麻烦,能不能就只要加用户名就行,例如:http://10.0.10.11/tom,当然可以,这里有一下几种解决方案.

注意:下面的几种方案配置都是在server config中配置的,不是具体在某个目录中的,也就是在全局中配置的

方案1:使用Alias

配置如下:

Alias /tom/ "/home/tom/public_html/"

上面的配置是做一个/tom/到具体目录的目录别名,当浏览器中访问/tom/时就相当于访问后面的真实目录

但是这种做法有一个问题就是你这里写的是/tom/,则浏览器访问时必须是http://10.0.10.11/tom/,如果你写成了http://10.0.10.11/tom则会报错,如下:

wKioL1QZXWTxbquRAAD9GTau2oY367.jpg

 

方案2:使用Redirect的重定向功能

配置如下:

wKiom1QZXUuCIePpAABp9YqtdLY875.jpg

 

这个配置的好处是,不管你输入的是/tom还是/tom/都会有效,测试如下:

wKioL1QZXWShbLIYAADK8bjP3tc621.jpg

咦,是不是感觉有点熟悉啊,这就是默认访问的形式,当你在浏览器中输入:http://10.0.10.13/tom/时会自动转换成http://10.0.10.11/~tom/ ,从这里也可以看出Redirect会让浏览器中的url发现跳转的,用户可以知道真实的文件路径信息

 

3.使用Rewrite重写规则

         关于Rewrite的重写功能实在是太强大了,这里不做叙述,在后面将针对性的聊一聊,因为强大,所以肤浅,哈哈…..

 

配置如下:
wKiom1QZXUyD_HAkAADEWh-B3EU686.jpg

 

至于这里的配置信息量还是很大的,这里不做解释,你知道使用rewrite能实现这个功能就行

浏览器的测试:

wKioL1QZXWSTOW5jAADOOMjd99w515.jpg

看到没,这里浏览器中输入是什么就是什么,没有跳转,但也实现了功能。这就是rewrite相对Redirect的好处所在。

 

好,关于个人站点的配置就聊到这里。

 

 

.SSL站点配置

         SSL站点也是互联网上重要业务的一个安全途径,使用证书的形式来对客户端进行认证,相比用户名密码认证要安全的多,但是在互联网上对于关键业务,通常会综合好几种认证方式,不单单是一种。

         要想搭建SSL站点,就必须有证书,要有证书就必须配合CA机构,这里采用自建的CA机构来颁发证书

 

1.创建自己的CA机构

 [root@test1 conf.d]# cd /etc/pki/

[root@test1 pki]# ls

CA  ca-trust  java  nssdb  rpm-gpg  rsyslog  tls

[root@test1 pki]#cd tls

[root@test1 tls]# ls

cert.pem  certs  misc  openssl.cnf  private

[root@test1 tls]# vim openssl.cnf

修改其中的一个内容:

dir             = /etc/pki/CA

//注意:这里面CentOS6.5系统中,自带的版本已经是绝对路径了,在早期的版本中都是相对路径,如果不修改成绝对路径,在你签发证书的时候,如果路径不对会报错

 

[root@test1 pki]# cd /etc/pki/CA/

[root@test1 CA]# ls

certs  crl  newcerts  private

[root@test1 CA]# touch index.txt

[root@test1 CA]# echo "01" > serial

[root@test1 CA]# ls

certs  crl  index.txt  newcerts  private  serial

[root@test1 CA]# cd private/

[root@test1 private]# ls

[root@test1 private]# cd ..

[root@test1 CA]# ls

certs  crl  index.txt  newcerts  private  serial

 [root@test1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

.............................+++

......................+++

e is 65537 (0x10001)

[root@test1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:jiangsu

Locality Name (eg, city) [Default City]:suzhou

Organization Name (eg, company) [Default Company Ltd]:woniu

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:test1.lxm.com

Email Address []:

[root@test1 CA]#

 

到这里为止,一个简单的CA证书机构就基本构建好了

2.web站点申请证书

[root@test1 CA]# cd /etc/httpd

[root@test1 httpd]# ls

conf  conf.d  logs  modules  run

[root@test1 httpd]# mkdir ssl

[root@test1 httpd]# cd ssl

[root@test1 ssl]# openssl genrsa -out httpd.key 2048

Generating RSA private key, 2048 bit long modulus

............................................................................+++

.......................+++

e is 65537 (0x10001)

[root@test1 ssl]# openssl req -new -key httpd.key -out httpd.csr -days 3650

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:jiangsu

Locality Name (eg, city) [Default City]:suzhou

Organization Name (eg, company) [Default Company Ltd]:woniu

Organizational Unit Name (eg, section) []:IT

Common Name (eg, your name or your server's hostname) []:10.0.10.11    //这里的主机名一定要注意,必须和你的浏览器中访问的主机名一致,我这里图方便就用ip了,那么浏览器中访问的时候就必须用ip来访问

Email Address []:

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

[root@test1 ssl]# openssl ca -in httpd.csr -out httpd.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Sep 17 03:52:53 2014 GMT

            Not After : Sep 17 03:52:53 2015 GMT

        Subject:

            countryName               = CN

            stateOrProvinceName       = jiangsu

            organizationName          = woniu

            organizationalUnitName    = IT

            commonName                = 10.0.10.11

        X509v3 extensions:

            X509v3 Basic Constraints:

                CA:FALSE

            Netscape Comment:

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:

                4C:6D:2E:B1:BD:8E:D7:9F:1C:A1:33:CC:32:BD:26:09:1E:0D:C2:48

            X509v3 Authority Key Identifier:

                keyid:AD:5F:E5:75:D2:B7:EC:51:9D:D9:F8:AB:38:09:98:3E:B0:44:DD:6F

 

Certificate is to be certified until Sep 17 03:52:53 2015 GMT (365 days)

Sign the certificate? [y/n]:y

 

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

[root@test1 ssl]# ls

httpd.crt  httpd.csr  httpd.key

[root@test1 ssl]#

 

到这里为止,证书申请就完成了。

 

3.配置ssl

         对于使用rpm安装的httpd来说,还要安全另外一个软件包来提供ssl站点的功能。

[root@test1 ssl]# yum -y install mod_ssl

[root@test1 ssl]# cd /etc/httpd/

[root@test1 httpd]# ls

conf  conf.d  logs  modules  run  ssl

[root@test1 httpd]# cd conf.d

[root@test1 conf.d]# ls

README  ssl.conf  welcome.conf

[root@test1 conf.d]#

从上面的信息可见,多出了一个ssl.conf的文件,这个文件就是用来配置ssl站点的

 

[root@test1 conf.d]# vim ssl.conf

修改下面两句话为你要使用的证书和私钥文件

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

 

[root@test1 conf.d]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

[root@test1 conf.d]# netstat -nultp | grep httpd

tcp        0      0 :::80                       :::*                        LISTEN      1934/httpd         

tcp        0      0 :::443                      :::*                        LISTEN      1934/httpd         

[root@test1 conf.d]#

[root@test1 conf.d]#

保存退出后,重启httpd进程,此时发现443端口已经正常监听了。

 

4.浏览器访问测试

wKiom1QZXbGC96CXAAG0WhaN9p8715.jpg

此时浏览器说安全证书有问题,这个先不管,到这一步可以说明证书访问已经生效,只是因为CA机构是自己建立的,默认情况下浏览器还不信任,所以会出现这个界面,先点击:继续浏览此网站,看是否能够访问。

wKioL1QZXcrjmY6WAAD1vO9lXN8666.jpg

 

从上面的信息显示,是可以访问的,但是提示证书错误的信息。这个不要紧,下面问题讨论会解决这个问题。

 

到这里基本上ssl站点,配置就完成了,但是还不够完美,有几个问题需要解决下:

1.提示网站安全证书有问题

         这个问题是因为浏览器不信任自建的CA机构,此时只要将自建的CA机构的根证书导入到浏览器中即可。

步骤一:先从CA中导出cacert.pem文件

         这里其实就是将linux中的cacert.pem文件传到客户端

步骤二:导入cacert.pem到受信任的根证书颁发机构

wKiom1QZXbLxd6zaAAFtPgtH9tc458.jpg

 

如上图所示,打开浏览器选项这个选项卡,找到其中的内容,然后找到证书,并点击:

wKioL1QZXcrxRJc2AAJD3Aj9rgU085.jpg

 

如上信息所示,选择受信任的根证书颁发机构,然后点击导入证书:

wKiom1QZXbKRW4MQAAFC8S_RwZw017.jpg

如上图所示,点击下一步:

wKiom1QZXfni-B13AAEo0w95zTg171.jpg

如上图所示,选择所要导入的证书文件,然后点击下一步:

 

 

wKioL1QZXhHS74E_AADq7y1efe0812.jpg

如上图所示选择,然后点击下一步:

wKiom1QZXfnhGi9YAAE_w0aS3Xw743.jpg

如上图所示,点击完成

wKioL1QZXhHws1knAAGvOt0lx70386.jpg

如上图所示,点击是:

wKiom1QZXfmS3BNdAABA06xFOcs549.jpg

如上图所示,导入成功,此时点击确定就完成了CA机构根证书的导入工作。

 

wKioL1QZXmTAeImMAAIjywdRswM588.jpg

 

如上图可见,此时在受信任的根证书颁发机构中就有了我们自建的CA根证书。

到这里在使用浏览器访问测试:
wKiom1QZXkvgw87WAADnD0hw_eE686.jpg

这是访问的时候不在提示证书存在安全问题了,而且此前提示证书错误的信息已经没有了,变成了一把小锁,看看小锁的内容:

wKioL1QZXmSTlrqiAACQdhlbiJs751.jpg

 

到这里,基本上使用https协议来访问是没有问题了。

 

2.使用了ssl站点之后,不想在使用明文访问

         对于这个问题好解决,只要在配置文件中,取消对80端口或者其他端口的监听即可。

 

到此,SSL站点的搭建,就聊到这里。这里可能有一个问题就是CA证书机构的问题,这个在后续博文中再做介绍。

 

.日志配置

         关于日志的配置比较简单,在配置文件中,主要是这几个配置指令:ErrorLog,CustomLog,LogFormat

ErrorLog:该指令用来配置错误日志

CustomLog:该指令用来配置站点的访问日志

LogFormat:该指令用来配置访问日志的记录格式,最后一个参数是日志格式的名称,用来在CustomLog中进行调用的。

 

配置文件中默认的LogFormat配置如下:

wKiom1QZXkyCGRgCAABoN8YMr9E261.jpg

默认的配置基本上已经够用,对与日志记录格式的配置跟nginx是一样的,都是内置变量的组合,因此要想根据需要配置合适自己的日志格式,可能要了解一下httpd内部都有那些变量可以使用,这在man手册中是有的

 

这里我要说一下的就是,当处于后端服务器的角色时,为了在日志记录真实的客户端地址,可能需要加一个变量,例子如下:
LogFormat "%{X-Forwarded-For} %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

还有一个问题可能就是日志的切割问题了,对于日志的切割可以写第三方脚本来切割,这里就不谈了,但是这里要讲一下的就是httpd配置文件里面使用rotatelogs来切割日志文件的使用。这个也比较简单,下面给出一个简单的例子:

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log 10"  combined

这里要注意的是必须以管道符|开头,其他的就是rotatelogs这个命令的用法,请自行查看了。

 

.web页面列表索引配置

         这个功能的配置,通常用在提供下载服务的站点上,将目录下的内容列出来供下载,配置也比较简单 ,但是有些注意点,如果你不知道,可能你配不出来。

  1. 必须先开启相应目录的Indexes功能

Options Indexes

2.DirectoryIndex 设置的目录索引的文件在该目录下必须不存在,也就是说这两个必须不能想对应,否则会显示找到的文件的内容,而不是列表

3.删除欢迎信息页面,否则在找不到索引文件的情况下,会默认显示欢迎页面

 

一个配置小例子:

<Directory  “/var/www/html”>

Options Indexes FollowSymLinks

…… //这里没写全

</Directory>

 

DirectoryIndex a  //把索引文件改成其它的

 

#mv /etc/httpd/conf.d/welcome.conf /root  //将欢迎页面的配置内容移除

 

浏览器访问测试:

wKioL1QZXmSB4FLBAAE2ohj0JPs586.jpg

从上面的信息可以看出,列表能够正常显示,如果你不这样做,你可能会出这样或那样的错误,自己测试看效果。

 

 

.htaccess配置

         htaccess这个文件是httpd中默认的一个安全机制,放在某个特定的目录下面,可以对该目录以及其下面的子目录进行访问权限的控制,还可以设置重写规则等。下面用一个常用的例子来说明气使用,并且还要用非htaccess文件名来实现功能。

案例:实现用户访问默认站点时需要用户名密码认证

 

1.修改默认的htaccess访问控制文件

 

wKiom1QZXqCjBwo-AABBmPcWnl4567.jpg

 

如上所示,修改配置文件,注释掉默认的htaccess的配置,修改成.httest文件

 

2.修改默认站点目录/var/www/html支持.httest文件的扫描

wKioL1QZXrmQFmb-AAAacPirhrg692.jpg

当然这里并不一定要设置为All,比如你想设置用户认证则开始AuthConfig,如果想使用rewrite,则开启FileInfo

 

3.创建/var/www/html/.httest文件,内容如下:

wKiom1QZXqHT3NzEAACz9jFpHm0795.jpg

 

4.创建htpasswd.user 文件:

wKioL1QZXrnzsqRUAABm4JoRKnI689.jpg

 

5.浏览器访问测试

wKiom1QZXqHzRICVAAFsNKJdyK8571.jpg

看到没,要求认证,输入用户名和密码,点击确定后,则正常访问:

wKioL1QZXu6SdFfoAADbwPnCGbU411.jpg

 

到这里,已经能够验证htaccess访问是个什么样的机制了,而且这里是改了这个文件名一样可以控制,这一点是你需要知道的,不要认为就必须使用.htaccess这个文件名。

 

 

.ErrorDocument实现错误页面重定向

         httpd.conf配置文件里面,内置了ErrorDocument这个指令来实现错误的重定向,根据不同的错误代码重定向到不同的错误页面,这些页面都是可以自己设计的,这样可以给客户一个更好的错误体验。

         至于配置很简单,看一下httpd.conf配置文件的默认例子就可以了,一些要点在httpd.conf配置文件解析中也做了说明,这里就不在赘述了。

 

 

.Alias url映射配置

         这个功能更具体的说应该是扩展站点内容,映射url到系统特定的目录区域。本来在域名所对应的站点外的内容是无法访问的,为了不改变默认站点的内容而又能扩展访问到另一个目录中,这个配置有很有用了。

 

这里做一个案例,对比看一下效果:

 

wKiom1QZXtbAqN7mAAC1s5GVAJA210.jpg

从上面的信息可见,现在默认站点目录下,只有上面所示内容,此时如果我在浏览器中输入:http://10.0.10.11/test/会有什么情况呢?

wKioL1QZXu_jxo2lAAEHT_q3fzU900.jpg

从上面的信息很明显返回了404的错误,这也是预料之中的,如果想这个url能够访问,此时就必须在默认站点目录下创建test这个文件或者test这个目录,在该目录下在创建站点文件。

         此时如果在根目录下有一个test目录,当输入上面的url地址时,想访问这个目录怎么办呢?这时就利用了Alias的功能。

[root@test1 html]# cd /

[root@test1 /]# pwd

/

[root@test1 /]# ls

bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

[root@test1 /]# mkdir test

[root@test1 /]# cd test

[root@test1 test]# pwd

/test

[root@test1 test]# echo "<h1>this is a test for alias</h1>" > index.html

[root@test1 test]# chown -R apache.apache /test/

[root@test1 test]# ls -l

total 4

-rw-r--r-- 1 apache apache 34 Sep 17 16:04 index.html

[root@test1 test]# pwd

/test

[root@test1 test]#

 

上面的配置创建了相应的test目录和测试文件,接下来配置httpd.conf文件,设置Alias url和目录的映射

wKiom1QZXteyOM5YAACHZUVfPaY412.jpg

配置文件中,配置如上,这里顺便说下的是,只要是针对目录,一般都会设置一下目录的权限,如上面的Direcotry的设置。

 

接下来重启httpd进程,浏览器访问测试:
wKioL1QZXu-yhK_1AADc8h8wVCM746.jpg

到此,可以正常访问了。

 

关于Alias还有一个对应的是ScriptAlias的设置,这个设置表示该目录的内容都是可执行的CGI脚本,这里就不做介绍了。

 

.Redirect 重定向配置

         Redirect重定向的配置功能比较简单,而且是针对url的重定向。如今用的不多,多数都是用的rewrite,因为Redirect会导致浏览器中的url跳转。但是其功能还是需要知道的,这里就不在配置了,在上面将个人站点配置时应经涉及了。

         这里聊一下几个选项的含义:

使用语法:
Redirect [status] URL-path URL

如果没有指定status参数,则重定向是"临时的"(HTTP status 302)。也就是对客户端来说,此资源的位置变动是临时性的。此status参数可以返回以下HTTP状态码:

 

permanent

返回一个永久性重定向状态码(301),表示此资源的位置变动是永久性的。

temp

返回一个临时性重定向状态码(302),这是默认值。

seeother

返回一个"参见"状态码(303),表示此资源已经被替代。

gone

返回一个"已废弃"状态码(410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则URL参数将被忽略。

status可以被指定为数字状态以返回其他状态码。如果此状态在300-399之间,则必须提供URL参数,否则将被忽略。注意,此状态码必须是Apache已知的(参见http_protocol.c中的send_error_response函数)

 

上面的内容贴的是手册中的,更多的信息请看手册。

 

.虚拟主机配置

         虚拟主机的配置可以说是任何web软件的重重之重,一个服务器可能会有搭建很多个web站点,这是就需要区分不同的站点。区分不同的站点通常有三种方式:基于IP的,基于端口号的,基于域名的虚拟主机。用的最多的就是基于域名的虚拟主机,这里也只介绍基于域名的虚拟主机的配置。

1.一个常规的基于域名的虚拟主机配置

NameVirtualHost *:80  //这一行必须开启

<VirtualHost *:80>

    DocumentRoot /data/website

    ServerName tv.lxm.com

    ErrorLog logs/tv.lxm.com-error_log

    CustomLog logs/tv.lxm.com-access_log common

</VirtualHost>

上面就是一个基于域名的虚拟主机的配置,如果有多个站点就配置多个就行。然后创建相应的站点目录和web文件即可

 

2.泛域名匹配

         在站点使用过程中,可能会存在互联网上一些恶意的解析,将服务器上没有的域名也解析过来,此时如果没有配置相应的措施,则会显示第一个站点的内容,这个就会被不良的人所利用,也可以说是一个安全问题。

         为了解决这个问题,通常会配置一个默认的站点,放在所有站点的前面,来匹配恶意的解析,配置如下:

<VirtualHost _default_:80>

    DocumentRoot /data/default

</VirtualHost>

 

看到没,这样设置一个默认的站点,显示你想告知恶意用户的任何信息。

 

 

十一.Rewrite配置

         Rewrite的功能实在是太强大,官方有专门解释URL重写规则的文章,这里呢我也不做深入解释,只是提个醒,这是你必须知道和掌握的东西,大概的使用,在前面的个人站点中已经可见一番。

另外给两个连接,可以看看:

http://apache.jz123.cn/rewrite/rewrite_guide.html

http://apache.jz123.cn/rewrite/rewrite_guide_advanced.html

 

 

 

十二.proxy配置

         关于apache的代理功能,用的不是很多,尤其是在现在前端代理盛行的情况下。但是在和tomcat的整合情况下,用的就是apache的代理功能。这里因为没有测试环境,就不说了,在下次博文介绍tomcat的时候再聊一聊。哈哈,有点偷懒了

 

 

到此,关于httpd2.2必知必会内容就介绍到这里了,当然不一定全面,但是以上内容是必会的内容。所以有必要去掌握它。

 

结束!!!

         笨蛋的技术------不怕你不会!!!