2017年2月15日星期三

Httpd 配置相关基础详解

1、关闭欢迎页面
在浏览器中输入IP地址,则会出现Apache默认的欢迎页面,如果想关闭,则;
修改/etc/httpd/conf.d/welcome.conf……………………即重命名(不以.conf结尾)或删除
如:
[[email protected]~]# cd /etc/httpd/conf.d/
[[email protected]]# mv welcome.conf welcome.conf.burgess   ……….将文件后缀更改,则不会再显示默认欢迎页面
[[email protected]]# service httpd reload   ………………………将文件reload之后,刷新页面,则欢迎页面没了
Reloadinghttpd:

2、指定监听的地址和端口
[[email protected] ~]# cd /etc/httpd/conf
httpd.conf  magic
 [[email protected] conf]#vim httpd.conf
#Listen80
Listen172.16.249.120:80
Listen8080
解析:脚本用/Listen回车找到Listen 80 ,此为监听本机所有IP的80端口,指定IP;在监听一个8080端口,表示监听本机的所有IP端口
[[email protected]]# service httpd restart     …………………………….此处需要restart,不能reload
Stoppinghttpd:                                           [  OK  ]
Startinghttpd:                                            [ OK  ]
[[email protected]]# 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)
wKioL1SYG4OgEj0cAADWYaS7Ob4162.jpg

打开/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,操作如下;
 [ [email protected] ~]# cd/etc/httpd/conf
 [[email protected] conf]# ls
httpd.conf  httpd.conf~ magic
[[email protected] conf]#vim httpd.conf    
[[email protected] conf]#mkdir /www/burgessdocs  -pv
[[email protected] conf]#vim /www/burgessdocs/index.html ……………………………..创建一个主页
#DocumentRoot  “/var/www/html” ……………………..用#注释掉此行
DocumentRoot  “/www/burgessdocs” ………………新加行写下新路径,也可在旧的路径直接改,但建议新加一行
[[email protected] conf]#httpd -t
Syntax OK
[[email protected] 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情况下,如下图所示
wKiom1SYF6WQVdvLAAE0dUkJIxs672.jpg

保存退出后reload一下,之后;
[[email protected] conf]#cd /www/burgessdocs
index.html  index.html~
[[email protected]]# mv index.html   a.html

打开浏览器页面,则显示;
 wKiom1SYF7-Ty9e0AACXp5aVduk271.jpg

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


删掉Indexes之后,刷新页面;

wKiom1SYF-fQtsakAAB3gK2Miuc725.jpg

如果提供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文件;
/www/burgessdocs
[[email protected]]# ln -sv /etc/fstab /www/burgessdocs/fstab.html
`/www/burgessdocs/fstab.html'-> `/etc/fstab'
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;
网页信息显示如下;
wKioL1SYGKayNaLGAAE_qyPqM_I575.jpg 

解析:如果开启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地址)
wKioL1SYGMiTUJcIAAB7RMlN68o253.jpg 

    可以用 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: [[email protected]~]# 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>
[[email protected] ~]# 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"
[[email protected] ~]# 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:[[email protected]~]# curl -A "Opera/15.1" -e "www.burgess.com/index.html" http://172.16.249.120/a.html      ………….. 伪装成www.burgess.com/index.html访问
[[email protected] ~]# 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,修改信息如下
wKioL1SYGOiindRvAAE9IRUiDmk557.jpg
wKioL1SYGPqAeP-HAAAkIXh_Y0Q327.jpg

[[email protected] ~]#curl -H "testheader:burgess" http://172.16.249.120/a.h
[[email protected] ~]#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: [[email protected] ~]# 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:
[email protected] ~]# mkdir/web/forum/images -pv
mkdir: created directory`/web'
mkdir: created directory`/web/forum'
mkdir: created directory`/web/forum/images'
[[email protected] ~]# vim/web/forum/images/obama.html
<h1>BrackObama<h1>
之后用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf,找一个有Alias的地方,添加信息
Alias /bbs/  “/web/forum/”  ………………………………….bbs及forum后面斜杠可以省略,但要保持一致;
[[email protected] ~]#service httpd reload
通过浏览器访问,则显示信息如下;而不是/www/burgessdocs下面的信息
 wKiom1SYGG2C5ON0AABHqLWsbZg806.jpg

应用:当我们的主机作为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 对于用户访问时需要基本认证,则
[[email protected] ~]# cd/www/burgessdocs/
[[email protected] burgessdocs]# ls
a.html  fstab.html index.html~
[[email protected] burgessdocs]#mkdir admin
[[email protected] burgessdocs]# cdadmin/
[[email protected] admin]# vim index.html
[[email protected] admin]# cd ..
[[email protected] burgessdocs]# ls
admin  a.html fstab.html  index.html~
[[email protected] 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/执行以下命令
[[email protected] burgessdocs]#htpasswd -c -m /etc/httpd/users/.htpasswd Kevin   ……………………第一次创建用户密码用-c
New password:                                                                                      ……………………….密码为burgess
Re-type new password:
Adding password for userKevin
 [[email protected] burgessdocs]# htpasswd -m/etc/httpd/users/.htpasswd James
New password:                                                                                      ……………………….密码为burgess
Re-type new password:
Adding password for userJames
[[email protected] 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 ;显示页面如下;
wKioL1SYGUHhVfmQAACvAVbtyyE529.jpg

这时就可以输入用户名与密码登陆查看信息了
如果只想让Kevin登陆,不让James登陆,可以修改 Require后面信息,     
(e)组认证
          示例:[[email protected]~]# cd /etc/httpd/
[[email protected]]# mkdir groups
[[email protected]]# cd groups/
[[email protected]]# vim .htgroup  
NBAgr:Kevin Lebron   ……………………………组名NBAgr  
                                   [[email protected]]# httpd -t
Syntax OK
Cd 到/etc/httpd/conf
[[email protected] 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>   
[[email protected]Burgess conf]#httpd -t
Syntax OK
[[email protected] 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  
[[email protected] 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'
[[email protected] conf]# vim/Vhosts/www.burgess.com/index.html    ……………………内容为<h1>Like A Fish In Water<\h1>
 [[email protected] 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)
命令行访问:
[[email protected] ~]# curlhttp://www.burgess.org/
<h1>Beauty lies inthe lover's eyes</h1>
[[email protected] ~]# 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模块是否装载:[[email protected] ~]#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目录)
[[email protected]]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[[email protected]]# openssl req -new -x509 -key private/cakey.pem -days 19890 -outcacert.pem
[[email protected]]# echo 01 > serial
[[email protected]]# touch index.txt

(2)  为服务器生成证书
[[email protected]]# mkdir /etc/httpd/ certs
[[email protected]]# (umask 077; openssl genrsa -out httpd.key 2048 )
[[email protected]]#openssl req -new -key httpd.key -out httpd.csr -days 19890
[[email protected]]#openssl ca -in httpd.csr -out httpd.crt -days 19890
                详细步骤参考博客:http://burgess8909.blog.51cto.com/9607271/1588151
       (3) 配置httpd使用数字证书
[[email protected] conf]#yum install mod_ssl -y    #……………….. 安装相应的模块程序包,默认没有安装
[[email protected] ~]#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
[[email protected] ~]# 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页面
                          [[email protected] ~]#  mkdir /www/sslhost -pv
 [[email protected] ~]#  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模块压缩页面优化传输速度
      
  


[[email protected] ~]#vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot/www/www.enimem.com
ServerName www.enimem.com
</VirtualHost>
[[email protected] ~]#vim /www/www.enimem.com/index.html
<h1>Youth is not atime of life; it is a state of mind.</h1>
[[email protected] ~]# cp/var/log/messages /www/www.enimem.com/test.html
在浏览器中输入信息及显示结果如下;
wKioL1SYGbjSlh4uAACatBv3L6k404.jpg

[[email protected] ~]#ll  /www/www.enimem.com/test.html
-rw------- 1 root root 94326 Dec 21 19:59/www/www.enimem.com/test.html
[[email protected] ~]#chmod 644 /www/www.enimem.com/test.html    #给其权限
访问页面刷新,如下:
wKioL1SYGeOj1FUMAAXBGw3F8V8902.jpg 

添加压缩功能
[[email protected] ~]#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,所以默认不压缩,而其支持压缩,所以此项为开启压缩功能
[[email protected]]# 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
[[email protected]]# service httpd restart
刷新页面后显示如下;
wKiom1SYGVfhs5shAADOAprouLc193.jpg

如果用curl请求,则不压缩
[[email protected] ~]# 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做压力测试的
地点: 中国四川省成都市