首页 > 代码库 > Httpd 配置相关基础详解

Httpd 配置相关基础详解

1、关闭欢迎页面

在浏览器中输入IP地址,则会出现Apache默认的欢迎页面,如果想关闭,则;

修改/etc/httpd/conf.d/welcome.conf……………………即重命名(不以.conf结尾)或删除

如:

[root@Burgess~]# cd /etc/httpd/conf.d/

[root@Burgessconf.d]# mv welcome.conf welcome.conf.burgess   ……….将文件后缀更改,则不会再显示默认欢迎页面

[root@Burgessconf.d]# service httpd reload   ………………………将文件reload之后,刷新页面,则欢迎页面没了

Reloadinghttpd:


2、指定监听的地址和端口

[root@Burgess ~]# cd /etc/httpd/conf

[root@Burgessconf]# ls

httpd.conf  magic

 [root@Burgess conf]#vim httpd.conf

#Listen80

Listen172.16.249.120:80

Listen8080

解析:脚本用/Listen回车找到Listen 80 ,此为监听本机所有IP的80端口,指定IP;在监听一个8080端口,表示监听本机的所有IP端口

[root@Burgessconf]# service httpd restart     …………………………….此处需要restart,不能reload

Stoppinghttpd:                                           [  OK  ]

Startinghttpd:                                            [ OK  ]

[root@Burgessconf]# ss -tnl                   ……………………………………….查看监听是否生效

State      Recv-Q Send-Q                                   Local Address:Port                                     PeerAddress:Port

LISTEN     0     128                                                :::8080                                              :::*    

LISTEN     0     128                                     172.16.249.120:80                                                 *:* 

修改后:在浏览器上,输入172.16.249.120可以访问到网页;或者再加上  “:8080”也可以访问到相同内容

总结用法:Listen[IP:]PORT

注意:Listen可以出现多次

 

3、持久连接(persistent connection)

图示: (更多内容请参考:http://zh.wikipedia.org/wiki/HTTP%E6%8C%81%E4%B9%85%E8%BF%9E%E6%8E%A5;http://www.cnblogs.com/protorock/archive/2007/06/10/778298.html)

技术分享


打开/etc/http/conf/httpd.conf文件,可修改下面信息

KeepAlive Off|On  ………………关闭或打开持久连接

MaxKeepAliveRequests 100   数量上限;On的情况下生效

KeepAliveTimeout 15   时间上限,单位second;On的情况下生效

 

4、MPMs ( Multi-Processing Modules)多处理模块

选项查看帮助 httpd -h

          httpd -l: 显示编译进核心的模块

          httpd -M: 显示DSO模块 (动态装卸载)

以下内容查看及设定在httpd服务脚本/etc/sysconfig/httpd

          <IfModule prefork.c>

          StartServers       8……………………服务器默认启动进程数   (可以用psaux | grep httpd 查看;一个主进程,八个子进程,主进程只启动子进程)

          MinSpareServers    5………………..最少空闲进程数

          MaxSpareServers   20…………………..最大空闲进程数

          ServerLimit      256…………………………(服务器能响应的最多进程数,即client同时请求超过256个时候,则需要等待;假设一个进程处理时间需要2秒;则一天可处理进程数量为30*60*24=11059200,但网站访问量有峰值的,所以根据此选择配置服务器数量及带宽;计算器命令bc;最大并发数为1024)

          MaxClients       256……………………..与上面的道理一样,小于等于ServerLimit

          MaxRequestsPerChild 4000  ……………每个子进程响应请求次数不能超过4000次,若超过了,则销毁之,再创建一个

          </IfModule>

worker与上面的prefork差不多,不再赘述

          <IfModule worker.c>

          StartServers        4

          MaxClients        300

          MinSpareThreads    25

          MaxSpareThreads    75

          ThreadsPerChild    25

          MaxRequestsPerChild 0  ………………不作次数限制

          </IfModule>

思考:以上面为参考,worker最多可以启动多少个进程?

5、 DSO 

 查看模块:httpd  -M     (后面为static的表静态;后面为share的为动态模块)

卸载模块:打开/etc/sysconfig/httpd,查找模块信息,若不想用某模块,可在其前面用#注释掉

          LoadModule foo_module(模块名称)modules/mod_foo.so(模块路径,相对路径,相对于/etc/httpd/;但其为符号链接模块所在路径)

注意:修改了装载的模块后,httpd -t: 检查配置文件语法或者用service httpd configtest;reload即可生效;

 

6、指定Main Server(中心主机)的docroot (web资源服务器,负责发送预先创建好的或动态生成的内容;此些内容的放置位置称为docroot;全称:DocumentRoot"/var/www/html",也可在/etc/sysconfig/httpd查找到其定义)

例如:修改docroot为根下的/www/burgessdocs,操作如下;

 [ root@Burgess ~]# cd/etc/httpd/conf

 [root@Burgess conf]# ls

httpd.conf  httpd.conf~ magic

[root@Burgess conf]#vim httpd.conf    

[root@Burgess conf]#mkdir /www/burgessdocs  -pv

[root@Burgess conf]#vim /www/burgessdocs/index.html ……………………………..创建一个主页

#DocumentRoot  “/var/www/html” ……………………..用#注释掉此行

DocumentRoot  “/www/burgessdocs” ………………新加行写下新路径,也可在旧的路径直接改,但建议新加一行

[root@Burgess conf]#httpd -t

Syntax OK

[root@Burgess conf]#service httpd reload

Reloading httpd:

可以打开浏览器,输入IP,查看是否有内容,验证

注意:如果操作都没有问题,权限也没有问题,但是网页内容显示没有访问权限,则可以用getenforce 查看SELinux启用模式是否为disabled,若不是,则在/etc/selinux/config里面修改之。

 

7、 站点路径访问控制

分为文件系统与URL路径;如:想访问/www/burgessdocs/bbs/upload/a.rar路径,以(6)docroot为例;

文件系统路径:/www/htdocs/bbs/upload/a.rar

URL路径:http://Server_IP/bbs/upload/a.rar          

基于本地文件系统路径

          <Directory"/path/to/some_directory">

          </Directory>

基于URL

          <Location "/path/to/some_url">

              </Location>

 

8、 Directory容器中的访问控制定义

8.1 Options  定义页面如何展示给clients;在/etc/httpd/conf/httpd.conf 中

   当有Indexes时;演示:在以上步骤执行的情况下,修改<Directory“/www/html”>为下图所示路径,当有Idexes情况下,如下图所示

技术分享


保存退出后reload一下,之后;

[root@Burgess conf]#cd /www/burgessdocs

[root@Burgessburgessdocs]# ls

index.html  index.html~

[root@Burgessburgessdocs]# mv index.html   a.html

 

打开浏览器页面,则显示;

 技术分享


a.html可下载;点开a.html则显示信息

技术分享 



删掉Indexes之后,刷新页面;

 

技术分享

 

如果提供a.html路径访问;http://172.16.249.120/a.html;则显示Hello Chicago!信息

解析:Indexes:当访问的路径下无默认的主页面时,将所有资源以列表形式呈现给用户;危险,慎用,如提供ftp一样的下载网站则可用,大多数情况下要把Idexes删掉;详细请参考:http://www.2cto.com/os/201212/176662.html

FollowSysLinks:跟随符号链接指向的原文件;

演示其功能,创建fstab.html指向/etc/fstab文件;

[root@Burgessburgessdocs]# pwd

/www/burgessdocs

[root@Burgessburgessdocs]# ln -sv /etc/fstab /www/burgessdocs/fstab.html

`/www/burgessdocs/fstab.html‘-> `/etc/fstab‘

[root@Burgessburgessdocs]# ll

total 8

-rw-r--r--. 1root root 117 Dec 13 01:18 a.html

lrwxrwxrwx. 1root root  10 Dec 13 03:14 fstab.html ->/etc/fstab

-rw-r--r--. 1root root 117 Dec 13 01:11 index.html~

在172.16.249.120后指定fstab.html; http://172.16.249.120/fstab.html;

网页信息显示如下;

技术分享 


解析:如果开启FollowSysLinks;而不小心将符号连接指向一个敏感资源,则会被其他人查看到,所以最好关闭此功能,-FollowSysLinks(前面加上-,为关闭);</Directory>定义的段,此段之外的其他段也适用,所以删掉某选项,可能还会起作用,所以用“-”关闭

   None: 一个也没有;

   All: 所有

8.2 AllowOverride None   基于.htaccess隐藏文件的访问控制,一般用不到;详见/etc/httpd/conf/httpd.conf

8.3  基于IP的访问控制

   白名单:Order allow,deny

          Allow from all

黑名单:Order deny,allow

                Deny from all

                 from后面能接受的地址格式:

                   IP, NetworkAddress

                 网络地址格式:

                        172.16

                        172.16.0.0

                        172.16.0.0/16

                        172.16.0.0/255.255.0.0

Eg:只允许172.16网段的访问,且拒绝172.16.100.16访问,则;

Order allow,deny

                  Deny from172.16.100.16

                 Allow from 172.16   

在/etc/httpd/conf/httpd.conf更改为上面信息;

刷新页面显示(172.16.100.16为本机IP地址)

技术分享 


    可以用 tail /var/log/httpd/error_log查看到本机IP地址denied信息

 

9、 定义默认的主页面

          DirectoryIndex index.html index.html.var  可以列出多个,自左向右找,如果第一个没有,则寻找第二个….

 

10、 配置日志功能  (默认开启)

          ErrorLog logs/error_log:定义错误日志文件路径;其符号链接至/var/log/httpd,可以ll /etc/httpd查看其链接;以后可能会用专门的日志收集磁盘或服务器

          LogLevel warn   :比warn级别高的及包括warn信息都会被收集

 

          LogFormat "%h %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined

 

                 %h  Remotehost    客户端(远程)主机

                 %l   Remotelogname (from identd, if supplied)    远程登录用户名,大多数情况都为空,用处不大

                 %u  Remote user(from auth; may be bogus if return status (%s) is 401) 用户

                 %t  Time therequest was received (standard english format) 时间

                 %r  First lineof request   请求报文的首行

                        (method  url  version )

                 %s  Status. Forrequests that got internally redirected, this is the status of the *original*request --- %>s for the last. 记录请求时的状态码(响应码)最后一个报文的响应码

                 %b Size ofresponse in bytes, excluding HTTP headers. In CLF format, i.e. a ‘-‘ ratherthan a 0 when no bytes are sent.  响应报文内容的大小(字节为单位)

                 %{Foobar}i Thecontents of Foobar: header line(s) in the request sent to the server.

                        %{referer}i: 跳转至当前页面之前来源的上一次所在的页面;

                        %{User-Agent}i:用户代理(浏览器);

 

                 详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

 

          CustomLog logs/access_log combined: 访问日志

          指令        日志文件       日志格式名称

 

11、 curl命令

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxytunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

curl的常用选项:

 -A/--user-agent <string> 设置(伪装)用户代理发送给服务器

       Eg: [root@Burgess~]# curl http://172.16.249.120/a.html

<html>

      <head>

             <title>This is Burgess‘s page</title>

      </head>

      <body>

             <h1>Hello Chicago!</h1>

      </body>

</html>

[root@Burgess ~]# tail -f/var/log/httpd/access_log

172.16.249.120 - -[13/Dec/2014:05:13:01 +0800] "GET /a.html HTTP/1.1" 200 117"-" "curl/7.19.7(x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18libssh2/1.4.2"

[root@Burgess ~]# curl http://172.16.249.120/a.html

[root@Burgess ~]# tail -f/var/log/httpd/access_log

     172.16.249.120 - - [13/Dec/2014:05:18:36+0800] "GET /a.html HTTP/1.1" 200 117 "-" "Opera/15.1"

 -basic 使用HTTP基本认证

--tcp-nodelay 使用TCP_NODELAY选项;在发送报文时候禁用Nagle算法(打包n个报文一块发送,用一个IP首部,节约带宽)

-e/--referer <URL> 来源网址

Eg:[root@Burgess~]# curl -A "Opera/15.1" -e "www.burgess.com/index.html" http://172.16.249.120/a.html      ………….. 伪装成www.burgess.com/index.html访问

[root@Burgess ~]# tail -f/var/log/httpd/access_log

172.16.249.120 -- [13/Dec/2014:05:34:50 +0800] "GET /a.html HTTP/1.1" 200 117 "www.burgess.com/index.html""Opera/15.1"

 --cacert <file> CA证书 (SSL)

 --compressed 要求返回是压缩的格式

-H/--header <line>自定义头信息传递给服务器

Eg:用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf,修改信息如下

技术分享

技术分享


[root@Burgess ~]#curl -H "testheader:burgess" http://172.16.249.120/a.h

[root@Burgess ~]#tail -f /var/log/httpd/access_log

172.16.249.120 -- [13/Dec/2014:06:36:08 +0800] "GET /a.html HTTP/1.1" 200 117"-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "burgess"

-I/--head 只显示响应报文首部信息 (打开一个网页,按键F12为调试工具,可以查看各种首部等信息)

         Eg: [root@Burgess ~]# curl -I http://172.16.249.120/a.html

HTTP/1.1 200 OK

Date: Fri, 12 Dec 201421:41:31 GMT

Server: Apache/2.2.15(CentOS)

Last-Modified: Fri, 12 Dec2014 17:18:52 GMT

ETag:"a0011-75-50a081641943f"

Accept-Ranges: bytes

Content-Length: 117

Connection: close

Content-Type: text/html;charset=UTF-8

 --limit-rate <rate> 设置传输速度

-u/--user<user[:password]>设置服务器的用户和密码

 -0/--http1.0 使用HTTP 1.0  version;

用法:curl [options][URL...]

         

12、路径别名

    docroot路径映射:

          docroot: /www/burgessdocs

          如果访问http://172.16.100.16/bbs/images/obama.html

          则对应的172.16.100.16之后的路径/www/htdocs/bbs/images/obama.html

   路径别名:

                  定义/bbs  是/web/forum/路径

          如果http://172.16.100.8/bbs/images/obama.html

          则对应文件路径/web/forum/images/obama.html

   定义方法:

          Alias /URL/ "/path/to/some_directory/"

          Eg:

root@Burgess ~]# mkdir/web/forum/images -pv

mkdir: created directory`/web‘

mkdir: created directory`/web/forum‘

mkdir: created directory`/web/forum/images‘

[root@Burgess ~]# vim/web/forum/images/obama.html

<h1>BrackObama<h1>

之后用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf,找一个有Alias的地方,添加信息

Alias /bbs/  “/web/forum/”  ………………………………….bbs及forum后面斜杠可以省略,但要保持一致;

[root@Burgess ~]#service httpd reload

通过浏览器访问,则显示信息如下;而不是/www/burgessdocs下面的信息

 技术分享


应用:当我们的主机作为web服务器,访问docroot外的路径下的文件时,就会用到Alias

13、 设定默认字符集

   AddDefaultCharset UTF-8  (在配置文件/etc/httpd/conf/httpd.conf)

   常用字符集:UTF-8, GBK, GB2312, GB18030

 

14、基于用户的访问控制

   14.1质询:

          WWW-Authenticate:服务器用401状态拒绝客户端请求,说明需要用户提供用户名密码;

   14.2认证:

          Authorization: 客户端填入账号和密码后重新发出请求;包含认证算法、用户名和密码;都为明文的不安全,所以要加上认证方式

   14.3安全域:security realm

          docroot: /www/htdocs/

                               admin/

                               finance/

   14.4认证方式:

                基本认证:basic(基于Base64编码,通过抓包,解码,可以得到用户信息)

                摘要认证:digest (很多浏览器不支持,很少用到,比基本认证安全;)

若用到基本认证,则,

(a)先检查/etc/httpd/conf/httpd.conf,是否有以下几个重要modules

LoadModuleauth_basic_module modules/mod_auth_basic.so

LoadModuleauthn_file_module modules/mod_authn_file.so

LoadModuleauthz_host_module modules/mod_authz_host.so

LoadModuleauthz_user_module modules/mod_authz_user.so

(b)假设/www/burgessdocs/admin/index.html 对于用户访问时需要基本认证,则

[root@Burgess ~]# cd/www/burgessdocs/

[root@Burgess burgessdocs]# ls

a.html  fstab.html index.html~

[root@Burgess burgessdocs]#mkdir admin

[root@Burgess burgessdocs]# cdadmin/

[root@Burgess admin]# vim index.html

[root@Burgess admin]# cd ..

[root@Burgess burgessdocs]# ls

admin  a.html fstab.html  index.html~

[root@Burgess burgessdocs]# mva.html index.html …………………为了便于访问,将a.html 改名为 index.html

(c)定义security realm

用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf

<Directory"/www/burgessdocs/admin">

                     Options None 

                     AllowOverride None 

                     AuthType Basic  …..认证类型

                     AuthName "Burgess AdminArea"   安全域名,自定义

                     AuthUserFile/etc/httpd/users/.htpasswd  认证文件,即存放的认证密码、用户名等信息,与/etc/passwd/无关,一般用隐藏文件存放;路径可自定义,路径目录若没有需要创建;

                     Require  valid-user   …………………允许所有合法用户访问,即有密码  (如果规定Kevin跟James访问则Reqire user Kevin James,若还有用户则可以在其后面列出;Require valid-user: 允许账号文件中的所有有账号密码的用户访问,Require后注意所有用户与列出用户书写方式的区别

               </Directory>

(d) 提供用于认证的文件,了解htpasswd命令应用(htpasswd - Manage user files for basic authentication)

htpasswd [options]password_file username

                 -c: 添加第一个用户时自动创建账号文件;

                 -m: 以md5格式加密密码;

                 -s: 以sha格式加密密码;

                 -D: 删除指定用户

双击原来的shell,生成新shell 2,在/www/burgessdocs/执行以下命令

[root@Burgess burgessdocs]#htpasswd -c -m /etc/httpd/users/.htpasswd Kevin   ……………………第一次创建用户密码用-c

New password:                                                                                      ……………………….密码为burgess

Re-type new password:

Adding password for userKevin

 [root@Burgess burgessdocs]# htpasswd -m/etc/httpd/users/.htpasswd James

New password:                                                                                      ……………………….密码为burgess

Re-type new password:

Adding password for userJames

[root@Burgess burgessdocs]#tail /etc/httpd/users/.htpasswd   查看密码内容,为密文(.htpasswd隐藏文件,查看隐藏文件用ls -a 或ls -al)

Kevin:$apr1$bFvZ.CZt$JJRF2kAUnh19NGcAR.0G9/

James:$apr1$Gs65LvZ2$WUgyN14nAg2Luffv5FWQU1

在shell1中保存配置文件,检查语法错误,重新加载,然后查看浏览器网页http://172.16.249.120/admin ;显示页面如下;

技术分享


这时就可以输入用户名与密码登陆查看信息了

如果只想让Kevin登陆,不让James登陆,可以修改 Require后面信息,     

(e)组认证

          示例:[root@Burgess~]# cd /etc/httpd/

[root@Burgesshttpd]# mkdir groups

[root@Burgesshttpd]# cd groups/

[root@Burgessgroups]# vim .htgroup  

NBAgr:Kevin Lebron   ……………………………组名NBAgr  

                                   [root@Burgessgroups]# httpd -t

Syntax OK

Cd 到/etc/httpd/conf

[root@Burgess conf]#vim httpd.conf

<Directory"/www/htdocs/admin">

                  Options None

                    AllowOverride None

                    AuthType Basic

                    AuthName "Admin Area"

                    AuthUserFile /etc/httpd/users/.htpasswd

                    AuthGroupFile /etc/httpd/groups/.htgroup

                    Require group GRP1, ...

                 </Directory>   

[root@Burgess conf]#httpd -t

Syntax OK

[root@Burgess conf]#service httpd restart

Stopping httpd:                                           [  OK  ]

Starting httpd:                                           [  OK  ]

                                 用户Lebron为新加的,步骤略,在浏览器中可演示,Lebron Kevin可以登陆,James不能登陆

15、 虚拟主机:一个物理服务器服务于多个站点:每个站点通过一个虚拟主机来实现;

   15.1 httpd支持三种类型的虚拟主机:

          基于IP

          基于Port

          基于Host  ………………最常用的

          注意:一般使用虚拟主机需要取消Main Server; 注释DocumentRoot指令即可(/etc/httpd/conf/httpd.conf);

   15.2定义虚拟主机:

                   15.2.1基于IP;(环境:eth0: 172.16.249.120:80 ; eth0:0  172.16.249.121 ;)     

                         添加网卡 ifconfigeth0:0  172.16.249.121

                           用vim打开/etc/httpd/conf/httpd.conf

                           将DocumenetRoot“/www/burgessdocs”用#注释掉(如果Droot没有更改,则是注释掉DocumentRoot “/www/html”)

添加虚拟主机 

<VirtualHost 172.16.249.120:80>

                                     ServerName www.burgess.com

                                     DocumentRoot “/Vhosts/www.burgess.com”

                          <\VirtualHost>

                             <VirtualHost 172.16.249.121:80>

                                     ServerName www.burgess.org

                                     DocumentRoot “/Vhosts/www.burgess.com”

<\VirtualHost>

将之前更改的监听端口,更改为默认,即:LISTEN 80 ,其他修改的LISTEN信息注释掉;

保存退出,检查语法httpd -t  

[root@Burgess conf]# mkdir -pv/Vhosts/www.burgess.{com,org} …………………….创建Droot

mkdir: created directory`/Vhosts‘

mkdir: created directory`/Vhosts/www.burgess.com‘

mkdir: created directory`/Vhosts/www.burgess.org‘

[root@Burgess conf]# vim/Vhosts/www.burgess.com/index.html    ……………………内容为<h1>Like A Fish In Water<\h1>

 [root@Burgess conf]# vim/Vhosts/www.burgess.org/index.html    ………………………….内容为<h1>Beauty lies inthe lover’s eyes<\h1>

保存退出,检查语法httpd -t  重启service httpd restart

可在网页浏览器中输入IP地址显示相对应的信息

 

15.2.2基于port:

    在基于以上步骤的前提下,启用之前设置好的 Listen 8080端口;将两个VirtualHost的IP改为一个,端口有一个改为8080即可;

在网页中输入http://172.16.249.120:8080/  可看到Beauty liesin the lover’s eyes;输入172.16.249.120可看到Like A Fish In Water

         

15.2.3基于Host

                          Vim 配置文件/etc/httpd/conf/httpd.conf

          NameVirtualHost *:80   ………..(此项启用,*为所有地址,虚拟机定义的地址需要与其保持一致,httpd 2.2version上有此选项,2.4版本就没有了)

          <VirtualHost 172.16.249.120:80>

           ServerName www.burgess.com

           DocumentRoot "/Vhosts/www.burgess.com"

          </VirtualHost>

          <VirtualHost 172.16.249.120:80>

           ServerName www.burgess.org

           DocumentRoot "/Vhosts/www.burgess.org"

          </VirtualHost>

                           修改/etc/hosts配置文件(格式:IP   ServerName)

命令行访问:

[root@Burgess ~]# curlhttp://www.burgess.org/

<h1>Beauty lies inthe lover‘s eyes</h1>

[root@Burgess ~]# curlhttp://www.burgess.com/

<h1>Like A Fish InWater!</h1>

15.2.4还可以定义别名:

<VirtualHost172.16.249.120:80>

           ServerName www.burgess.com

                            SeverAlias web.burgess.com  ………………………生效需要在/etc/hosts配置文件加上此别名信息

           DocumentRoot"/Vhosts/www.burgess.com"

          </VirtualHost>

以上方式可以混合运用

15.2.5自定义log路径

<VirtualHost172.16.249.120:80>

           ServerName www.burgess.com

                                  DocumentRoot"/Vhosts/www.burgess.com"

                          CustomLog“/var/log/httpd/access_burgess.com” combined  …………………………为www.burgess.com独立的log存放路径,其他的若没有,则存放中心主机一致

          </VirtualHost>

 

16、 内置的status页面

             查看status模块是否装载:[root@Burgess ~]#httpd -M | grep status

             在配置文件/etc/httpd/conf/httpd.conf中找到下面内容,并启用

          <Location /server-status>

              SetHandlerserver-status   …………………………….SetHandler(处理器)

              Order deny,allow

             Deny from all

             Allow from 172.16    ………………………………可以设定特定网段 能够访问status信息

          </Location>    

验证:找一个172.16网段的主机,在浏览器中输入可以访问的IP,后面加上/server-status 则可查看status信息;若启用ExtendedStatus On,则可看到更详细信息

 

17、 https: ssl  (其相关知识更多请参考:http://burgess8909.blog.51cto.com/9607271/1588395)

       ssl: secure socket layer, sslv3

       tls: transport layer security, tlsv1

 

              服务器认证、客户端认证、完整性、保密性、效率、普适性

 

              https, http/ssl, https:// ,443/tcp

 

              SSL会话简化过程:

                     (1) 客户端发送可供选择的加密方式并请求证书;

                     (2) 发送证书以及选定加密方式给客户端;

                     (3) 生成临时会话密钥,并使用服务器的公钥加密发送给服务器商;

                     (4) 双方进行安全通信

配置过程 

(1)  建立私有CA (切换到 /etc/pki/CA目录)

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

[root@burgessCA]# openssl req -new -x509 -key private/cakey.pem -days 19890 -outcacert.pem

[root@burgessCA]# echo 01 > serial

[root@burgessCA]# touch index.txt

 

(2)  为服务器生成证书

[root@burgessCA]# mkdir /etc/httpd/ certs

[root@burgesscerts]# (umask 077; openssl genrsa -out httpd.key 2048 )

[root@burgesscerts]#openssl req -new -key httpd.key -out httpd.csr -days 19890

[root@burgesscerts]#openssl ca -in httpd.csr -out httpd.crt -days 19890

                详细步骤参考博客:http://burgess8909.blog.51cto.com/9607271/1588151

       (3) 配置httpd使用数字证书

[root@Burgess conf]#yum install mod_ssl -y    #……………….. 安装相应的模块程序包,默认没有安装

[root@Burgess ~]#rpm -ql mod_ssl

/etc/httpd/conf.d/ssl.conf    # …………………..为其配置文件

/usr/lib64/httpd/modules/mod_ssl.so

/var/cache/mod_ssl

/var/cache/mod_ssl/scache.dir

/var/cache/mod_ssl/scache.pag

/var/cache/mod_ssl/scache.sem

[root@Burgess ~]# ss -tnl 

LISTEN     0     128                                       :::443                                       :::*    ……………….可以看到443端口开启,若没有,则restart一下;

编辑/etc/httpd/conf.d/ssl.conf,开启检查以下相关信息

              LoadModule  ssl_module modules/mod_ssl.so

              Listen 443

              <VirtualHostIP:PORT>

              ServerName   www.burgess.com:443

              DocumentRoot    可以修改DR路径,如修改为/www/sslhost

SSLCipherSuiteALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW    #!表示移除,+表加进来的

              SSLEngine on      # ………………………SSL功能是否开启

              SSLCertificateFile     #/etc/httpd/certs/httpd.crt将路径修改为已生成的CA证书路径

              SSLCertificateKeyFile     #/etc/httpd/certs/httpd.key生成密钥路径

              </VirtualHost>

保存退出;检查语法;reload; tail/var/log/httpd/error_log 查看信息,显示路径/www/sslhost不存在;创建之,并为其创建一个index.html页面

                          [root@Burgess ~]#  mkdir /www/sslhost -pv

 [root@Burgess ~]#  vim /www/sslhost/index.html

<h1>Loversdon‘t finally meet somewhere. They‘re in each other all along</h1>

                         更改/etc/httpd/conf/httpd.conf下的DocumentRoot路径为/www/sslhost 

                         在浏览器输入172.16.249.120;则显示您的链接不是私密链接;之所以出现这样的情况,是因为本地不能识别CA证书,所以把应该CA导入到本地,其次CA的名称应该为www.burgess.com,而非访问IP地址。

                         将CA(/etc/pki/CA/cacert.pem)导入到本地:直接复制到本地;并将cacerts.pem后缀更改为cacerts.crt;双击直接导入,安装,证书存储位置

                         访问地址与持有者身份不一致:则将www.burgess.com与对应IP写进hosts文件;windows下的路径/c/windows/system32/drivers/etc/hosts  ………….若在里面更改不了,可以拖出来更改

                          再次访问输入:www.burgess.com;则会显示正常信息

                         用curl访问则需要将IP与主机名写进/etc/hosts文件中

                        

 

                            重启httpd服务

 

                            测试:

                                   openssls_client -connect IP:PORT -CAfile /path/to/ca_certificat_file

 

              注意:ssl会话只能基于IP创建,这意味着如果服务器仅有一个IP,那么仅为一个虚拟主机提供https服务;

 

18 访问属性配置(总结)

              基于文件系统的配置:(基于路径做访问控制)

                     <Directory [~]"">

                            ...

                     </Directory>

 

                     ~: 后面的路径支持模式匹配,但性能会比较差,不建议用

 

                     <File [~]"">

                            ...

                     </File>

 

                     <FileMatch"">

                            ...

                     </FileMatch>

 

              基于URL的配置:

                     <Location [~]"">

                            ...

                     </Location>

 

                     <LocationMatch"">

                            ...

                     </LocationMatch>

19 、使用mod_deflate模块压缩页面优化传输速度

      

  

 

 

[root@burgess ~]#vim /etc/httpd/conf/httpd.conf

<VirtualHost *:80>

DocumentRoot/www/www.enimem.com

ServerName www.enimem.com

</VirtualHost>

[root@burgess ~]#vim /www/www.enimem.com/index.html

<h1>Youth is not atime of life; it is a state of mind.</h1>

[root@burgess ~]# cp/var/log/messages /www/www.enimem.com/test.html

在浏览器中输入信息及显示结果如下;

技术分享


[root@burgess ~]#ll  /www/www.enimem.com/test.html

-rw------- 1 root root 94326 Dec 21 19:59/www/www.enimem.com/test.html

[root@burgess ~]#chmod 644 /www/www.enimem.com/test.html    #给其权限

访问页面刷新,如下:

技术分享 


添加压缩功能

[root@burgess ~]#vim /etc/httpd/conf/httpd.conf

LoadModuledeflate_module modules/mod_deflate.so   #检查此模块是否打开

#将一下内容粘贴至配置文件中,粘贴位置自定义,如果粘贴在虚拟机之外,则适用于所有虚拟主机  

 SetOutputFilterDEFLATE      #(输出过滤器,判别文件类型,然后确定是否压缩)

 

       # mod_deflateconfiguration

               

       # Restrictcompression to these MIME types      #表示过滤成功的类型,执行压缩

       AddOutputFilterByTypeDEFLATE text/plain

       AddOutputFilterByTypeDEFLATE text/html

       AddOutputFilterByTypeDEFLATE application/xhtml+xml

       AddOutputFilterByTypeDEFLATE text/xml

       AddOutputFilterByTypeDEFLATE application/xml

       AddOutputFilterByTypeDEFLATE application/x-javascript

       AddOutputFilterByTypeDEFLATE text/javascript

       AddOutputFilterByTypeDEFLATE text/css           #[css层级集文样式表]

       # Level of compression (Highest 9 - Lowest 1)

       DeflateCompressionLevel9        #压缩比最大,压缩后传输速率最快,同时也最消耗cpu,所以因地制宜根据cpu与带宽选择理想压缩比

        

       # Netscape4.x has some problems.

       BrowserMatch^Mozilla/4 gzip-only-text/html

        

       # Netscape 4.06-4.08have some more problems

       BrowserMatch^Mozilla/4\.0[678] no-gzip

               

       # MSIE masqueradesas Netscape, but it is fine

       BrowserMatch\bMSI[E] !no-gzip !gzip-only-text/html       #IE浏览器被归类于Mozilla,所以默认不压缩,而其支持压缩,所以此项为开启压缩功能

[root@burgesswww.enimem.com]# httpd -t    #检查语法错误,有报错,但没影响

AH00526: Syntaxerror on line 105 of /etc/httpd24/extra/httpd-ssl.conf:

SSLCertificateFile:file ‘/etc/httpd24/certs/httpd.crt‘ does not exist or is empty

[root@burgesswww.enimem.com]# service httpd restart

刷新页面后显示如下;

技术分享

 

如果用curl请求,则不压缩

[root@burgess ~]# curl -I http://172.16.249.120/test.html

HTTP/1.1 200 OK

Date: Sun, 21 Dec 2014 19:01:54 GMT

Server: Apache/2.2.15 (CentOS)

Last-Modified: Sun, 21 Dec 2014 11:59:45 GMT

ETag: "120018-17076-50ab8ad8cee8e"

Accept-Ranges: bytes

Content-Length: 94326

Connection: close

Content-Type: text/html; charset=UTF-8

 

 

20 、httpd程序自带的工具程序:

              httpd: apache的服务程序

                     -t: 配置文件语法测试

                     -M: 列出所有已经装载的模块

                     -l: 列出所有的静态模块

                     -S:列出所有的虚拟主机 (已经配置好的)

 

              htpasswd: basic认证基于文件实现时用到账号密码文件生成器(nginx未带此工具)

 

              apachectl: shell脚本,httpd服务控制

 

              apxs: httpd得以扩展使用第三方模块的工具接口;(若没有则安装httpd-devel;  apxs -h显示模块信息,此工具相当于钩子,挂第三方模块的)

 

              htdigest: 为digest认证创建和更新用户认证文件(摘要认证,很少用)

 

              rotatelogs: 不关闭httpd而切换其使用到的日志文件

                     access_log, access_log.1,access_log.2 (可以不关闭httpd,就可保存日志,后缀最大号的为最先生成的,如果继续滚动保存,则后缀号码也会变化)

 

              suexec: 访问某些特殊权限配置的页面资源时,临时切换至指定用户

                     User apache

                     Group apache

 

              ab: apache bench  对apache做压力测试的

 


本文出自 “西来龙象” 博客,请务必保留此出处http://burgess8909.blog.51cto.com/9607271/1592787

Httpd 配置相关基础详解