天天看点

Linux学习之路--http-2基础设置及访问限制【15】---20180108

一、HTTP软件

1、http服务器应用

http服务器程序

    httpd apache

    nginx

    lighttpd

应用程序服务器

    IIS .asp

    tomcat .jsp

    jetty 开源的servlet容器,基于Java的web容器

    Resin CAUCHO公司,支持servlets和jsp的引擎

    webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)

市场占有率统计

    www.netcraft.

2、httpd介绍

httpd(主程序名字)

    20世纪90年代初,国家超级计算机应用中心NCSA开发

    1995年开源社区发布apache(名字简称 a patchy server)

        ASF: Apache Software Foundation(特意成立的基金会)

        FSF:Free Software Foundation(自由软件基金会)

特性:

    高度模块化:core + modules (模块开发模式,内核加模块)

    DSO: Dynamic Shared Object 动态加/卸载

    MPM:multi-processing module多路处理模块

3、MPM工作模式

prefork:多进程I/O模型,每个进程响应一个请求,默认模型

    一个主进程:生成和回收n个子进程,创建套接字,不响应请求

    多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型

    一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

event:事件驱动模型(worker模型的变种)

    一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

        httpd-2.2: event 测试版,centos6默认

        httpd-2.4:event 稳定版,centos7默认

Linux学习之路--http-2基础设置及访问限制【15】---20180108
Linux学习之路--http-2基础设置及访问限制【15】---20180108
Linux学习之路--http-2基础设置及访问限制【15】---20180108

4、进程角色

监听 --> 工作 --> 队列空闲

Linux学习之路--http-2基础设置及访问限制【15】---20180108

5、httpd功能特性

虚拟主机(通常一个网站在一个服务器上,但如果网络访问量不大,可以在一个服务器上运行多个网站,就叫虚拟主机)

    具体实现通过修改下列三项进行建设虚拟主机

    IP、Port、FQDN

CGI:Common Gateway Interface,通用网关接口

    httpd处理不了的事物可以转发给能处理的机器上去,就是通过通用网关接口完成的

反向代理

    根据用户的请求,把用户调度到相应的服务器上

负载均衡

路径别名

丰富的用户认证机制

    basic    -->不加密认证

    digest   -->加密认证,但兼容性较差,有部分浏览器不支持

支持第三方模块

二、Httpd安装

1、安装方法

版本

    CentOS 6: 2.2

    CentOS 7: 2.4

安装方式:

    rpm:centos发行版,稳定,建议使用

    编译:定制或特殊需求

CentOS 6程序信息:

    httpd-2.2

    配置文件位置:

        /etc/httpd/conf/httpd.conf

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

    检查配置语法:

        httpd –t

        service httpd configtest

2、CentOS 6 httpd程序环境 

服务脚本(启动脚本):/etc/rc.d/init.d/httpd

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

服务控制和启动:

    chkconfig httpd on|off

    service {start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录:

    /var/www/html

模块文件路径:

    /etc/httpd/modules

    /usr/lib64/httpd/modules

主程序文件(MPM模式文件):

    /usr/sbin/httpd(默认模式)

    /usr/sbin/httpd.worker

    /usr/sbin/httpd.event

主进程文件:

    /etc/httpd/run/httpd.pid

日志文件目录:

    /var/log/httpd

    access_log: 访问日志

    error_log:错误日志

帮助文档包:

    httpd-manual

三、Httpd 2.2常见配置

1、httpd配置文件的组成

# grep "Section" /etc/httpd/conf/httpd.conf

    配置文件的主要内容分成三个部分

    ### Section 1: Global Environment              --->全局环境

    ### Section 2: 'Main' server configuration     --->主服务器设置

    ### Section 3: Virtual Hosts                   --->虚拟主机

配置格式:directive value                          --->类似于键值对或者前面是关键字|变量|指令后面是一个值

    directive: 不区分字符大小写

    value: 为路径时,是否区分大小写,取决于文件系统

2、显示服务器版本信息

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

ServerTokens Prod[uctOnly]:              Server: Apache

ServerTokens Major:                      Server: Apache/2

ServerTokens Minor:                      Server: Apache/2.0

ServerTokens Min[imal]:                  Server: Apache/2.0.41

ServerTokens OS:                         Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified):    Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.

     #此设置适用于整个服务器,并且不能基于虚拟主机虚拟主机启用或禁用该设置

After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.

     #在版本2.0.44之后,该指令还控制由ServerSignature指令提供的信息。

建议使用:ServerTokens Prod

3、修改监听的IP和Port

Listen [IP:]PORT

    (1) 省略IP表示为本机所有IP

    (2) Listen指令至少一个,可重复出现多次

    Listen 80

    Listen 8080

示例:

    Listen 192.168.1.100:8080    ---> 8080这个端口,只能用这个ip段访问

    Lsten 80

4、持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接

    断开条件:数量限制:100

        时间限制:以秒为单位, httpd-2.4 支持毫秒级

    副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应

    折衷:使用较短的持久连接时间

设置:

    KeepAlive On|Off

    KeepAliveTimeout 15

    MaxKeepAliveRequests 100

测试:

    telnet WEB_SERVER_IP PORT

    GET /URL HTTP/1.1

    Host: WEB_SERVER_IP

5、MPM( Multi-Processing Module)多路处理模块

prefork, worker, event(试验阶段)

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个

    rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持

确认方法:

    ps aux | grep httpd

    默认为/usr/sbin/httpd, 即prefork模式

查看模块列表

查看静态编译的模块

    httpd -l

查看静态编译及动态装载的模块

    httpd –M

动态模块加载:不需重启即生效

动态模块路径

    /usr/lib64/httpd/modules/

更换使用的httpd程序:

/etc/sysconfig/httpd

    HTTPD=/usr/sbin/httpd.worker

    重启服务生效

    pstree -p|grep httpd 查看进程和线程

Httpd 2.4 与之不同

    以动态模块方式提供

    配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

    httpd –M |grep mpm

prefork的默认配置:

    <IfModule prefork.c>

    StartServers                8                                    --->默认启动服务的子进程数量

    MinSpareServers             5                                    --->最小的空闲线程

    MaxSpareServers             20                                   --->最大的空闲线程

    ServerLimit                 256                                  --->最多进程数,最大20000

    MaxClients                  256                                  --->最大并发 

    MaxRequestsPerChild         4000                                 --->服务器进程提供的最大请求数

    </IfModule>

    #4000是子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

worker的默认配置:

    <IfModule worker.c>

    StartServers                4                                    --->默认启动服务的子进程数量

    MaxClients                  300                                  --->最大访问客户数量(最多支持300个客户端并发访问)

    MinSpareThreads             25                                   --->最小的空闲线程

    MaxSpareThreads             75                                   --->最大的空闲线程

    ThreadsPerChild             25                                   --->每个子进程带的线程数量

    MaxRequestsPerChild         0 无限制                             --->服务器进程提供的最大请求数

压力测试r软件包

6、DSO: Dynamic Shared Object

动态共享对象

加载动态模块配置

    /etc/httpd/conf/httpd.conf

    配置指定实现模块加载格式:

        LoadModule <mod_name> <mod_path>

    模块文件路径可使用相对路径:

        相对于ServerRoot(默认/etc/httpd)

    LoadModule auth_basic_module modules/mod_auth_basic.so

7、定义'Main' server的文档页面路径(主目录)

DocumentRoot “/path”

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置

    DocumentRoot "/app/data“

    http://HOST:PORT/test/index.html --> /app/data/test/index.html

注意:SELinux和iptables的状态

8、定义站点主页面

DirectoryIndex index.html index.html.var

服务默认找文档页面路径下这两个格式的文件

9、站点访问控制常见机制

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

    客户端来源地址

    用户账号

文件系统路径:

    <Directory “/path">                                --->针对特定的目录

    ...                                                 --->需要是这里制定的ip或者用户才能访问

    </Directory>

    <File “/path/file”>                               --->或者针对文件控制

    ...

    </File>

    <FileMatch "PATTERN">                               --->正则表达式控制

    </FileMatch>

URL路径:

    <Location "">                                       --->特定的URL路径,进行控制

    </Location>

    <LocationMatch "">

    </LocationMatch>

    <FilesMatch "\.(gif|jpe?g|png)$">                   --->后缀为gif、jpeg、jpg、png的文件为匹配条件

    <Files “?at.*”>                                     通配符

    <Location /status>

    <LocationMatch "/(extra|special)/data">

10、<Directory>中“基于源地址”实现访问控制

 (1) Options:后跟1个或多个以空白字符分隔的选项列表

    在选项前的+,- 表示增加或删除指定选项

常见选项:

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

    FollowSymLinks:允许访问符号链接文件所指向的源文件

    None:全部禁用

    All: 全部允许

    <Directory /web/docs>

        Options Indexes FollowSymLinks                 --->在这个目录下支持索引列表

    <Directory /web/docs/spec>

        Options FollowSymLinks

        <Directory /web/docs>

            Options Indexes FollowSymLinks

        </Directory>

        <Directory /web/docs/spec>

            Options +Includes -Indexes

(2) AllowOverride

    与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令

    只对<directory>语句有效

    AllowOverride All: 所有指令都有效

    AllowOverride None:.htaccess 文件无效

    AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都无法覆盖

(3) order和allow、deny

    放在directory, .htaccess中

    order:定义生效次序;写在后面的表示默认法则

        Order allow,deny

        Order deny,allow

    Allow from和Deny from:定义客户端地址

        客户端地址:

            IP                                           --->IP地址

            网络:   172.16                               --->网段模式

                    172.16.0.0                           

                    172.16.0.0/16

                    172.16.0.0/255.255.0.0

     如果拒绝和允许冲突,以最后面的条件优先级高。

判断条件

allow、deny

deny、allow

allow only

allow

deny only

deny

allow deny

none

注意:设置条件多的,放在后面

    <files "*.txt">

        order deny,allow

        deny from 172.16. 100.100

        allow from 172.16

    </files>

        order allow,deny

        deny from 172.16.100.100

Linux学习之路--http-2基础设置及访问限制【15】---20180108
Linux学习之路--http-2基础设置及访问限制【15】---20180108
Linux学习之路--http-2基础设置及访问限制【15】---20180108

11、日志设定

日志类型:

    访问日志

    错误日志

错误日志:

    ErrorLog logs/error_log

    LogLevel warn

    LogLevel 可选值:

        debug, info, notice, warn,error

        crit, alert, emerg

访问日志:

    定义日志格式:LogFormat format strings

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

    使用日志格式:

        CustomLog logs/access_log combined

    参考帮助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      %h 客户端IP地址

      %l 远程用户,启用mod_ident才有效,通常为减号“-”

        %u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”

        %t 服务器收到请求时的时间

        %r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本

        %>s 响应状态码

        %b 响应报文的大小,单位是字节;不包括响应报文http首部

        %{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的

        %{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序

12、设定默认字符集

AddDefaultCharset UTF-8

中文字符集:GBK, GB2312, GB18030

13、定义路径别名

格式:

    Alias /URL/ "/PATH/"

    DocumentRoot "/www/htdocs"

        http://www.magedu.com/download/bash.rpm ==> /www/htdocs/download/bash.rpm

        http://www.magedu.com/images/logo.png   ==> /www/htdocs/images/logo.png

    Alias /download/ "/rpms/pub/"

        http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm

继续阅读