Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96901
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-04 22:47
文章分类

全部博文(34)

文章存档

2017年(34)

我的朋友

分类: 服务器与存储

2017-06-12 07:29:05

Web服务器输入/输出结构:
       单线程I/O结构
       多线程I/O结构
       复用的I/O结构:单个线程响应多个请求
       复用多线程I/O结构:多个线程,每个进程响应多个请求
     

httpd: 高度模块化
         core + modules
         DSO:Dynamic Shared Object
         MPM:Multipath Processing Module
                多道处理模块,非一个模块,而是对一种特性的称谓
                prefork:一个进程一个请求
                       select():1024
                worker:一个进程多个线程,一个线程一个请求

                event:一个线程响应多个请求
                       event-driven:事件驱动,主要目的在于实现单线程响应多个请求:

httpd的功能特性:
                 路径别名:alias
                 用户认证:authentication
                 虚拟主机:virtual host
                 反向代理:
                               负载均衡
                  用户站点:
                  CGI:Common Gateway Interface

安装httpd:
                  yum -y install httpd
                  服务脚本: /etc/rc.d/init.d/httpd
                         脚本配置文件: /etc/sysconfig/httpd
                   运行目录: /etc/httpd
                   配置文件:
                         主配置: /etc/httpd/conf/httpd.conf
                         扩展配置: /etc/httpd/conf.d/*.conf
                   Socket: 80/tcp,443/tcp
                   文档根目录: /var/www/html
                         CGI目录: /var/www/cgi-bin/
 

日志滚动:
          日志切割
          access.log,
          access.log

时间、空间

Docroot:文档根目录

配置文件:
           /etc/httpd/conf/httpd.conf
                  配置参数      值

                      配置指令不区分字符大小写
                      值有可能区分字符大小写
                      有些指令可以重复出现多次
                
                       例如: Listen [IP:]80

                    配置文件格式:
                        全局配置
                        主机配置:用于仅提供一个站点时
                        虚拟主机:用于提供多个站点时

                   配置文件语法测试:
                        # service httpd configtest
                        # httpd -t
                  
                    绝大多数配置修改后,可以通过service httpd reload来生效:如果修改了监听的地址或端口,必须重启服务才能生效:

MIME,多媒体类型
                major/minor
                     HTML: text/html
                     ASCII: text/plain
                     JPEG: image/jpeg
                     GIF: image/gif
                     QuickTime: video/quicktime

            
1、监听套接字
             Listen [IP:]port

     此指令可以出现多次,用于指定监听多个不同的套接字:
              Listen 80
              Listen 8080

2、配置使用keep alive
     KeepAlive {On|Off}
     KeepAliveTimeout 2
     MaxKeepAliveRequests 50

3、MPM
    
             StartServers:默认启动的工作进程数;
             MinSpareServers:最少空闲进程数;
             MaxSpareServers:最大空闲进程数;
             ServerLimit:最大活动进程数;
             MaxClients:并发请求的最大数;
             MaxRequestPerChild:每个子进程在生命周期内所能够服务的最多请求个数;
      

     
              StartServers:启动的子进程的个数
              MaxClients:并发请求的最大数
              MinSpareThreads:最小空闲线程数
              MaxSpareThreads:最大空闲线程数
              ThreadsPerChild:每个子进程可生成的线程数
              MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定
        

4、DSO模块加载方式
              LoadModule module_name  /path/to/module

                     如果使用相对路径,则相对于ServerRoot所定义的位置而言:例如:
                     LoadModule php5_module /usr/lib64/httpd/modules/php5.so

                     让服务重载配置文件方能生效;

              httpd -M: 列出已经装载的所有DSO及非DSO模块
              httpd -L:  列出支持使用的非DSO模块
  
5、配置站点根目录
           DocumentRoot  /path/to/somewhere

6、配置页面访问属性
       
                  Options:
                         Indexes:缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给客户:危险:
                         FollowSymlinks:允许跟随符号链接所指向的原始文件
                         None:所有都启用
                         All:所有都启用
                         ExecCGI:允许使用mod_cgi模块执行CGI脚本
                         Includes:允许使用mod_include模块实现服务器端包含
                         MultiViews:允许使用mod_negotiation实现内容协商
                         SymlinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件
        

7、基于主机的访问控制
         
                   Options
                   AllowOverride None
                   Order  Allow,Deny
                   Allow
                   Deny
           

最佳匹配:从列表中找出最小的能匹配到访问者的地址的条目为最终生效的:

             Allow from
             Deny from
                    IP,Network Address
                       
基于用户做访问控制:


8、定义默认主页面
       DirectoryIndex index.php index.html
   
9、用户目录
      如果期望让每个用户都可以创建个人站点: ~Username/
      userdir  disabled:禁止
      userdir  public_html
             public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过签署的访问路径进行访问

     用户的家目录得赋予运行httpd进程的用户拥有执行权限

10、配置日志功能
        /var/log/httpd/
                  access.log:访问日志,其需要记录的内容需要自定义
                  error.log:错误日志

                  访问日志:
                          CustomLog "/path/to/access_log_file" LogFormat_Name
                          LogFormat Format_String Format_Name
                          %h 客户端地址
                          %l  远程登录名
                          %u 认证时的远程用户名
                          %t 收到请求时的时间
                          %r 请求报文的起始行
                          %>S 响应状态码
                         %b 响应报文的长度,单位为字节
                         %{Header_Name}i:记录指定请求报文首部的内容
                         
                  错误日志:
                          ErrorLog

11、路径别名
Alias  /alias/  "/path/to/somewhere"
意味着访问alias/时,其页面文件来自于/path/to/somewhere这个位置:

12、设定默认字符集
AddDefaultCharset

13、CGI脚本别名
 
CGI:Common Gateway Interface
         协议

         Content-Type: text/html

         SUID,SGID

         php,SAPI,UWSGI
        
mod_alias, mod_cgi

ScriptAlias /URL/ "/path/to/somewhere/"

在/var/www/cgi-bin目录下定义一个名为test的cgi脚本

#!/bin/bash

cat << EOF

Content-Type: text/html

The hostname is: `hostname`.

The time is: `date`



EOF

重新载入httpd,显示效果图如下:

14、基于用户的访问控制
        虚拟用户:
              文件: /etc/httpd/conf/.htpasswd
              SQL数据库:
              dbm:
              ldap:
             
        认证类型(auth):
             basic:基本认证,帐号和密码明文发送;
             digest:摘要认证,hash编程之后发送;
         
         认证提供者(authentication provider):帐号和密码的存放位置
             authn

         授权机制(authorization):根据什么进行授权,
             
          案例:基于文件,做基本认证,根据用户和组进行授权
       
定义一个访问需认证的目录


    Options None
    AllowOverride AuthConfig
    AuthType Basic
    AuthName "Private Area"
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user


创建个密码的认证文件

[root@localhost fin]# htpasswd -c -m /etc/httpd/conf/.htpasswd tom
New password:
Re-type new password:
Adding password for user tom

再重试,访问时输入帐号和密码tom
结果如下图所示:



使用htpasswd命令生成认证库

htpasswd
           -c:创建文件,创建第一个用户时使用
           -m:密码基于MD5编码存储

15、虚拟主机

一个物理服务器提供多个站点;使用虚拟主机得先取消中心主机

web: Socket(IP,port)

基于不同的IP实现不同的虚拟主机
       变化IP
基于不同的port实现不同的虚拟主机
       变化port
基于不同的FQDN实现不同的虚拟主机
       变化ServerName的值


      ServerName
      DocumentRoot ""
       
      ServerAlias
      ServerAdmin



实例1:定义两个虚拟主机

IP1:192.168.1.9

IP2:192.168.1.100

修改apache主配置文件/etc/httpd/conf/httpd.conf
加入配置两个虚拟主机的代码


    ServerName
    DocumentRoot "/web/a.com/htdocs"



    ServerName
    DocumentRoot "/web/b.org/htdocs"


分别创建相应的网页目录和索引文件,重启http
展示效果如下:




实例2:基于FQDN的虚拟主机

在主配置文件httpd.conf加入下面的代码

NameVirtualHost *:80

ServerName
DocumentRoot "/web/a.com/htdocs"

ServerName
DocumentRoot "/web/b.org/htdocs"

ServerName
DocumentRoot "/web/c.net/htdocs"

打开测试页面:可以看到使用域名可以正常的访问该页面



虚拟主机的单独配置:
    用户认证
    访问日志
    错误日志
    别名
    脚本别名

基于IP认证机制,基于用户认证

http协议认证、表单认证

16、https协议

       x509.3证书格式:
               证书格式版本号
               证书序列号
               证书签名算法
               证书颁发者
               有效期
               持有者的名称
               持有者的公钥
               CA的ID
               持有者的ID
               其它扩展信息
                      基本约束
                      证书策略
                      密钥的使用限制
               CA签名

            PKI:Public Key Infrastructure
                端实体(申请者)
                注册机构(RC)
                签证机构(CA)-->签证机构(CA)
                证书撤销列表(CRL)发布机构
                证书存取库

             SSL握手要完成的工作:
                交换协议版本号
                选择双发都支持的加密方式
                对两段实现身份验证
                密钥交换

             http:文本协议,80/tcp
             https:二进制格式的协议,443/tcp

             SSL会话基于IP地址进行:不支持在基于FQDN的虚拟主机上实现

             客户端验证服务器证书时:
                   日期检测:证书是否在有效期内
                   证书颁发者的可信度:
                   证书的签名检测:
                   持有者的身份检测:
                         

                 httpd: 基于mod_ssl模块实现对ssl的支持   
                      
示例:

1、生成私钥

[root@localhost CA]# pwd #进入到生成证书目录
/etc/pki/CA
         
[root@localhost CA]# (umask 077; openssl genrsa 2048 > private/cakey.pem)
Generating RSA private key, 2048 bit long modulus
.........................+++
................................................+++
e is 65537 (0x10001)

2、修改/etc/pki/tls/openssl.cnf 配置文件

修改CA的一些信息













































       






      








   
    

  
                   
                       







  
               




 
阅读(1898) | 评论(0) | 转发(0) |
0

上一篇:nfs

下一篇:syslog详解

给主人留下些什么吧!~~