书接上回,虽然之前写的一些在httpd-2.2上的常用配置已经显得很全面了,但还有一些配置是我们不能忽略的:

 

13、status页面
   LoadModule  status_module  modules/mod_status.so

这是一个服务器状态的页面,可以使管理员在客户端浏览器上通过输入路径找到并查看状态,比如我centos 6上用的ip是172.16.0.210,那么就在地址栏输入:172.16.0.210/server-status

 

httpd-2.2配置补充及httpd-2.4浅析_浏览器

httpd-2.2配置补充及httpd-2.4浅析_浏览器_02

从上图的hello world可以看出,这是我的主服务器,我并没有使用虚拟服务器(因为6上的主配置里有写好的,把注释去掉就能用)

httpd-2.2配置补充及httpd-2.4浅析_配置文件_03

注意:在centos 7上主配置里没有此条目,想用自己加,虚拟服务器就加在虚拟服务器的配置文件里,不论在6还是7上,格式其实只有头和尾的容器和第一行的 SetHandler server-status是必填的,其余后面的那些是之前所提到的用户访问控制

    而如果设置了此条,我们将会得到更详细的页面信息

httpd-2.2配置补充及httpd-2.4浅析_浏览器_04

httpd-2.2配置补充及httpd-2.4浅析_配置文件_05

 

 

 

14、curl命令

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

            curl  [options]  [URL...]

               curl的常用选项:

               -A/--user-agent <string> 设置用户代理发送给服务器
               --basic 使用HTTP基本认证
               --tcp-nodelay 使用TCP_NODELAY选项
               -e/--referer <URL> 来源网址
               --cacert <file> CA证书 (SSL)
               --compressed 要求返回是压缩的格式
               -H/--header <line>自定义首部信息传递给服务器
               -I/--head 只显示响应报文首部信息
               --limit-rate <rate> 设置传输速度
               -u/--user <user[:password]>设置服务器的用户和密码
               -0/--http1.0 使用HTTP 1.0 

15、user/group
指定以哪个用户的身份运行httpd服务进程;

配置文件中:
    User apache
    Group apache

 

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

   适用场景:
    (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;
    (2) 压缩适于压缩的资源,例如文件;

 

17、https,  http over ssl

   SSL会话的简化过程
    (1) 客户端发送可供选择的加密方式,并向服务器请求证书;
    (2) 服务器端发送证书以及选定的加密方式给客户端;
    (3) 客户端取得证书并进行证书验正:
     如果信任给其发证书的CA:
      (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
      (b) 验正证书的内容的合法性:完整性验正
      (c) 检查证书的有效期限;
      (d) 检查证书是否被吊销;
      (e) 证书中拥有者的名字,与访问的目标主机要一致;
    (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
    (5) 服务用此密钥加密用户请求的资源,响应给客户端;

注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;

    配置httpd支持https:
    (1) 为服务器申请数字证书;
     测试:通过私建CA发证书
      (a) 创建私有CA
      (b) 在服务器创建证书签署请求
      (c) CA签证
      
    (2) 配置httpd支持使用ssl,及使用的证书;
     # yum -y install mod_ssl

     配置文件:/etc/httpd/conf.d/ssl.conf
      DocumentRoot
      ServerName
      SSLCertificateFile
      SSLCertificateKeyFile
      上述路径改为相应的配置

 

之前学习openssl时我曾在7上建立过自签证书,就顺便拿来用了

httpd-2.2配置补充及httpd-2.4浅析_服务器_06

而此次我也将7作为主机,也就是自产自销

 

先生成私钥

      ~]# mkdir  /etc/httpd/ssl
      ~]# cd  /etc/httpd/ssl
      ~]# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

接着生成请求:

      ~]# openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr  -days  365

httpd-2.2配置补充及httpd-2.4浅析_配置文件_07

上图为请求过程

 

下面我们要请求的CA就要签证了,因为就是自己,所以好办事

      ~]# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365

之后

      ~]#cp  /etc/pki/CA/certs/httpd.crt   /etc/httpd/ssl/

 

最后配置httpd支持使用ssl,及使用的证书;
     # yum -y install mod_ssl

    此模块一般来说是要自己安装的

     配置文件:/etc/httpd/conf.d/ssl.conf
      DocumentRoot
      ServerName
      SSLCertificateFile
      SSLCertificateKeyFile
      上述路径改为相应的配置

 

18、httpd自带的工具程序
   
   htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;
    htdbm/htdigest
   apachectl:httpd自带的服务控制脚本,支持start和stop;
   apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具:Apache eXtenSion tool
   rotatelogs:日志滚动工具;
    access.log -->access.log, access.1.log -->access.log, acccess.1.log, access.2.log
   suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行;
   ab: apache bench
   
  19、httpd的压力测试工具
   
   ab, webbench, http_load, seige
   
   jmeter, loadrunner
   
   tcpcopy:网易,复制生产环境中的真实请求,并将之保存下来;
   
   ab  [OPTIONS]  URL
    -n:总请求数;
    -c:模拟的并发数;
    -k:以持久连接模式 测试;

 

以上就是httpd-2.2的基本配置

 

httpd-2.4:
  
  新特性:
   (1) MPM支持运行为DSO机制;以模块形式按需加载;
   (2) event MPM生产环境可用;
   (3) 异步读写机制;
   (4) 支持每模块及每目录的单独日志级别定义;
   (5) 每请求相关的专用配置;
   (6) 增强版的表达式分析器;
   (7) 毫秒级持久连接时长定义;
   (8) 基于FQDN的虚拟主机也不再需要NameVirutalHost指令;
   (9) 新指令,AllowOverrideList;
   (10) 支持用户自定义变量;
   (11) 更低的内存消耗;
   
  新模块:
   (1) mod_proxy_fcgi
   (2) mod_proxy_scgi
   (3) mod_remoteip

 

配置应用不同于httpd-2.2的地方:
     (1) 切换使用的MPM
      编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf,启用要启用的MPM相关的LoadModule指令即可。
      
     (2) 基于IP的访问控制
      允许所有主机访问:Require  all  granted
      拒绝所有主机访问:Require  all  denied
      
      控制特定的IP访问:
       Require  ip  IPADDR:授权指定来源的IP访问;
       Require  not  ip  IPADDR:拒绝
       
      控制特定的主机访问:
       Require  host  HOSTNAME:授权指定来源的主机访问;
       Require  not  host  HOSTNAME:拒绝
       
       HOSTNAME:
        FQDN:特定主机名
        domin.tld:指定域名下的所有主机
              
      <RequireAll>
       Require all granted
       Require    not   ip   IP_ADDR
      </RequireAll>      
      
     (3) 虚拟主机
      基于FQDN的虚拟主机也不再需要NameVirutalHost指令;
      
      <VirtualHost *:80>
       ServerName 
       DocumentRoot 

       <Directory “ ”>
        Options None
        AllowOverride None
        Require all granted
       </Directory>
      </VirtualHost> 
      
      注意:任意目录下的页面只有显式授权才能被访问
     
     (4)  KeepAliveTimeout  #ms
      毫秒级持久连接时长定义;

 

    熟悉了这些配置以后,我们就可以更好地管理web服务器,同时可以把一些配置写成脚本,既方便又能避免误操作带来的困扰。由于上述的一些差异,6和7上的脚本可能会有些不同,当然,牛人可以写一个在两者之间通用的脚本,但这对于我们来说,性价比还是太低了,有时候,还是自己动手去配置文件里改才最能解决问题。