• httpd简介


    http服务器程序

    httpd Apache
    nginx
    lightttpd
    

    httpd介绍

    特性:
    1. 高度模块化:Core+Modules
    2. DSO:Dynamic Shared Ojbect动态加/卸载
    3. MPM:Multi-processing Module多路处理模块
    4. 虚拟主机:IP,Port,FQDN
    5. CGI:通用网关接口
    6. 反向代理(和正向代理的区别:正向代理距离客户端近,加速客户端的访问速度;反向代理距离服务器近,可以做调度,把client的请求转发到websrv集群中的某一个client<--->proxy(cache)<--->reverse proxy<--->websrv1,websrv2,sebsrnv)
    7. 负载均衡
    8. 路径别名
    9. 双向认证
    10. 支持第三方模块
    

    MPM工作模式:

    ### prefork:多进程I/O模型,每个进程响应一个请求,默认模型
        一个主进程:生成和回收n个子进程,创建套接字,不响应请求
        多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多  个空闲进程,等待请求,最大不超过1024个(原因是 ulimit -a:open files 1024)
    
    ### worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
        一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
    
    ### event:事件驱动模型(worker模型的变种)
        一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
    
    在支持MPM工作模式上,不同的httpd版本不同的方式:
    
    httpd-2.2版本,有不同的二进制程序:
    
    /usr/sbin/httpd
    /usr/sbin/httpd.event
    /usr/sbin/httpd.worker
    
    httpd-2.4版本,有不同的模块来支持,好处是动态加载,不需要更换二进制执行程序,不用时可以动态卸载:
    
    /usr/lib64/httpd/modules/mod_mpm_event.so
    
    /usr/lib64/httpd/modules/mod_mpm_worker.so
    
    /usr/lib64/httpd/modules/mod_mpm_prefork.so
    

    httpd安装

    版本:

    CentOS6:2.2
    CentOS7:2.4
    

    安装方式

    rpm:centos发行版,稳定,建议使用
    编译:定制或特殊需求
    

    httpd配置文件的组成

    配置格式:directive value
    grep "^[^ #]" /etc/httpd/conf/httpd.conf
    
    各个配置参数的用法,见管网http://httpd.apache.org/docs/2.4/mod/quickreference.html
    

    httpd几个主要配置:

    1. welcome.conf
      /etc/httpd/conf.d/welcome.conf 此文件是访问网站找不到主页时显示的默认页面

    2. servertoken
      默认是full,有安全隐患,通过浏览器的debug模式可以看到apache的详细版本,如下图:
      [root@wwwCentOS6 ~]# curl -I 172.20.42.145
      HTTP/1.1 200 OK
      Date: Thu, 21 Jun 2018 11:41:27 GMT
      Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
      Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
      ETag: "12-56f0e2db429bf"
      Accept-Ranges: bytes
      Content-Length: 18
      Content-Type: text/html; charset=UTF-8

      新建/etc/httpd/conf.d/user.conf,增加
      Servertokens prod

      [root@wwwCentOS6 ~]# curl -I 172.20.42.145
      HTTP/1.1 200 OK
      Date: Thu, 21 Jun 2018 11:43:16 GMT
      Server: Apache
      Last-Modified: Wed, 20 Jun 2018 07:59:30 GMT
      ETag: "12-56f0e2db429bf"
      Accept-Ranges: bytes
      Content-Length: 18
      Content-Type: text/html; charset=UTF-8

    3. 多端口支持
      在上述的user.conf中,增加
      Listen 8080
      如果更改默认的80为别的端口,需要更改主配置文件httpd.conf的Listen为不同的端口,同时Listen可以绑定特定IP,如Listen 12.34.56.78:80

    4. 持久连接
      KeepAlive默认是on,时间是5秒。
      KeepAliveTimeout 50 设置为50秒
      MaxKeepAliveRequests 100

      用telnet测试:
      [root@wwwCentOS6 ~]# telnet 172.20.42.145 80
      Trying 172.20.42.145...
      Connected to 172.20.42.145.
      Escape character is '^]'.
      GET /index.html HTTP/1.1
      HOST: 6.6.6.6

      注意:具体待久连接的时间设置需要看具体的业务需求。断开连接由KeepAliveTimeout和MaxKeepAliveRequests两个参数一起作用,只要其中有一个达到设定值就触发断开。

    5. MPM( Multi-Processing Module)多路处理模块
      00-mpm.conf
      默认是LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
      压力测试工具:ab -c 100 -n 1000 http://IP
      DSO:Dynamic Shared Object
      http -M动态模块查看
      modules -> ../../usr/lib64/httpd/modules模块存放路径

      增加默认的进程和线程数量
      StartServers 20
      StartThreads

      要根据工作模型来设置,如prefork模式不支持线程

    6. 定义'Main' server的文档页面路径
      DocumentRoot “/path”
      CentOS7下,必须开放此文件夹的权限才可以访问
      DocumentRoot "/data/website"
      <Directory "/data/website">
      Require all granted

    7. 定义站点主页面
      DirectoryIndex index.html index.html.var
      可以是软链接
      mkdir -p /app/sports/
      echo sports > /app/sports/index.html
      在/data/website
      ln -s /app/sports/ sports
      访问http://ip/sports

    8. 站点访问控制常见机制
      Require ip IPADDR:授权指定来源的IP访问
      Require not ip IP:拒绝特定的主机访问
      在http2.2中
      order deny,allow (allow的优先级大于deny,后面的优先级高)
      allow from 192.168.30.6
      deny from 192.18.30.0/24

      另外,对于某些特定,设置无法访问,如下禁止访问所有.conf结尾的配置文件。
      <Files ".conf">
      Require all denied

      或者
      <Filesmatch ".
      .(conf|ini)$">
      Require all denied

      还有如某一个配置的文件夹下的所有文件都设定访问权限:
      <location /conf>

      Require all granted
      Require not ip 172.20.42.144


      如上的例子是不允许172.20.42.144访问。
      <location /conf>

      Require all denied
      require ip 172.16.1.1 允许特定IP

      <location /conf>
      如上的例子是只允许172.16.1.1访问。
      <File "*.conf">
      Require all denied

      如上例子是不允许任何人访问.conf的文件,客户端访问会出现 403 Forbidden.

      <Filesmatch ".*.(conf|ini)$">
      Require all denied

      filesmatch和files同样的功能,支持正则表达式。

      另外,上述的Directory,Location,File,Filematch配置能够防止/conf下的配置文件被所有用户访问,以防止一些配置文件如mysql的用户名和密码泄露给互联网用户。

    9. Options设置,可以设置某个Directory下的访问权限
      如下配置禁止软链接的访问:
      <Directory "/var/www/html">
      options -FollowSymLinks
      Require all granted

      如下配置可以在没有index.html情况下显示所有文件列表,应用情型如阿里云的repository,显示文件夹索引
      <Directory "/var/www/html">
      options +indexes -FollowSymLinks
      Require all granted

    10. AllowOverride
      AllowOverride optitions=FollowSymLinks

    11. 日志设定
      Referer有利于分析用户是通过哪个网站转发的如通过baidu转发的,也可以监控网站盗链的发生。
      User-Agent记录浏览器的类型。防止爬虫一定程度上,爬虫可以伪造浏览器类型。curl -A "evan" http://I(伪造名字叫evan的浏览器)

    12. 定义路径别名
      未完待续

  • 相关阅读:
    React Native初始化项目后执行react-native run-ios,构建失败
    React Native细节知识点总结<二>
    pod installation failed with react native 0.44
    web项目文件上传
    Type Java compiler level does not match the version of the installed Java project facet.项目内容没错但是项目上报错,不影响运行
    在MyEclipse中改了项目名称,到tomcat的webroot下发现,部署的名称还是原来的。
    jsp页面上读取MySQL数据库datetime时间显示问题
    MySQL日期时间字段
    Date、Calendar、Timestamp的区别与转换
    Java创建Timestamp的几种方式
  • 原文地址:https://www.cnblogs.com/liangjindong/p/9230857.html
Copyright © 2020-2023  润新知