天天看点

HTTP2.2详解(二)

http://httpd.apache.org/docs/2.2/  //官方手册

一、httpd的特性

二、安装httpd

三、httpd基础配置详解

四、详细实验

高度模块化:core + modules

DSO:dynamic share object动态共享对象,支持动态装卸载

MPM:multi process modules:多道处理模块,决定httpd的工作方式来响应用户请求

    prefork:多进程模型,每个进程响应一个请求;

        1个主进程:负责[生成/回收]子进程处理用户请求;负责创建套接字;负责接收请求,并将其派发给某子进程进行并发处理;

        n个子进程:每个子进程处理一个请求

        工作模型:会预先生成几个空闲进程,随时等待响应用户请求;定义最大空闲和最小空闲

    worker:多进程多线程模型,每线程处理一个用户请求

        1个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行并发处理;

        n个子进程:每个子进程负责生成多个线程

        每个线程,负责响应用户请求

        并发响应数量:m*n

            m:子进程数量

            n:每个子进程所能创建的最大线程数量

    event:事件驱动模型,多进程模型,每个进程响应多个请求

        子进程:基于事件驱动机制直接响应多个请求;

        http2.2:仍为测试使用模型

        http2.4:event可以直接使用

    ============================================

        prefork 1=n===?      1*n    //每个子进程只响应1个请求

        worker 1=n=m===?  m*n    //1个子进程响应1个请求

        event    1==n===??  1*n //每个子进程响应多个请求

并发服务器响应模型:

    单进程模型

    多进程模型

    复用的I/O的模型

        多线程

        事件驱动 

    复用的多进程多线程模型

MPM:2.2和2.4

    prefork:多进程模型,一个主进程,生成n个子进程,一个进程响应一个请求

    worker:多进程多线程模型,一个主进程,生成多个子进程,每个子进程生成多个线程,一个线程响应一个用户请求

    event:事件驱动模型,多进程模型,一个进程,生成多个子进程,一个进程响应多个请求    

    相同点:都有主进程,都有子进程 //最常见的多道处理模块机制    

http的程序版本

    httpd 1.3官方已经停止维护

    http2.0,2.4是主流版本

    http2.4目前最稳定

httpd的功能特性

    CGI:common gateway Interface

    虚拟主机:IP,PORT,FQDN

    反向代理:

    负载均衡:

    丰富的用户认证机制:

            basic

            digest

    支持第三方模块:

    ...

    rpm包

    编译安装:定制新功能,或其他原因

CentOS 6:httpd2.2

    配置文件:

        /etc/httpd/conf/httpd.conf

        /etc/httpd/conf.d/*.conf

    服务脚本

        /etc/rc.d/init.d/httpd

        脚本配置文件:/etc/sysconfig/httpd

    主程序文件:

        /usr/sbin/httpd  //prefork的模型,默认

        /usr/sbin/httpd.event

        /usr/sbin/httpd.worker

        //http2.2这几个模型,是不支持动态装卸载的

    日志文件:

        /var/log/httpd

            access_log:访问日志

            error_log:错误日志

    站点文档:

        /var/www/html

    模块文件路径:

        /usr/lib64/httpd/modules/ 

    服务控制

        service

        chkconfig httpd on|off

CentOS 7: httpd2.4 //MPM可以动态装载

        模块配置文件

            /etc/httpd/conf.modules.d/*  根据名字按顺序进行加载

    systemd unit file:

        /usr/lib/systemd/system/httpd.service

        基于unit加载服务

    主程序:

        /usr/sbin/httpd //http-2.4支持MPM的动态切换

        /var/www/html            

    服务控制:

        sysemctl {enabled|disable} httpd.service

httpd-2.2常用配置

    httpd.conf //三段

    1.全局配置

    2.主服务器配置

    3.虚拟主机配置

配置格式:

    directive value 

        directive:不区分大小写,

        value:一般也不区分大小写,为路径时,是否区分字符大小写,取决于fs

常用配置:

    //cp httpd.conf{,.bak} //建议先备份一下

1.修改监听的ip和port

    Listen [IP:]PORT 

        1.//省略IP标识为0.0.0.0;本机所有ip

        2.listen 80 

            listen 8080 //同时在80和8080端口提供服务

        3.修改监听socket,重启服务进程才能生效,reload不能生效

2.持久链接 //

    persistent Connection:TCP连接建立后,每个资源获取完成后,不完全断开链接,而是继续等待其他资源请求的进行

    如何断开?

        数量限制

        时间限制

        副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到响应;

        折中:使用较短的持久链接时长,以及较少的请求数量

    KeepAlive On|Off //默认关闭

    MaxKeepAliveRequests 100 //最多请求次数

    KeepAliveTimeout 15 //超时时间,相当于汽车的3年10w公里,一样,只要满足其中一样,就废弃该进程

3.MPM

    httpd2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的模块

        //CentOS所提供的的rpm包同时提供了三个rpm包,但同时只能使用一个

        httpd:prefork //默认使用的MPM模块

        httpd.worker:

        httpd.event //分别用于实现对不同的MPM机制的实现,确认现在使用

    ps aux |grep httpd //查看当前使用的模型

    查看httpd程序的模块列表

        1.httpd -l //静态编译的模块

        2.httpd -M //查看静态和动态[共享]的所有模块

    更换其他MPM

        1.service httpd stop

        2.vim /etc/sysconfig/httpd 

            HTTPD=/usr/sbin/httpd.{worker,event} //启用

        3.service httpd start

        4.ps aux |grep httpd

注意:httpd2.2不建议使用event

    而且用线程取代进程,所带来的的性能提升是有限的

    重启服务进程方式可生效

4.

<code>Prefork</code>

<code>    </code><code>&lt;</code><code>IfModule</code> <code>prefork.c&gt;</code>

<code>    </code><code>StartServers       8    //服务启动进程</code>

<code>    </code><code>MinSpareServers    5    //最小空闲进程</code>

<code>    </code><code>MaxSpareServers   20    //最大保持空闲的进程的数量</code>

<code>    </code><code>ServerLimit      256    //最多允许maxclient启用多少个进程</code>

<code>    </code><code>MaxClients       256    //最大并发量,就是同时访问数量</code>

<code>    </code><code>MaxRequestsPerChild  4000    //每个进程最多可以处理多少个请求</code>

<code>    </code><code>&lt;/</code><code>IfModule</code><code>&gt;</code>

<code>    </code><code>pv:page view页面访问单个页面    </code>

<code>    </code><code>uv:用户访问量</code>

<code>    </code> 

<code>Worker</code>

<code>    </code><code>&lt;</code><code>IfModule</code> <code>worker.c&gt;</code>

<code>    </code><code>StartServers         4    //随服务启动进程数</code>

<code>    </code><code>MaxClients         300    //最大并发客户端连接数</code>

<code>    </code><code>MinSpareThreads     25    //最少保留多少空闲线程数量</code>

<code>    </code><code>MaxSpareThreads     75    // 4*25=100&gt;75因此开机只会启动3个进程,1个为主进程</code>

<code>    </code><code>ThreadsPerChild     25    //每个进程可以生成的子线程</code>

<code>    </code><code>MaxRequestsPerChild  0    //每个进程最多可以处理多少个请求,能处理多少个,就处理多少个</code>

    watch -n.5 'ps aux |grep httpd' //每0.5s检测一次

    service httpd restart //刚开始启动4个,后期会减去一个

5.DSO//动态加载模块

    配置指定实现模块

<code>    </code><code>LoadModule &lt;</code><code>mod_name</code><code>&gt; &lt;</code><code>mod_path</code><code>&gt; //模块名称相对路径,相对于ServerRoot路径,/etc/httpd/</code>

<code>    </code><code>LoadModule disk_cache_module modules/mod_disk_cache.so</code>

<code>    </code><code>LoadModule cgi_module modules/mod_cgi.so</code>

<code>    </code><code>LoadModule version_module modules/mod_version.so</code>

6.定义中心主机的文档页面路径

    只提供一个站点:

        1.只提供一个虚拟主机

        2.使用Main server

    文档路径映射:DocuemntRoot指向的路径为URL路径的起始位置

    DocumentRoot "/var/www/html"  //设定根目录

7.站点访问控制

    可基于两种机制指明对哪些资源进行何种访问控制

        文件系统路径

        URL路径

    [FS路径]/var/www/html/index.html--&gt;[URL路径]192.168.0.1/index.html

    注意:访问控制实在 &lt;DocumentRoot  /var/www/html&gt;中定义的

    1.单个目录及其子目录

        &lt;Directory /&gt;

            Options FollowSymLinks

            AllowOverride None

            ...

        &lt;/Directory&gt;

    2.单个文件

        &lt;file "" &gt;

        &lt;/file&gt; 

    3.一类文件

        &lt;FileMatch "PATTERN" &gt;  //匹配一类文件,但是要启用正则表达式引擎才能使用

        ...

        &lt;/FileMatch&gt;

    4.URL路径

        &lt;Location "/" &gt;

        &lt;/Location&gt;

        &lt;LocationMatch "/" &gt;

        &lt;/LocationMatch&gt;

    示例:        

        &lt;Directory "/var/www/html"&gt;

            Options Indexes FollowSymLinks 

            Order allow,deny

            Allow from all

        Indexes:指明的URL路径下不存在于定义的主页面资源相符的资源文件时,返回索引列表给用户

        FollowSymLinks:

8.定义网站主界面:以及访问控制参数

    DirectoryIndex index.html index.html.var

    重命名index.html ,以及/etc/httpd/conf.d/welcome.conf

    service httpd restart //将看到索引

<code>        </code><code>&lt;</code><code>Directory</code> <code>"/var/www/html"&gt;</code>

<code>            </code><code>Options Indexes FollowSymLinks  //删除indexes将看不到索引</code>

<code>            </code><code>AllowOverride None</code>

<code>            </code><code>Order allow,deny</code>

<code>            </code><code>Allow from all</code>

<code>        </code><code>&lt;/</code><code>Directory</code><code>&gt;</code>

    修改后再次查看:forbidden

    1.Options Indexes FollowSymLinks

        Indexes :是否允许索引

        FollowSymlinks:是否跟随符号链接到源文件

        SymLinksifOwnerMatch:链接文件的属主和目标文件的属主相同时

        ExecCGI:允许执行cgi脚本

        MultiViews:是否允许内容协商

        None:都不

        All:所有都允许

      Options None 最好

    2.AllowOverride None //允许覆盖?    

        与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)

        All //所有都可以放进去

        None:

        Authconfig

        Limit

        FileInfo

        //对目录访问的映像特别打,因此不建议使用

    3.Order allow,deny //谁可以访问,先匹配allow规则,后匹配deny规则,后面的为默认法则

      Allow from all

        来源地址:

            IP:

            NetAddr:

                172.16

                172.16.0.0

                172.16.0.0/16

                172.16.0.0/255.255.0.0

9.定义路径别名

    Alias /download/ "/rpms/pub"

        http://wwww.baidu.com/download/a.txt 

        /rpms/pub/a.txt 

    格式:

        Alias /URL/ "/Path/to/some_resource"

10.设定默认字符集

    AddDefaultCharset UTF-8

    中文字符集:GBK, GB2312, GB18030

11.日志

    日志类型:访问日志和错误日志

        访问日志:

        错误日志:

    错误日志:

        ErrorLog logs/error_log

        LogLevel warn

        LogLevel级别:debug, info, notice, warn, error, crit, alert, emerg.

                当定义到某一个级别的时候:比这个级别高的都要记录

        LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %&gt;s %b" common

        LogFormat "%{Referer}i -&gt; %U" referer

        LogFormat "%{User-agent}i" agent

    访问日志:

        CustemLog logs/access_log combined

                    日志文件        日志格式

<code>        </code><code>日志格式中的宏或者其他定义:</code>

<code>        </code><code>http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats</code>

<code>        </code><code>%h:client的IP地址</code>

<code>        </code><code>%l:Remote User:通常为一个减号("-")</code>

<code>        </code><code>%u:Remote User(from auth;) 非为登录访问时,其为一个减号</code>

<code>        </code><code>$t:服务器收到请求时的时间</code>

<code>        </code><code>%r:first line of request,表示请求报文的首行;记录了请求的“方法”,“URL"以及协议版本号</code>

<code>        </code><code>%&gt;s:响应状态码</code>

<code>        </code><code>%b:响应报文的大小,bytes,不包含http首部</code>

<code>        </code><code>%{Referer}i:请求报文中首部"Referer"的值;即从哪个页面中的超链接跳转至当前页面的;</code>

<code>        </code><code>%(User-Agent);请求报文中首部"User-Agent"的值,即发出请求的程序</code>

12.基于用户的访问控制

    网站中提供的认证:

        1.表单认证

        2.http协议自身提供的认证

    用户认证的过程发送的账号和密码是明文发送的

    认证质询:www.Authenticate:响应码为401,拒绝客户端请求,并说明要求client提供账号和密码

    认证:Authentication:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

    认证方式:

        basic:明文

        digest:消息摘要认证

    安全域:需要用户认证后才能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

    用户的账号和密码存放于何处:

        虚拟账号:仅用于访问某网络服务时用到认证标识

        存储:

            文本文件;

            SQL数据库;

            ldap目录存储:

    basic认证示例:

        1.定义安全域

<code>            </code><code>&lt;Directory </code><code>""</code> <code>&gt;</code>

<code>                </code><code>Options None</code>

<code>                </code><code>AllowOverride None </code><code>//其他定义的</code>

<code>                </code><code>AuthType Basic</code>

<code>                </code><code>AuthName </code><code>"String"</code>

<code>                </code><code>AuthUserFIle "/path/to/httpd_passwd“</code>

<code>                </code><code>require user username1 username2 ...</code>

<code>                </code><code>...</code>

<code>            </code><code>&lt;/Directory&gt;</code>

<code>            </code><code>Require valid-user </code><code>//允许所有用户</code>

        2.提供账号和密码存储(文本文件)

13.虚拟主机

    站点标识:socket

        IP相同:但端口不同

        IP不同:但端口相同80/443

        FQDN不同:端口和IP相同

            请求报文中首部 //对应的是FQDN

            Host:www.mt.com

    三种实现方案:

        基于ip:为每个虚拟主机至少准备一个ip地址

        基于port:为每个虚拟使用至少一个独立Port

        基于FQDN:为每个虚拟主机使用至少一个FQDN

    注:一般虚拟主机不和中心主机混用,二者选其一

        禁用方法:注释中心主机DocumentRoot指令即可

    虚拟主机的配置方法:

        &lt;VirtualHost IP:PORT&gt;

            ServerName FQDN

            DocumentRoot " "

        &lt;/VirtualHost&gt;

        其他可用指令:

            ServerAlias:虚拟主机的别名,可使用多次

            ErrorLog:专用的错误日志

            CustomLog:

            &lt;Directory ...&gt;

                ...

            &lt;/Directory&gt;

            Alias 等 //在中心主机中实用的都可以在中心主机上使用

14.status页面 //不能随意允许用户访问

<code>    </code><code>1.vim httpd.conf 加载模块</code>

<code>      </code><code>LoadModule status_module modules/mod_status.so</code>

<code>        </code><code>&lt;Location /server-status&gt;</code>

<code>            </code><code>SetHandler server-status</code>

<code>            </code><code>Order deny,allow</code>

<code>            </code><code>Allow </code><code>from</code> <code>all</code>

<code>        </code><code>&lt;/Location&gt;</code>

<code>        </code><code>httpd -t</code>

<code>        </code><code>service httpd reload        </code>

<code>    </code><code>2.http:</code><code>//192.168.4.109/server-status</code>

<code>    </code><code>"_"</code> <code>Waiting </code><code>for</code> <code>Connection, </code><code>"S"</code> <code>Starting up, </code><code>"R"</code> <code>Reading Request,</code>

<code>    </code><code>"W"</code> <code>Sending Reply, </code><code>"K"</code> <code>Keepalive (read), </code><code>"D"</code> <code>DNS Lookup,</code>

<code>    </code><code>"C"</code> <code>Closing connection, </code><code>"L"</code> <code>Logging, </code><code>"G"</code> <code>Gracefully finishing,</code><code>//等待所有请求完成后,关闭连接</code>

<code>    </code><code>"I"</code> <code>Idle cleanup of worker, </code><code>"."</code> <code>Open slot with no current process</code>

前提:

    setenforce 0 //关闭selinux

    iptables -F //清空防火墙规则,防止干扰实验

实验1.basic认证

    1.vim httpd.conf

<code>        </code><code>&lt;Directory </code><code>"/var/www/html/admin"</code><code>&gt;</code>

<code>                </code><code>AllowOverride None</code>

<code>                </code><code>AuthName </code><code>"动感地带 Enter Your name"</code> <code>//提示信息</code>

<code>                </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>                </code><code>Require user tom</code>

<code>        </code><code>&lt;/Directory&gt;</code>

        httpd -t //检查语法,测试目录中的文件后缀要是.html ,否则会出现登录后“forbidden"

    2.创建密码文件

        htpasswd -c -m  .htpasswd tom //第一次用-c,第二次千万不要用-c

        htpasswd -m  .htpasswd wolf // tom,wolf,jerry

            -m :md5加密存放

            -D:删除用户

            -s:sha加密

        Require valid-user //任意用户都可以

    3.基于组认证 //失败

<code>        </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>        </code><code>1.AuthGroupFile </code><code>"/path/to/grouop_file"</code>

<code>        </code><code>2.Require </code><code>group</code> <code>Group1 group2</code>

<code>        </code><code>3.创建用户账号和组账号文件</code>

<code>            </code><code>组文件:每一行定义一个组</code>

<code>                </code><code>GRP_name:username1 username2 ... </code><code>//如此简单</code>

        4.require valid_user //允许任意用户访问

    AuthType只有两个:Basic和Diget

        mod_auth_basic  and  by mod_auth_digest

基于组的认证:

<code>    </code><code>&lt;Directory </code><code>""</code><code>&gt;</code>

<code>        </code><code>Options None</code>

<code>        </code><code>AllowOverride None</code>

<code>        </code><code>AuthType Basic</code>

<code>        </code><code>AuthName "String“</code>

<code>        </code><code>AuthUserFile  </code><code>"/PATH/TO/HTTPD_USER_PASSWD_FILE"</code>

<code>        </code><code>AuthGroupFile </code><code>"/PATH/TO/HTTPD_GROUP_FILE"</code>

<code>        </code><code>Require  </code><code>group</code>  <code>grpname1  grpname2 ...</code>

<code>    </code><code>&lt;/Directory&gt;        </code>

<code>&lt;Directory /</code><code>var</code><code>/www/html/upload/&gt;</code>

<code>    </code><code>Options None</code>

<code>    </code><code>AllowOverride None</code>

<code>    </code><code>AuthType Basic</code>

<code>    </code><code>AuthName </code><code>"Admin Realm"</code>

<code>    </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>    </code><code>AuthGroupFile </code><code>"/etc/httpd/conf/.htgroup"</code>

<code>    </code><code>Require </code><code>group</code> <code>mygroup</code>

<code>&lt;/Directory&gt;</code>

<code>[root@httpd conf]# cat ./.htgroup    </code>

<code>mygroup: tom Jason</code>

<code>othergroup: obama</code>

实验2:虚拟主机 //一个主机上存放多个网站

一.基于不同ip的虚拟主机 //三个站点使用同一个ip,同一个端口,不同域名

    1.:192.168.4.110/109/111

<code>        </code><code>mkdir -pv /www/{a.com,b.net,c.org}/hdocs</code>

<code>        </code><code>echo </code><code>"a.com"</code> <code>&gt; /www/a.com/hdocs/index.html</code>

<code>        </code><code>echo </code><code>"c.org"</code> <code>&gt; /www/c.org/hdocs/index.html</code>

<code>        </code><code>echo </code><code>"b.net"</code> <code>&gt; /www/b.net/hdocs/index.html</code>

    2.vim httpd.conf

        #DocumentRoot "/var/www/html" //注释

        建议新建另外一个文件

<code>        </code><code>vim /etc/httpd/conf.d/virhosts.conf</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.109:80&gt;</code>

<code>                </code><code>ServerName www.a.com</code>

<code>                </code><code>DocumentRoot "/www/a.com/hdocs"</code>

<code>            </code><code>&lt;/</code><code>VirtualHost</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.110:80&gt;</code>

<code>                </code><code>ServerName www.b.net</code>

<code>                </code><code>DocumentRoot "/www/b.net/hdocs"</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.111:80&gt;</code>

<code>                </code><code>ServerName www.c.org</code>

<code>                </code><code>DocumentRoot "/www/c.org/hdocs"</code>

    httpd -t //检查语法

警告信息:

<code>[root@localhost conf.d]# httpd -t</code>

<code>[Fri Nov 24 07:51:47 2017] [warn] VirtualHost 192.168.154.132:80 overlaps with VirtualHost 192.168.154.132:80, the first has precedence, perhaps you need a NameVirtualHost directive</code>

<code>[Fri Nov 24 07:51:47 2017] [warn] NameVirtualHost *:80 has no VirtualHosts</code>

<code>Syntax OK</code>

<code>[root@localhost conf.d]# cat virtualhost.conf </code>

<code>NameVirtualHost 192.168.154.132:80</code>

<code>&lt;VirtualHost 192.168.154.132:80&gt;</code>

<code>    </code><code>Servername wwww.a.com </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/a.com"</code>

<code>&lt;/VirtualHost&gt;</code>

<code>    </code><code>Servername wwww.b.net </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/b.net"</code>

<code>    </code><code>Servername wwww.c.org </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/c.org"</code>

//改成这样,或者把ip地址,改为* 就不会出警告信息了

二.    基于端口 //三个站点,同一个ip,不同端口,不同域名

    ifconfig eth0:0 down //建议把那几个虚拟断开都关了

<code>    </code><code>vim vhosts.conf</code>

<code>        </code><code>Listen 888</code>

<code>        </code><code>Listen 8888</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:80&gt;</code>

<code>            </code><code>ServerName www.a.com</code>

<code>            </code><code>DocumentRoot </code><code>"/www/a.com/hdocs"</code>

<code>        </code><code>&lt;/VirtualHost&gt;</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:888&gt;</code>

<code>            </code><code>ServerName www.b.net</code>

<code>            </code><code>DocumentRoot </code><code>"/www/b.net/hdocs"</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:8888&gt;</code>

<code>            </code><code>ServerName www.c.org</code>

<code>            </code><code>DocumentRoot </code><code>"/www/c.org/hdocs"</code>

    httpd -t

    service httpd restart

    注意:基于端口和基于ip可以混合使用

三.基于FQDN  //同端口,同ip,不同域名

    1.修改配置

<code>        </code><code>NameVirtualHost 192.168.4.109:80</code>

<code>        </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.109:80&gt;</code>

<code>        </code><code>&lt;/</code><code>VirtualHost</code><code>&gt;</code>

    2.修改自己的host文件,或者改为自己建立的dns            

        vim hosts

            192.168.4.109 www.a.org 

            192.168.4.109 www.b.net 

            192.168.4.109 www.c.org

IP:        不同ip,不同域名,端口号可以相同,也可以不同

Port:    同一ip,不同端口,不同域名

FQDN:    同一ip,同一端口,不同域名

实验3:keepalive的测试

1.另外一条机器安装telnet,模拟访问server:192.168.4.109

    telnet 192.168.4.109 80

    GET /index.html HTTP/1.1  //不行的话,可以HTTP/1.0

    Host: 192.168.4.109

    两个回车

2.KeepAlive On        

    service httpd reload

    再次测试,获取到数据后,不会立即断开

    默认超时时间15s,    

keepalive具体可以参考:http://blog.csdn.net/zlxfogger/article/details/44919995

附件:修改alias但是不能访问,alias对应的路径

    Alias /tt/ "/tmp/test/"   //放在DocumentRoot之前就可以了

    DocumentRoot "/var/www/html" 

附件:Could not reliably determine the server's fully quality

    vim httpd.conf

    ServerName MT:80  //主机名为MT

书籍推荐:&lt;http协议权威指南&gt;

小结:httpd配置

    Listen [IP:]PORT

    持久链接:

        KeepAlive [On|Off]

    MPM:

        prefork,worker,event

    DSO: LoadModule 

        httpd -l/-M

    DocumentRoot

    访问控制

        1.&lt;Directory&gt; 

            Options Indexes FollowSymLinks

            Order Allow Deny

            Allow from

            Deny from

        2.&lt;Location&gt;

            &lt;Location /server-status&gt;

                SetHandler server-status

                Order deny,allow

                Allow from all

            &lt;/Location&gt;

    定义默认主页面

        DirectoryIndex

    ErrorLog

    CustomLog

    LogFormat

        %{Referer}i:引用Referer首部的信息

    Alias /URL/  "/path/to/somedir/"  //斜线双方要么有,要么都没有

    AddDefaultCharset

    基于用户访问控制

        认证方式:basic,digest //主要使用basic

        AuthType Basic

        AuthName “STIRNG“

        AuthUserFile 

        AuthGroupFile

        Require user/group/valid-user //valid有效的,正当的

        .htpasswd

            htpasswd 

    虚拟主机:IP,Port,FQDN

本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/2044059,如需转载请自行联系原作者

上一篇: Response对象
下一篇: Session对象