• Linux:Day21(上) httpd基础


    CentOS 6:

      程序环境

        配置文件:

          /etc/httpd/conf/httpd.conf

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

        服务脚本:

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

          配置文件:/etc/sysconfig/httpd

        主程序文件:

          /usr/sbin/httpd

          /usr/sbin/httpd.event

          /usr/sbin/httpd.worker

        日志文件目录:

          /var/log/httpd

            access_log:访问日志

            error_log:错误日志

        站点文档目录:

          /var/www/html

        配置文件的组成:

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

          ### Section 1:Golbal Environment

          ### Section 2:'Main' server configuration

          ### Section 3:Virtual Hosts

      常用配置:

        1、修改监听的IP和Port

          Listen [IP:]PORT

          省略ip表示监听本机所有IP;Listen可重复出现多次;

        2、持久连接

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

            如何断开?

              数量限制:100

              时间限制:可配置

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

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

              httpd-2.4 支持毫秒级持久时间;

         非持久连接

         KeepAlive On|Off

         MaxKeepAliveRequests #

           KeepAliveTimeout #

           测试:

           telnet HOST PORT

          GET /URL HTTP/1.1

          Host:HOSTNAME or IP

      3、MPM

        Multipath Process Module:多道处理模块

          prefork,worker,event

        httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM支持:确认方法:

          # ps aux | grep httpd

        默认为/usr/sbin/httpd,其使用prefork

          查看模块列表:

            查看静态编译的模块

              # httpd -l

              Compiled in modules:

                core.c

                prefork.c

                http_core.c

                mod_so.c

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

              # httpd -M

        更换使用的httpd程序:

          /etc/sysconfig/httpd

            HTTPD=

          重启服务生效:

        prefork的配置:

        worker的配置:

        PV,UV

          PV:Page View

          UV:User View

            独立IP量:

          300*86500=40W+

      4、DSO

        配置指令实现模块加载

          LoadModule <mod_name> <mod_path>

          模块路径可使用相对地址

            相对于ServerRoot(/etc/httpd)指向的路径而言;

              /etc/httpd/modules/

      5、定义'Main' server的文档页面路径

        DocumnetRoot

        文档路径映射:

          DocumentRoot指赂的路径为URL路径的起始位置;

            DocumentRoot "/var/www/html"

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

      6、站点访问控制

        可基于两种类型的路径指明对哪些资源进行访问控制

          文件系统路径:

            <Directory " "> </Directory>

            <File " "> </File>

            <FileMatch " " > </FileMatch>

          URL路径:

            <Location " "> </Location>

            ...

        访问控制机制:

          基于来源地址;

          基于账号;

      7、Directory中”基于来源地址“实现访问控制

        (1) Options

          所有可用特性:Indexes Includes FollowSymLinks SymLkinksifOwneratch ExecCGI MultiViews

                 None All

            Indexes:索引;

            FollowSymlinks:允许跟踪符号链接文件;

        (2) 基于来源地址的访问控制机制

          Order:检查次序

            Order allow,deny

            Order deny,allow

          Allow from

          Deny from

      8、定义默认主页面

        DirectoryIndex  index.html  index.html.var

      9、日志设置

        错误日志:

          ErrorLog logs/error_log

          LogLevel warn

             debug, info, notice, warn, error, crit

        访问日志:

          CustomLog logs/access_log combined

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

          %h:客户端IP地址;

          %l:Remote logname (from identd, if supplied),-表示为空;

          %u:Remote user (from auth; may be bogus if return status (%s) is 401);

          %t:Time the request was received (standard english format),服务器收到请求的时间;

          %r:First line of request,请求报文的首行信息(method url version);

          %>s:响应状态码;

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

          %{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;

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

        详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      10、路径别名

        DocumentRoot "/www/htdocs"

          http://www.magedu.com/download/bash-4.4.2-3.e16.x86_64.rpm

            --> /www/htdocs/download/bash-4.4.2-3.e16.x86_64.rpm

        Alias /URL/ "/PATH/TO/SOMEDIR"

          Alias /bbs/ "/forum/htdocs"

            http://www.magedu.com/bbs/index.html

              --> /forum/htdocs/bbs

      11、设定默认字符集

        AddDefaultCharset UTF-U

        GBK,GB2312,GB18030

      12、基于用户的访问控制

        认证质询:

          WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

        认证:

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

          认证类型:

            basic:明文

            digest:消息摘要

        安全域:需要用户认证后方能访问的路径;

          应该通过名称对其进行标识,并用于告知用户认证的原因;

        用户的账号和密码存储于何处?

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

          存储:

            文本文件

            SQL数据库

            ldap

            nis

        basic认证:

          (1) 定义安全域

            <Directory "/www/htdocs/admin">

              Options None
              AllowOverride None
              AuthType Basic
              AuthName "Administrator home"
              AuthUserFile "/etc/httpd/conf.d/.htpasswd"
              Require user tom jerry
            </Directory>

              允许账号文件中的所有用户登录访问;

                Require valid-user

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

            使用htpasswd命令进行管理

              htpasswd [options] passwordfile username

                -c:自动创建passwordfile,因此,仅应该在添加第一用户时使用;

                -m:md5加密用户密码;

                -s:sha1加密用户密码;

                -D:删除指定用户

          (3) 实现基于组进行认证

            <Directory "/www/htdocs/admin">

              Options None
              AllowOverride None
              AuthType Basic
              AuthName "Administrator home"
              AuthUserFile "/etc/httpd/conf.d/.htpasswd"

              AuthGroupFile "/etc/httpd/conf.d/.htgroup"
              Require group GROUP1 GROUP2 ...
            </Directory>

            要提供:用户账号文件和组文件;

              组文件:每一行定义一个组

                GRP_NAME:user1 user2 user3 

      13、虚拟主机

        有三种实现方案:

          基于ip:

            为每个虚拟主机准备至少一个ip地址;

          基于port:

            为每个虚拟主机准备至少 一个专用port;实践中很少使用;

          基于hostname:

            为每个虚拟主机做准备至少 一个专用hostname;

          可混合使用上述三种方式中任意方式;

        注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;

          禁用中心主机:注释DocumnetRoot

        每个虚拟主机都有专用配置:

          <VirtualHost IP:PORT>  #这个IP和PORT即为虚拟主机监听的套接字,这个套接字在全局Listen也要被定义。

            SeverName

            DocumnetRoot " "

          </VirtualHost>

            SeverAlias:虚拟主机的别名;

            ErrorLog

            CustomLog

            <Directory "">

            </Directory>

        示例1:基于ip      

          <VirtualHost 192.168.6.129:80>
            DocumentRoot /vhost/web1/htdocs
            ServerName web1.magedu.com
          </VirtualHost>


          <VirtualHost 192.168.6.130:80>
            DocumentRoot /vhost/web2/htdocs
            ServerName web2.magedu.com
          </VirtualHost>

        示例2:基本port 

          <VirtualHost 192.168.6.130:80>
            DocumentRoot /vhost/web2/htdocs
            ServerName web2.magedu.com
          </VirtualHost>


          <VirtualHost 192.168.6.130:8080>
            DocumentRoot /vhost/web3/htdocs
            ServerName web3.magedu.com
          </VirtualHost>

        示例3:基于hostname  # 需要开启NameVirtualHost 192.168.6.129:80

          <VirtualHost 192.168.6.129:80>
            DocumentRoot /vhost/web1/htdocs
            ServerName web1.magedu.com
          </VirtualHost>


          <VirtualHost 192.168.6.129:80>
            DocumentRoot /vhost/web2/htdocs
            ServerName web2.magedu.com
          </VirtualHost>


          <VirtualHost 192.168.6.129:80>
            DocumentRoot /vhost/web3/htdocs
            ServerName web3.magedu.com
          </VirtualHost>

      14、内置的status页面

        <Location /server-status>
          SetHandler server-status
          Order deny,allow
          Deny from all
          Allow from 192.168
        </Location>

         实现:基于账号实现访问控制 

    检查httpd的配置有没有错误:httpd -t 或 service httpd configtest

  • 相关阅读:
    华为超大云数据中心落地贵州,这些硬核技术有利支撑“东数西算”
    在高并发环境下该如何构建应用级缓存
    使用 Python Poetry 进行依赖管理
    AI新手语音入门:认识词错率WER与字错率CER
    一文带你了解什么是GitOps
    需求蔓延,常见但不正常,教你如何破
    云图说|初识ModelArts开发者生态社区——AI Gallery
    XML学习笔记:关于字符编码的理解~
    Python中单引号、双引号和三双引号的区别:
    LBFGS算法的使用~
  • 原文地址:https://www.cnblogs.com/sq5288/p/10796179.html
Copyright © 2020-2023  润新知