欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第七周LINUX学习笔记

程序员文章站 2022-04-28 21:22:45
HTTP的基本操作 3月17资源子网和通信子网套接字:两类 socket:IP port IP:port Ip.port unix sock:基于文件系统通信实现 BSD发明: MTU:最大传输单元传输层协议: 面向连接的:TCP 虚连接(95%) 无连接的:UDP套接字的类型: TCP套接字 UD ......

                          http的基本操作

3月17
资源子网和通信子网
套接字:两类
    socket:ip port
            ip:port
            ip.port

    unix sock:基于文件系统通信实现

    bsd发明:
    mtu:最大传输单元

传输层协议:
    面向连接的:tcp
        虚连接(95%)
    无连接的:udp

套接字的类型:
    tcp套接字
    udp套接字
    raw套接字(由程序自身维护)

物理层=硬件
数据链路层=驱动

通信:点对点
      c/s(client/server)

客户端的为随机端口

c/s:
   通信子网:只负责传输,内容是什么不管
,   应用层协议:特定的
      http,https,smtp,pop,imap,ftp,ldap

http 超文本传输协议(hyprttext transport protcol)
   html:hypertext mark language(超文本标记语言)

   client:browser
     uri(统一资源提示符)的子集:url(统一资源定位符)
   server:http server

gui
cli

html格式的文件
  <html>
     <head>
        <title></title>
     </head>
     <boby>
          <h1></h1>
            <p><img src=""></p>
           <h2></h2>
            <p>  <a href="a.html" > </a>  </p>
     </body>
   </html>


css: cascading style sheet(层叠样式表)

动态页面:
    程序脚本
        客户端
        服务器端 cgi(common gateway interface程序通用接口)
          c,c++
          perl
          python
          php
          asp.net
          jsp

一个页面中可能会包含多个页面对象

uri:uniform resource identifier
url: uniform resource locator

方案:主机地址:资源

http协议的版本:
    http0.9:只能传输html文档,1991年
    http1.0:支持多媒体数据的处理,保持连接。有缓存功能
    http1.1:支持更多的请求方法,更加精细的缓存控制,持久连接

mime:multipurpose internet mail extension 互联网多用户邮件扩展
  nase64:将二进制数据编码成文本发送,并能够让接受方还原回原来的格式

http报文:

   http事务:一次请求以与其对应的响应
   http方法:get、put、head、post、delete
   http请求:request
       http请求报文
          报文格式:
            <method><request-url><version>
            <headers>首部
            <entity-body>
          首部:
             name:value
             content-type:images/gif

             分三类:
                通用首部
                请求首部
                响应首部

   http响应:response
       http响应报文
       报文格式:
          <version><status><reason-phrase>
          <headers>
          <entity-body>

        <method>:请求方法,希望服务器端执行的动作,如get、head、post等
        <request-url>:请求的资源,可以是相对路径,也可以是完整的url
        <version>:协议版本,格式http/,如http/1.0
        <major>。<minor>多媒体主类型/从类型
        <headers>:http首部
        <status>:状态码
        <reason-phrase>:原因短语,数字状态吗易读信息
        <entity-body>:主体部分

        http协议:是一种stateless(无状态)协议,
             一次http事务结束后,链接即行断开,例如一次请求需要tcp的三次握手,然后请求到一个文件后断开。那么如果有100个文件。就需要执行100次这样的过程。

             加速方式:
                 并行请求:即利用多线程。第一次连接是直接反问,后续才用并行
                 持久连接:保持tcp的连接。
服务器的连接是有限的,连接用户达到阈值时,后续用户就得排队。所以持久连接也需要断开。断开的方式:给予请求文件最大的数量和请求持续的时间。哪个超过或达到要求了便断开。而例如设置时间为10s 那么对于一个繁忙的服务器来讲,后续的用户便需要等待10s。所以是否持久,如何选择到一个最佳分配点,是运维时间分配的重要方向。



http的请求方法:
      安全的方法:get、head
      post、put、delete、options、trace
      扩展方法:lock、mkcol、copy、move

     get:请求获取一个资源,需要服务器发送
     head:跟get相似,但其不需要服务发送资源而仅传回响应首部
     post:支持html表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)
     put:与get相反,向服务写入文档;发布系统
     delete:请求删除url指向的资源
     options:探测服务器端对某资源所支持的请求方法
     trace:追踪请求资源要经过的防火墙、代理或网关等
 
    响应报文代码
       1xx:信息性状态码
           100:
       2xx:成功状态码
           200:ok
           201:created ok
       3xx:重定向状态码
           301:moved permanebtly 永久重定向,在响应报文中使用首部“location:url”指定资源现在所在的位置
           302:found 临时重定向,在响应报文中使用首部“location:url”指定临时资源位置
           304:not modified,条件式请求中使用
       4xx:客户端的错误
           403:forbidden,请求被服务器拒绝
           404:not found,服务器无法找到请求的url
           405:method not allowed,不允许使用此方法请求响应的url
       5xx:服务器类的错误
           500:internal server error,服务器内部错误
           502:bad gateway:代理服务器从上游收到一条伪响应
           503:service unavailable,服务器此时无法提供服务,但将来可能可用

http首部
    通用首部:请求和响应都可以使用的
    请求首部:
    响应首部:
    实体首部:用于指定实体属性
    扩展首部:非标准首部,可能是由程序开发者创建的,例如x-forward-for

 通用首部:
        connection:定义c/s之间关于请求/响应的有关选项
             对于http/1.0,connection keep-alibe
        via:显示了报文经过的中间节点
        cache-control:缓存指示
        pragma

 请求首部:
       cilent-ip:请求端ip
       host:请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
       referer:指明了请求当前资源的原始资源的url
       user-agent:用户代理,使用什么工具发出的请求

       accept首部:用户标明客户自己更倾向于支持使用的能力
           accept:指明服务器能发送的媒体类型
           accept-charset:支持使用的字符集
           accept-encoding:支持使用的编码方式
           accept-language:支持使用语言

       条件请求首部:
           expect:期望的行为
           if-modified-since:是否在指定的时间以来修改过此资源(一般用于询问缓存是否修改过),没有修改过发304
           if-none-match

        跟安全相关的请求首部:
            authorication:客户端提交给服务端的认证数据,如账号和密码
            cookie:客户端发送给服务器端身份标识
            cookie2
    
 响应首部:
               age:响应持续的时间
           server:向客户端标明服务器程序名称和版本

    协商首部:
          accept-ranges:对当前资源来讲,服务器所能够接受的范围类型
          vary:首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端

    跟安全相关的响应首部
           set-cookie:服务器端在某客户端第一次请求时发给的令牌
           set-cookie2:
           www-authenication:质询,即要求客户端提供账号和密码

实体首部:
     location:资源的新位置
     allow:允许对此资源使用的请求方法

     内容首部:
         contern-encoding
         contern-language
         contern-length
         contern-type
         contern-range
         contern-location

     缓存首部:
       etag:实体标签
       expires:过期标签
       last-modified:上一次的修改时间

回顾:
    1.ipc(inter process communication)进程通信
    同一主机进程
    信号、旗语、shm
    unix sock
    跨主机的进程
    rpc
    socket
缓存:内核所维护的内存空间
client:
   gui:
     ie、fierfox、safari、chrome、opera
    cli:
     elinks,curl

server:
    静态
    asf:httpd
    nginx
    lighttpd
    gws
   app server
    iis
    tomcat
    jetty
    resin

 http:html
     http/1.0

一个web请求的基本过程
   建立连接
   接收请求
   处理请求
   访问资源
   构建响应
   发送响应
   记录日志

web服务器的输入输出结构
    单线程i/o结构
    多线程i/o结构 一个线程响应一个请求 与复用的i/o结构的区别是同一个文件需要被读取多次,降低了内存使用率,但是即使一个线程奔溃,其他线程不受影响,安全性增加
    复用的i/o结构  单个线程响应多个请求,增加内存使用率, 但是不安全。
    复用多线程i/o结构:多个线程,每个线程响应多个请求 其实就是多个复用的i/o结构


sendfile:可以让内核在取出请求的文件后直接调用系统功能加工成报文,发送给客户端。这是一种优化机制,但是不能对过大的文件提供此服务



日志写入缓冲,再由缓冲写入磁盘。缓冲有多大需要根据情况来调配。因为缓冲中的数据在电脑突然崩溃时就会被清除。

httpd:俗称apache
  a pachey server=apache

  www.netcraft.com


httpd:高度模块化
   core+modules
   dso:dynamic shared object 动态模块对象
   mpm:multipath processing module
     多道处理模块,非一个模块,而是对一种特性的称谓
       prefork:一个进程一个请求(预先创建好),有最小空闲进程数和最大空闲进程数。select():1024 规定最多涌进来的请求数
          
       worker:一个进程多个线程,一个线程一个请求,与上述的prefork两者性能其实不分伯仲,实际上并没有改变一个线程一个请求的本质,但是节省了很多内存

实际上prefork和worker都是上述所说的结构中的多线程i/o结构

       event:一个线程响应多个请求,不生成进程
           event-driven:事件驱动,主要目的在于实现进程响应多个请求  属于复用多线程i/o结构

上述几种工作方式其实都是由一个主进程来创建子进程来实现,主进程也负责回收子进程

http版本
   http-1.3
   http-2.0
   http-2.2,不支持event
   http-2.4

httpd的功能特性:
   路径别名:alias
   用户认证:authentication
   虚拟主机:virtual host
   反向代理:
       负载均衡:
    用户站点:
    cgi:common gateway interface

安装httpd
    yum -y install  httpd
    服务脚本:/etc/rc.d/init.d/httpd
       脚本配置文件:/etc/sysconfig/httpd
    运行目录:/etc/httpd
    配置文件:
     主配置文件:/etc/httpd/conf/httpd.conf
         扩展配置:/etc/httpd/conf.d/*.conf  可以被主配置文件所调用
     socket:80/tcp,443/tcp
     文档根目录:/var/www/html
         cgi:/var/www/cgi-bin/  能够执行的动态脚本


日志滚动:
    日志切割
    时间、空间

docroot:文档根目录   /var/www/html/

配置文件:
    /etc/httpd/conf/httpd.conf
       配置参数 值
           配置指令不区分字符大小写
           值有可能区分大小写
           有些指令可以重复出现多次

       配置文件格式
            全局配置
            主机配置:用于仅提供一个站点时
            虚拟主机配置:用于提供多个站点时

        配置文件语法测试
            serviice httpd configtest
            httpd -t

        绝大多数配置修改后,可以用过service httpd reload 来生效,如果修改了监听的地址或端口,必须重启服务才能生效

1.监听套接字
  listen [ip:]port
    此指令可以出现多次,用于指定监听多个不同的套接字
       listen 80
       listen 172.16.100.7:8080
2.配置使用keepalive
   keepalive {on|off}
   keepalivetimeout 2 超时时间
   maxkeepaliverequests 50 最大连接
3.mpm
   多道处理模块
   httpd -l 查看编译进内核的模块
   想使用不同的机制,修改配置文件即可 /etc/syconfig/httpd文件
 <ifmodule preforck.c>判断模块是否存在
    startservers       8 默认启动的工作进程数
    minspareservers    5 最少空闲进程数
    maxspareservers   20 最大空闲进程数
    serverlimit      256 最大活动进程数
    maxclients       256 最大并发连接数,最多允许发起的连接请求的个数
    maxrequestsperchild  4000 每个子进程在生命周期内最大允许服务的最多请求个数
  </ifmodule>

    <ifmodule worker.c>
    startservers         4 启动的子进程的个数
    maxclients         300 最大并发连接数,最多允许发起的连接请求的个数
    minsparethreads     25 最少空闲线程数
    maxsparethreads     75 最大空闲线程数
    threadsperchild     25 每个子进程生成的线程数
    maxrequestsperchild  0 每个子进程在声明周期内最大允许服务的最多请求个数
    </ifmodule>

4、dso模块的加载方式
   loadmodule module_name /path/to/module
      如果使用相对路径,则对于serverroot所定义的位置而言
      loadmoudule php5_module /usr/lib64/httpd/modules/php.so
      让服务重载配置文件方能生效
   httpd -m 列出与加载到所有dso模块与非dos模块
    不想加载某个模块的话,配置文件中注释掉即可
5、配置站点根目录
    documentroot /path/to/somewhere

6、页面访问属性
    <direcotry "/path/to/somewhere">
       options  选项
          indexes:缺少指定的默认页面时,允许将目录中的所有文件已列表形式返回给用户:危险:慎用
          followsymlinks:允许跟随符号链接所指向的原始文件
          none:所有都不启用
          all:所有的都启用
          execcgi:允许使用mod_cgi模块执行cgi脚本
          includes:允许使用mod_include模块实现服务器端包含(ssi)
          includesnoexec:允许包含但不允许执行脚本
          multiviews:允许使用mod_negotiation实现内容协商
          symlinksifownermatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件
       allowoverride  用户认证的配置
    </direcotry>
     可以使用正则表达式,使用~
7.基于主机的访问控制
   <direcotry "/path/to/somewhere">
     options
     allowoverride
       none 不禁用下面
     order 次序,写在后面的为默认   即两者都有或者两者都没有的情况下,以写在后面的为默认
     
     allow from
     deny from
    </direcotry>

   如果都匹配或都不匹配时以默认为准
   否则则以匹配到的为准
             allow from
             deny from
                ip,network address
                172.16
                172.16.0.0
                172.16.0.0/16
                172.16.0.0/255.255.0.0
基于用户做访问控制

8.定义默认主页面
   directoryindex index.html  123.html 。。。依次查找

9.用户目录
    如果期望让每个用户都可以创建个人站点:http://server_ip/~username/
    userdir disablied:禁止
    userdir public_html:
          public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问
           用户的家目录得赋予进行httpd进程的用户拥有执行权限
       setfacl -m u:apache:x ~username

10、配置日志功能
   /var/log/http/
       access.log:访问日志,其需要记录的内容需要自定义
       error.log
      
      访问日志:
        customlog "/path/to/log_file" logformat
        logformat定义日志格式
        "%h %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\""
        %h:客户端地址
        %l:远程的登录名,通常为-
        %u:认证时的远程用户名,没有认证时为-
        %t:接收到的请求时的时间,为标准英文格式时间+时区
        \" :转义,显示""
        %r:请求报文的起始行
        %>s:响应状态码,
        %b:以字节响应报文的长度,不包含http报文
        %{header_name}i:记录指定请求报文首部的内容(value)
        %u:请求的url
        
     详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
        错误日志:
         errorlog

11、路径别名
   alias /alias/ "/path/to/somewhere/"
    意味着访问http://server_ip/alias时,其页面文件来自于/path/to/somewhere/中

12、指定默认的字符集
     adddefaultcharset

                              http基本操作丶编译



mime:多媒体类型
   major/minor
       html: text/html
       ascii:text/plagin
       jpeg:image/jpeg
       gif:image/gif
       quicktime(流媒体):video/quicktime


13.脚本路径别名(cgi接口)
   url-->filesystem directory
   cgi:common gateway interface(通用网关接口)使web服务器可以跟一个应用程序进行通信,该应用程序将运行的结果返还给web服务器。从通信环境中获得结果。  如当你访问一个脚本时,可能返回的只是脚本的文本内容,这时就需要服务器利用cgi进行通信,让shell解释器将脚本运行的结果返还

    cgi是不安全的 所以现在极少被使用。取而代之的是php,python等脚本语言使用的 不同的接口
      在第一行写入
      echo “content-type:text/html:
   mod_alias,mod_cgi
   scriptalias /url/ "/path/to/somewhere" somewhere  例如配置时scriptalias /cgi-bin/ "/var/www/cgi-bin/"   访问时 http://ip/cgi-bin/文件名

cgi文件需要放在此目录下才可以被执行
   也可以在目录中实现

  脚本格式一般为
   cat << eof
    content-type:text/html
    <pre>
    the time is : `date`.
    </pre>
    eof

14.基于用户的访问控制
    虚拟用户:不是系统用户,只是为了获取某种资源类型的一种虚拟的用户
       文件/etc/httpd/conf/.htpasswd
       sql数据库
       dbm:
       ldap:轻量级目录访问协议
    认证类型(auth):
        basic:基本认证,账号和密码明文发送
        digest:摘要认证,hash编码之后发送
    认证提供者(authentication provider):账号和密码的存放位置
      authn
    授权机制(authorization):根据什么进行授权
    案例:基于文件,做基本认证 根据用户和组进行授权
    1、编辑配置文件,为需要认证的目录配置认证机制
    <directory "/www/htdocs/fin">a
        options none
        allowoverride authconfig 使用认证配置
        authtype basic 使用基本认证
        authname "private area" 质询时标题
        authuserfile /etc/http/conf/.htpasswd  密码的存放位置
        require vaild-user 可访问的用户

    </directory>
    2、使用htpasswd命令使用生成认证库
      htpasswd
      -c 创建密码,创建第一个用户时使用 ,后续在同一个身份认证库中添加用户名和密码时记得不需要加-c选项,否则会覆盖掉原有文件
      htpasswd -c -m /etc/http/conf/.htpasswd tom
      -m md5格式存放
      -b 批量模式
      -d 删除用户
    3、基于组认证
    <directory "/www/htdocs/fin">
        options none
        allowoverride authconfig 使用认证配置
        authtype basic 使用基本认证
        authname "private area" 质询时标题
        authgroupfile /etc/http/conf/.htpasswd  密码的存放位置
        require group groupname  可访问的用户

    </directory>
       先创建用户,在创建组
       组文件:
         组名:用户1 用户2 用户3

 15.虚拟主机
     一个物理服务器提供多个站点;使用虚拟主机得先取消中心主机(默认主机)
     基于不同的ip实现不同的虚拟主机
        变化ip
     基于不同的port实现不同的虚拟主机
        变化port
     基于不同主机名实现不同的虚拟主机
        变化servername的值
    通过请求报文中的host来实现不同的虚拟主机访问  首先要将上面的#namevirtualhost *:80注释去掉,并且在virtualhost中ip:port都需要以*:80来标注 还要修改linux机中的主机指向地址,windows中也需要进行一些修改。
     
    <virtualhost ip:port>
      severname
      documentroot ""
      <directory "">
      </directory>
      serveralias
      serveradmin
    </virtualhost>
    将全局中的documentroot""注释掉

   虚拟主机的单独配置
       用户认证
       访问日志
       错误日志
       别名
       脚本别名

   基于ip认证机制,基于用户认证

       http协议认证、表单认证

16.https协议
     x509.3证书格式
         证书格式的版本号
         证书序列号
         证书签名算法
         证书颁发者
         有效期
         持有者的名称
         持有者的公钥
         ca的id
         持有者的id
         其他扩展信息
              基本约束
              证书策略
              密钥的使用限制
         ca签名
    ssl握手要完成的工作
         交换协议版本号
         选择一个双方都支持的加密方式
         对两端实现身份验证
         密钥交换
    http:文本协议 80/tcp
    https:二进制格式的协议 443/tcp

    ssl会话基于ip地址进行:不支持在基于主机名的虚拟主机上实现 因为ssl回话进行是在dns域名解析后进行的,所以进行的还是ip地址的通信

    客户端验证服务器端证书时:
          日期检查:证书是否在有效期内
          证书颁发者的可信度
          证书的签名检测:
          持有者的身份检测


    httpd:基于mod_ssl模块实现对ssl的支持
      可以在/etc/pki/tls/certs
      openssl s_client
      -connet:验证的地址:端口
      -cafile:ca证书的路径
    1)、准备好服务器的私钥和证书
    2)、安装mod_ssl模块
         yum -y install mod_ssl
    3)、配置/etc/httpd/conf.d/ssl.conf
       配置实用ssl的虚拟主机
          servername
          docunmentroot
       配置证书和私钥
          sslcertificatfile 证书文件
          sslcertificatkeyfile 密钥文件
     4)、重启httpd服务
     5)、测试
         openssl s_client -connet:验证的地址:端口  -cafile:ca证书的路径

    url rewrite:url重写

17、服务器status页面
    内生的status信息,且此信息可以通过web予以显示
   基于文件系统路径访问属性
    <directory [~] "">
    </directory>

    基于url访问属性
    <location [~] "">
    </location >

     也可以使用<locationmatch "">
     </locationmatch>来实现正则表达式的配置

    基于单个文件的访问属性
     <file [~] "">
     </file>


     

     如果要配置其属性的url能映射到某具体文件系统路径,建议使用<directory>

    处理器:当文件被调用时,apache内部表现形式:一般每种文件类型都有其隐式处理器;否则需要自己定义
       显式的定义使用的处理器:sethandler


    <location /url>
        setheandler server-status
    </location>


    定义访问控制机制
        基于ip控制
        基于用户控制

    示例:
     <location /server-status>
          sethandler sever-status
          authtype basic
          authname "sever status"
          authuserfile "/etc/http/conf/.htpasswd"
          require valid-user 允许所有用户
          order deny,allow
          allow from all
      </location>


18、curl命令

curl是基于url语法在命令行方式下工作的文件传输工具,它支持ftp, ftps, http, https, gopher, telnet, dict, file及ldap等协议。curl支持https认证,并且支持http的post、put等方法, ftp上传, kerberos认证,http上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持ipv6, socks5代理服务器,,通过http代理服务器上传文件到ftp服务器等等,功能十分强大。

curl的常用选项:

    -a/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么
    -basic 使用http基本验证
    --tcp-nodelay 使用tcp_nodelay选项
    -e/--referer <url> 来源网址,跳转过来的网址
    --cacert <file> 指定ca证书 (ssl)
    --compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
    -h/--header <line>自定义头信息传递给服务器
    -i/--head 只显示响应报文首部信息
    --limit-rate <rate> 设置传输速度
    -u/--user <user[:password]>设置服务器的用户和密码
    -0/--http1.0 使用http 1.0

19、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

setoutputfilter deflate

# mod_deflate configuration
<ifmodule mod_deflate.c>
 
    # restrict compression to these mime types
    addoutputfilterbytype deflate text/plain
    addoutputfilterbytype deflate text/html
    addoutputfilterbytype deflate application/xhtml+xml
    addoutputfilterbytype deflate text/xml
    addoutputfilterbytype deflate application/xml
    addoutputfilterbytype deflate application/x-javascript
    addoutputfilterbytype deflate text/javascript
    addoutputfilterbytype deflate text/css
 
    # level of compression (highest 9 - lowest 1)默认为6
    deflatecompressionlevel 9
    
    # netscape 4.x has some problems.
    browsermatch ^mozilla/4 gzip-only-text/html
    
    # netscape 4.06-4.08 have some more problems
    browsermatch ^mozilla/4\.0[678] no-gzip
    
    # msie masquerades as netscape, but it is fine
    browsermatch \bmsi[e] !no-gzip !gzip-only-text/html

</ifmodule>


扩展功能
    apachectl
       apache http服务控制工具
    ab
       apache http服务器性能测试工具
    apxs
       apache 扩展工具
    configure
       配置源代码
    dbmmanage
       为基本认证创建和更新dbm格式的用户认证文件
    htcacheclean
       清理磁盘缓存
    htdigest
        为摘要认证创建和更新用户认证文件。
    htdbm
        操作 dbm 密码数据库。
    htpasswd
        为基本认证创建和更新用户认证文件。
    httxt2dbm
        为 rewritemap 创建 dbm 文件。
    logresolve
        将 apache 日志文件中的 ip 地址解析到主机名称。
    rotatelogs
        不关闭 apache 而切换日志文件。
    suexec
        执行外部程序前切换用户。

20.资源限定
    软限制:可以超出的限制,但仅能超出一定时长
    硬限制:绝对不能超出的限制
   ulimit:只能修改软限制
       -n [n]:显示或限制能打开的最大的文件句柄数,
       -u [n]:所能够打开的最大进程数
    如果修改硬限制
      /etc/security/limits.conf,扩展配置etc/security/limits.d/*.conf
 对谁进行限定    类型  要限定的选项 值

 21、ab工具的初步使用
    -c 模拟的并发数
    -n 模拟的总请求数
   一般并发数应该小于等于请求数
   http_load webbench seige(只做参考)
   tcp_copy

22、httpd-2.4编译安装  01:00
    依赖于更高版本的apr和apr-util
    apr全程 apache portable runtime

     1)解决依赖关系
         yum -y install pcre-devel
     2)编译安装apr
        tar
        cd
        ./configure --prefix=/usr/local/apr
        make && make install
     3)编译安装apr-util
         tar
         cd
          ./configure --frefix=/usr/local/apr-util --with-apr=/usr/local/apr
          make && make install

      httpd2.4新特性
        1)mpm支持在运行时装载
             --enable-mpms-shared=all --with-mpm=event 启用默认的event
        2) 支持event
        3)异步读写
        4) 在每模块及每目录上指定日志级别
        5)每请求配置:<if> <elseif>
        6) 增强版的表达式分析器
        7) 毫秒级的keepalive timeout
        8)支持主机名的虚拟主机不在需要namevirtualhost指令
        9) 支持使用自定义变量
        新增一些模块:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
        对于基于ip的访问做了修改,不在使用order,allow,deny这些机制;而是统一使用require进行
    4)编译httpd
       tar
       cd
       ./configure --prefix=/usr/local/apache(安装路径) --sysconfdir=/etc/httpd24(配置文件) --enable-so(基于dso动态加载模块) --enable--ssl(能基于ssl协议) --enable-cgi(支持cgi机制) --enable-rewrite(支持url重写) --with-zlib(支持数据压缩发送) --with-pcre(perl语言兼容正则表达式库) --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modeles=most(常用的,也可以改成all启用全部的) --enable-mpms-shared=all(将所有的mpm模块编译进来) --with-mpm=event(默认使用event模块)
       make && make install
       头文件、库文件、帮助文档、二进制
       后续的配置
       1 导出头文件
       ln -sv /usr/local/appache/include /usr/include/httpd
       2 导出库文件
        ldconfig -p 显示当前系统的库文件
       该安装并没有提供库文件
       3 导出帮助文件
         vim /etc/man.config   
         添加manpath /usr/local/apache/man
         man -m /usr/local/apache/man httpd
       4 导出二进制文件
          vim /etc/profile.d/httpd.sh
          export  path=/usr/local/apache/bin:$path
       5 修改启动的脚本
    cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
    vim /etc/httpd24/httpd.conf
    随意在空白处添加 pidfile "/var/run/httpd24.pid" 此为自定义pid文件位置
    vim /etc/rc.d/rc.d/httpd24
    apachectl=/usr/local/apache/bin/apachectl
    httpd=/usr/local/apache/bin/httpd
    prog=httpd
    pidfile=${pidfile-/var/run/httpd24.pid}
    lockfile=${lockfile-/var/lock/subsys/httpd24}
    retval=0
    stop_timeout=${stop_timeout-10}
     最后
    chkconfig --add httpd24
    


博客:配置cgi、虚拟主机、https、mod_defaults mod_status

基于ip访问控制:
    允许所有主机访问:require all granted
    拒绝所有主机访问:require all deny
    控制某主机的访问
      require ip ipaddr
      require not ip ipaddr
       ipaddr:
          单个ip地址,例如172.16.100.7
          network/netmask 例如172.16.0.0/255.255.0.0
          network/length 例如172.16.0.0/16
          net 172.16
      require host ipaddr
      require not host ipaddr
         hostname
           gqdn:具体的主机
           域:.magedu

i/o:
    阻塞: 进程发起i/o调用,未完成之前,当前进程会被挂起
    非阻塞:进程发起i/o调用,被调用函数完成之前不会阻塞当前进程而是立即返回 进程可以去干别的事,但是却不知道该i/o请求何时完成,需要重新回来查看

    同步:进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回
    异步:进程发起一个过程调用,即便调用者不能立即得到结果,当调用却会返回,返回时未完成状态,当调用完成后,内核会自行通知调用者已经ok

    同步阻塞
    异步非阻塞
    异步阻塞

内存映射:mmap
i/o模型有5种:几种情况的简单解释  第一阶段:内核向磁盘发起请求数据并存到内核空间中。第二阶段:内核空间复制数据到进程内存空间中,并发送给进程 。一般来讲阻塞和非阻塞发生在第一阶段中 而同步与异步发生在第二阶段中
     同步阻塞    即第一阶段阻塞,第二阶段同步
     同步非阻塞  第一阶段非阻塞,即内核可以去干自己事。但是第二阶段同步,所以 其实与同步阻塞没有多大区别
     i/o复用 select()poll() 第一阶段阻塞
     事件驱动 epoll()wqueue()
        边缘触发
        水平触发
     aio(异步非阻塞)

                              mysql丶lamp


并发响应用户请求时网络i/o
      单进程
      多进程/线程:prefork(一个进程响应一个请求),worker(一个线程响应一个请求)
      select()
      复用模型:单线程响应多个用户请求(事件驱动)
          epoll()
       多线程,每个线程响应多个请求 m*n
网络不支持异步
  i/o模型
     同步阻塞
     同步非阻塞
     i/o复用
     时间驱动
     aio

web: httpd nginx lighttpd
   html plaintext jpeg gif png video
   多媒体类型 主类型/次类型

    首部:通用、请求、响应、实体、扩展
       条件式请求:if-modified-since if-none-match

   请求报文格式    <method> <request-url> <version>
                   首部

               <entity-body>

      响应报文格式 <version><status><reason>

               首部
               <entity-body>

       httpd:虚拟主机、https、别名、<directory><location><file>
            options


动态网站:
    程序:
        java applet  早期在客户端上执行的,通过jvm(java虚拟机)上运行下载下来的java程序 来执行。不太安全
        服务器端执行
            静态资源:jpeg,html,plaintext
            动态资源:程序

            硬编码:直接嵌套进程序中,而且很难剥离出来
           
            分体式结构:即前端设计归前端设计,程序开发归程序开发。只需要在html中引用程序,
              
               可嵌入html中的web开发机制:



    程序=指令+数据

    程序=算法+数据结构

    文本数据库缺陷
        数据冗余和不一致
        数据访问困难
        数据孤立
        完整性问题
        原子性问题
        并发访问问题
        安全性问题
    dmbs: database management system

    用户层 逻辑层 物理层  数据库的访问类似于操作系统。操作系统给我们提供了很多api(库)程序员给他们全部编写成程序,我们可以执行程序来实现功能,但是确缺少一个更好的沟通平台。于是有了bash shell 再提供一个更好与计算机沟通的平台,让用户执行某些程序员编写好的命令,就可以与内核进行沟通。而数据库的用户层与逻辑层之间也是基于类似的机制,此成为sql

    数据模型
        层次模型
        网状模型
        关系模型
            库和表
        非关系型数据库模型:nosql

            笛卡尔乘积
what is cap???????

lamp:linux apache mysql php/perl/python

开源数据库:
     salite
     mysql,postgresql(enterprisedb)
     mariadb
收费数据库
     oracle

     mysql:

     (存取方法)文件管理器
     缓冲区管理器
     磁盘空间管理器     
     数据 索引 事务日志

     事务:一个事情的多次操作的组合,m满足acid测试
        a:原子性
        c:一致性
        i:隔离性
        d:持久性
     sql: struct query language
        支持
         dcl:数据控制
         ddl :date definbation 数据定义语言
              create/alter/drop
         dml:data manipulation 数据查询语言
             insert/delete/select/update
解释器:接受并解释命令

查询引擎包括:分析器,查询计划器,求解器,优化器
驱动:一个程序员使用的api连接数据库的,在应用程序端

线程池:用来管理连接的管理件
线程管理器:

odbc:open database connectivity
ansi:
 sql-86,sql-89,sql-92,sql-99,sql-2003

mysqld/mysql

安装使用mysql:mysql.com
      1、vendor:操作系统自带的rpm包
      2、mysql官方rpm包
      3、通用二进制格式
      4、源码编译
建议做在硬raid的lvm上
基于通用二进制格式,以5.5为例
    内存足够大,硬盘足够快
tar xf -c /usr/local/
ln -sv     mysql
执行数据库初始化脚本
cd scripts
mysql_install_db
--basedir 安装目录
--datadir  数据目录
--defaults-extra-file 额外文件的目录(安装文件)
--user 运行用户
frm:字段
myd:数据
myi:索引
scripts/mysql_install_db --datadir=/data/mydata/ --usr=mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld 添加服务启动脚本到init.d下
cp support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
添加
datadir=

ibdatal
事务日志
ib_logfile0
ib_logfile1
二进制日志
mysql-bin
二进制日志的索引文件
mysql-bin.index
mysql存储引擎 表类型
   myisam
   innodb --> xtradb(percona) xtrabackup
将客户端运行程序添加到环境变量中
vim /etc/profile.d/mysql.sh
export path=/usr/local/mysql/bin:$path
source /etc/profile
这样输入mysql就启动mysql客户端
导出头文件
导出库文件
ldconfig -p 查看
ldconfig 加载所有的

mysql客户端
   用户名
   --user=username
   -u username

   密码
   -p
   --password=

   主机
   -h hostname
   --host=hostname

   执行命令
      -e ‘sql command’

用户账号
   用户@主机

修改管理员密码
mysql 下
set password for 'root'@'localhost'=password('密码');

set password for 'root'@'127.0.0.1'=password('密码');

set password for 'root'@'主机名'=password('密码');

use mysql 设定默认数据库
desc 查看表的结构

drop 删除用户
drop user 'root'@'::1';

 


  连接管理器
查询缓存 分析器
    查询引擎
    存储引擎

 myssql,mysqld
    my.cnf配置文件内容简介
    [mysql] 只应用于mysql这一种客户端
    [mysqld]应用于mysql服务端
    [client] 应用于所有的客户端
 两类默认用户:
     root:
        127.0.0.1
        localhost
        hostname
        : :1 ip value 本地回环地址 ??
    ' ':匿名用户
        localhost
        hostname  
建议将匿名用户和::1删除,并且为剩下的三个root用户添加密码
       
       
       
mysql客户端命令
     自身执行,不需要语句终止符
    \q 退出
    \? 获取帮助
    \g 直接将命令送到服务器端执行
    \g 不再显示为表格显示,而是以列的方式显示
    \c 取消命令的执行
    stsauts:查询运行状态
    \u
mysql服务器端命令
     需要语句终止符,通常默认为分号(;)

    命令帮助的获取
        mysql> help keyword
    命令本身不区分字符大小写,但与文件系统相关的部分则根据os的不同,可能区分大小写

    bif:内建函数
     select user(); select可以执行函数
     select 3+2