• linux系统web站点设置-http基础设置


    一、httpd2.2的组成:

        /etc/httpd:服务器的根目录

            conf/httpd.conf,conf.d/*:配置文件

            conf/magic:MIME的配置文件

            logs:日志文件的存放路径,符号链接/var/log/httpd

            modules:动态模块文件的存放路径,符号链接/usr/lib64/httpd/modules

            run:httpd主进程pid的存放路径,符号链接/usr/run/httpd

        httpd的主配置文件:/etc/httpd/conf/httpd.conf

            在此配置文件中,所有的配置项均被称为指令(Directive)

                指令的格式:Directive Value

        

        在主配置文件中,所有的指令都被分组到三个配置段中:        

            ### Section 1: Global Environment

            ### Section 2: 'Main' server configuration

            ### Section 3: Virtual Hosts

    二、常用的配置指令:

        Section 1: Global Environment:全局配置段

        1.Listen Directive

            定义服务器监听的有效套接字

            格式:Listen [IPADDR:]port [protocol]

                注意:

                    1.在各配置文件中,Listen指令可以出现多次,用于定义不同的监听套接字

                    2.Listen指令不能省略,否则服务器无法启动

                    3.如果省略IP地址,将会监听当前服务器所有被正确配置并生效的IP地址

                    4.在httpd2.2中,如果更改Listen中IP地址信息,则必须重启httpd进程才能生效,仅仅reload不能生效

        2.KeepAlive Directive

            开启或关闭HTTP协议的长链接功能

            格式:KeepAlive On|Off

            KeepAliveTimeout Directive    

            服务器在一个长链接上能够达到的子回话请求的最大时间间隔;默认的时间单位为秒

            格式:KeepAliveTimeout number

            MaxKeepAliveRequests Directive

            一个长链接上所能够接受的最大的用户请求数量,默认是100个

            格式:MaxKeepAliveRequests number

            

            以上三条指令是与长链接相关的指令,长链接的断开条件:

                时间限制、请求数量限制

            使用Telnet测试长链接: 

                设置KeepAlive On ,重载httpd服务,默认 KeepAliveTimeout的值为15

                blob.png

        3.MPM相关指令:

            MPM:多道处理模块;

            httpd-2.2的MPM不支持DSO机制,且event为测试模式              

        /usr/sbin/httpd

        /usr/sbin/httpd.event

        /usr/sbin/httpd.worker

            通过修改/etc/sysconfig/httpd文件来完成MPM功能切换;

        HTTPD=/usr/sbin/httpd.worker

            每次更换MPM模块,都需要重启httpd服务后才能生效,/etc/sysconfig/httpd是服务启动脚本/etc/init.d/httpd的配置文件;

                查看httpd或httpd.worker程序的模块列表:

            httpd -M

            httpd.worker -M

                查看httpd或httpd.worker程序的静态编译模块列表

                    httpd -l

                    httpd.worker -l

            

            与prefoik模块相关的配置指令:     

                <IfModule prefork.c>

                StartServers       8

                    //在服务主进程启动之后,预先fork多少子进程

                MinSpareServers    5

                    //最少预留的空闲子进程的数量

                MaxSpareServers   20

                    //最多预留的空闲子进程的数量

                ServerLimit      256

                    //为MaxClient指令定义上限

                MaxClients       256

                    //最多的客户端并发访问量

                MaxRequestsPerChild  4000

                    //每个子进程能够处理的客户端请求的最大值

                </IfModule>

            与worker模块相关的配置指令           

                <IfModule worker.c>

                StartServers         4

                    //在服务主进程启动之后,预先fork多少个子进程;

                MaxClients         300

                    //最多的客户端并发访问量

                MinSpareThreads     25

                    //最少预留的空闲线程的数量

                MaxSpareThreads     75

                    //最多预留的空闲线程的数量

                ThreadsPerChild     25

                    //每个子进程可以管理的线程数量

                MaxRequestsPerChild  0

                    //每个子进程可以处理的客户端请求的最大值

                </IfModule>

        

        4.DSO机制:

            链接动态模块并将其添加至活动模块列表

            格式:LoadModule module filename

            例:

                LoadModule auth_basic_module modules/mod_auth_basic.so

            modules是相对于ServerRoot指令定义的根目录的路径而言的

        5.Include Directive

            可以包括除了主配置文件之外的其他服务配置文件;支持Globbing

            格式:Include file-path | directory-path | wildcard

            示例:

                Inlude conf.d/*.conf

        6.User Directive

            指定启动子进程的用户ID和组ID

            格式:User User-Id

                Group Group-Id

        Section 2: 'Main' server configuration,定义了默认的web站点的基本属性

        7.ServerAdmin Directive

            定义了发送错误信息的邮箱地址;

            格式:ServerAdmin email-address|URL

            ServerName Directive

            服务器做自我标识时使用的主机名和端口号的组合;

            格式:ServerName [scheme://]domain-name|ip-address[:port]

            DocumentRoot Directive

            为web站点的资源提供路径映射;

            格式:DocumentRoot directory-path

            示例:

                DocumentRoot "/var/www/html"

        8.站点资源访问控制资源指令

            1)基于文件系统的访问控制指令   

                a.基于指定目录的访问控制指令         

                    <Directory "/PATH/TO/SOME_DIR">

             Options Directive

             AllowOverride Directive

             Order Directive

             Allow Directive

             Deny Directive

                 </Directory>

                b.基于特定文件的访问控制指令            

                    <File "FILENAME">

        Directive Value

                    </File>

                c.基于模式匹配的方式进行访问控制的指令             

                    <FilesMatch regex>

        Directive Value

                    </FilesMatch>

                    <DirectoryMatch regex>

        Directive Value

                    </DirectoryMatch>

            2)基于URL的访问控制指令

                a.基于URL进行访问控制:

                    <Location URL-path|URL>

        Directive Value

                    </Location>

        b.基于URL的模式匹配的方式进行访问控制:

                    <LocationMatch regex>

        Directive Value

                    </LocationMatch>

            

            3)指令具体内容

                ①Options Directive

                    指定的目录中激活web访问控制相关特性;

                    格式:Options [+|-]option [[+|-]option] ...

                    取值可以是:None, All, Indexes, Includes, FollowSymLinks, SymLinksifOwnerMatch, ExecCGI, MultiViews...

        Indexes:启用DocumentRoot的索引特性;当web站点没有定义符合要求的主页或者主页不存在时,在浏览器上允许以索引的方式列表显示整个DocumentRoot中所有的资源给用户选择;一般用于资源下载站点;对于正常的web站点来说,应禁用此功能;

        FollowSymLinks:跟踪符号链接并找到被链接的文件,并可以在客户端浏览器中打开;

        SymLinksifOwnerMatch:只有处理客户端请求的子进程的所有者与符号链接文件的所有者为同一用户时,才跟踪符号链接;

        

                ②AllowOverride Directive

                    控制被允许放置于.htaccess文件中的指令是否生效;

                    格式:AllowOverride All|None|directive-type [directive-type]

                    httpd允许在web站点的文档根目录中以及各级子目录中使用.htaccess文件进行资源的访问控制;凡是放置于.htaccess文件中的指令,有继承的特性;如果每次执行指令都要读取该文件进行比对,则运行效率会下降,所以通常建议该指令的值设置为"None";

        ③Order Directive

                    定义基于IP地址的访问控制管理的顺序;

                    a.配置顺序:

        根据指定的Allow和Deny的顺序来执行;

                    b.范围顺序:

        匹配范围越小的,越优先执行;

                    格式:Order ordering

        ordering可以包含两种通用顺序:

                        Allow, Deny:

                                先计算Allow指令的匹配,如果能够匹配任意规则,则允许;

                                再计算Deny指令的匹配,如果能够匹配任意规则,则阻止;

                                如果没有匹配,则默认阻止所有;

                        Deny, Allow:

        先计算Deny指令的匹配,如果能够匹配任意规则,则阻止;

        再计算Allow指令的匹配,如果能够匹配任意规则,则允许;

        如果没有匹配,则默认允许所有;

        ④Deny Directive

                    控制阻止访问服务器的客户端主机;

                    格式:Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

          Allow Directive

                    控制允许访问服务器的客户端主机;

                    格式:Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

        host可以写成:

                            域名或FQDN:example.net www.abc.com

                            单个IP:172.16.0.1

                            逻辑网段:172.16 172.16.0.0/16 172.16.0.0/255.255.0.0

        示例:

            Order allow,deny

                            Allow from all

                                //允许所有客户端主机访问当前服务器的web站点服务;

                            Order deny,allow

                            Deny from 172.16.0.1

        //仅阻止IP地址为172.16.0.1的主机访问当我服务器的web站点服务;

            

        9.DirectoryIndex Directive

            为当前web站点指定默认的主页文件名称;

            格式:DirectoryIndex disabled | local-url [local-url] ...

            注意:

        1) DirectoryIndex指令之后可以设置多个本地URL作为主页文件名称;按照顺序从前到后进行名称匹配,如果能够匹配成功,就将该资源当作本站点的主页文档;如果没有匹配成功,且Options指令中也没有定义Indexes特性,则web服务器阻止本次请求;

        2) 如果请求资源时明确的给出URL,则DirectoryIndex指令的值无任何意义;

        

        10.日志相关指令

            ErrorLog Directive

        标明错误信息的日志记录的位置(文件路径)

            格式:ErrorLog file-path|syslog[:[facility][:tag]]

            示例:

        ErrorLog logs/error_log

            LogLevel Directive

                控制错误日志记录的详细程度;

                格式:LogLevel [module:]level [module:level] ...

        level包括:emerg、alert、crit、error、warn、notice、info、debug

        注意:

            1) 日志记录等级越高,在错误日志中记录的信息就会越少;

            2) 选择的日志记录等级,有向上兼容的特性;

            CustomLog Directive

        标明记录访问日志的文件的路径及日志记录的格式;

                格式:CustomLog file format

            示例:

        CustomLog logs/access_log combined

         

            LogFormat Directive

        功能:描述了在访问日志中记录信息的特定格式;

        格式:LogFormat format|nickname [nickname]

                    常用的format:

        %h:远程主机名称;如果HostnameLookups的值设置为Off,则记录远程主机的IP地址;

        %l:远程登录名称;如果没有登录名,就在日志中记录为"-";

        %u:远程用户名称;记录通过身份验证之后访问资源的用户名称;

        %t:收到客户端请求的时候的服务器的时间戳;[18/Sep/2011:19:18:28 -0400]

        "%r":请求报文首部的首行;

                            "GET /index.html HTTP/1.1"

        %>s:请求报文的状态信息;

        %b:以字节为单位的响应报文的长度;

        "%{Referer}i":访问此页面之前通过哪个超链接跳转而来;使用"{}"引用的内容是报文首部中的首部名称;

        "%{User-Agent}i":客户端使用的http应用程序及相关信息;

                    示例:

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

                        LogFormat "%h %l %u %t "%r" %>s %b" common

                        LogFormat "%{Referer}i -> %U" referer

                        LogFormat "%{User-agent}i" agent

                    四种格式,默认选择combined

                        CustomLog logs/access_log combined

        11.定义路径别名的指令:

            Alias Directive

                将指定的URL映射至本地的文件系统路径;

                格式:Alias URL-path file-path|directory-path

            示例:    

                Alias /icons/ "/var/www/icons/"

                <Directory "/var/www/icons">

                    Options Indexes MultiViews FollowSymLinks

                    AllowOverride None

                    Order allow,deny

                    Allow from all

                </Directory>

            AliasMatch Directive

                使用正则表达式将URL映射至本地的文件系统路径;

                格式:AliasMatch regex file-path|directory-path

            示例:

        AliasMatch ^/exam(.*)?$ "/tmp/exam$1"

        <Directory "/tmp/exam/">

                    Options None

                    AllowOverride None

                    Order allow,deny

                    Allow from all

        </Directory>

        12.服务器系统状态数据查询:

            前提:LoadModule status_module modules/mod_status.so

            <Location /server-status>

        SetHandler server-status

        Order deny,allow

        Deny from all

        Allow from 172.16

            </Location>

            ExtendedStatus On|Off:开启或关闭更多的额外状态信息展示;

    三、虚拟主机配置段:

        ### Section 3: Virtual Hosts

        <VirtualHost> Directive

        启动并配置虚拟主机及相关参数;

            格式:

        <VirtualHost addr[:port] [addr[:port]] ...>

                    Directive Value

        </VirtualHost>

        使用虚拟主机:默认一个httpd仅能构建一个web站点,因此很多的情况下,我们需要在同一台服务器上架构多个web站点,此时则需要使用虚拟主机来定义。如果启用了虚拟主机,每个独立的Web站点都必须要有至少一个独立的主机标识:

        IP地址 + Port + 主机头(请求报文首部中的Host首部的值,通常为FQDN)

        三种典型的虚拟主机实现方式:

            1) 基于IP地址构建的虚拟主机;

            2) 基于Port构建的虚拟主机;

            3) 基于主机头构建的虚拟主机;

            注意:Main Server和Virtual Host不能同时被定义;而且一旦虚拟主机配置被激活,Main Server就不再有效;

        常用指令:

        NameVirtualHost Directive

            功能:在使用基于主机头构建虚拟主机时,指定虚拟主机名称;

            格式:NameVirtualHost addr[:port]

            配置示例:

        /etc/httpd/conf/httpd.conf中添加如下指令:

    1
    2
    Listen172.16.88.99:8000
    NameVirtualHost 172.16.88.99:80

        /etc/httpd/conf.d/vhost1.conf的内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <VirtualHost 192.168.109.2:80>
        ServerNamewww.ppp213.com
        DocumentRoot"/myvhost/vhost1/"
        <Directory "/myvhost/vhost1">
            Options None
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>

        /etc/httpd/conf.d/vhost2.conf的内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <VirtualHost 192.168.109.20:8080>
        ServerNamewww.ppp213.cn
        DocumentRoot"/myvhost/vhost2/"
        <Directory "/myvhost/vhost2/">
            Options None
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>

        /etc/httpd/conf.d/vhost3.conf的内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <VirtualHost 192.168.109.20:80>
        ServerName www.ppp213.org
        DocumentRoot "/myvhost/vhost3/"
        <Directory "/myvhost/vhost3/">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
        </Directory>
    </VirtualHost>

            为主机添加新的ip地址 192.168.109.20:

    1
    ip add add 192.168.109.20/16 dev eth0 label eth0:0

        

            分别创建/myvhost/vhost1,/myvhost/vhost2,/myvhost/vhost3,并再其下创建index.html,重新载入httpd服务后,分别访问192.168.109.2、192.168.109.20、192.168.109.20:8080

            blob.png

            blob.png

            blob.png

  • 相关阅读:
    为函数的参数指定类型
    装饰器函数导致的原函数的元数据被替代--保存元数据
    ssm单项目整合
    security权限控制
    springAOP学习笔记
    springIOC学习笔记
    springDataJpa学习笔记
    springmvc学习笔记
    原生mybaits学习笔记
    java反射和注解
  • 原文地址:https://www.cnblogs.com/noxy/p/8989240.html
Copyright © 2020-2023  润新知