美文网首页
http整理2

http整理2

作者: ckhzw | 来源:发表于2017-05-11 16:00 被阅读0次

    httpd相关:

    • httpd程序版本:

    。1.3 停止维护

    。2.0

    。 2.2 event为测试使用

    。 2.4 event生产中可用;

    • httpd的特性:

    1.高度模块化:核心模块+功能模块

    2.DSO:模块支持动态装卸载;

    3.MPM:Multipath processing Modules多路处理模块;

    • prefork 多进程模型

      一个主进程:负责接收请求;负责生成子进程和回收子进程;

      多个子进程:每个子进程负责处理一个用户请求;

    • worker 多进程多线程模型:

      一个主进程生成多个子进程;

      每个子进程生成多个线程;

      每个线程处理一个用户的请求;

    • event 事件驱动模型

      一个主进程生成多个子进程;

      每个子进程处理多个请求;

    4.CGI:通用网关接口;

    5.虚拟主机

    6.反向代理

    7.负载均衡

    8.路径别名

    9.丰富的认证机制:basic,digest

    10.支持扩展的第三方模块;

    • httpd的程序环境:

    。 CentOS 6:httpd 2.2

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

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

    。主程序文件:/usr/sbin/httpd,/usr/sbin/httpd.event,/usr/sbin/httpd.worker

    。日志文件目录:/var/log/httpd/{access,error}.log

    。默认站点目录:/var/www/html

    -CentOS 7:httpd 2.4

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

    。模块相关配置文件:/etc/httpd/conf.modules.d/*.conf

    。主程序文件:/usr/sbin/httpd #2.4支持MPM动态切换;

    。日志文件目录:/var/log/httpd/{access,error}.log

    。默认站点目录:/var/www/html

    • 服务启动和控制:

    。 systemctl start httpd.service

    。 systemctl enable httpd.service

    • 配置httpd2.2

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

    • 分为三段:

    1.全局环境

    2.中心主机

    3.虚拟主机

    注意:中心主机和虚拟主机不能同时使用,即使用虚拟主机前,需将中新主机的DocumentRoot注释;

    配置格式:指令 值

    常用配置:

    • 1.监听的端口,默认监听在本机的所有ip地址

    Listen 80

    Listen 8080

    注意:修改监听的端口后必须重启服务后才会生效;

    • 2.网站的根目录:

    DocumentRoot "/var/www/html"

    例如:http://www.mageud.com/log.jpg--->/var/www/html/log.jpg

    • 3.保持连接:

    tcp连接建立后,每个资源获取完成后不会断开连接,而是继续进行其他资源请求;为了避免大量的连接被占据,可以从数量和时间上进行限制;

    KeepAlive On|Off

    KeepAliveTimeout

    MaxKeepAliveRequests

    • 4.MPM

    查看当前使用的MPM:#ps aux | grep httpd

    切换MPM:vim /etc/sysconfig/httpd

    重启服务后生效;

    httpd -l 查看静态编译的模块

    httpd -M 查看静态编译及动态编译的模块;

    配置MPM:

    
    
    StartServers       8 #httpd服务启动时,开启的进程数;
    
    MinSpareServers    5 #最小空闲进程数;小于该值时,主控进程会开启一定的进程数,达到此处指定的个数;
    
    MaxSpareServers   20 #最大空闲进程数;
    
    ServerLimit      256 #允许启动的最大在线进程数量;
    
    MaxClients       256 #最大并发响应数;应该小于ServerLimit中的值;
    
    MaxRequestsPerChild  4000 #每个进程最多可以处理多少个请求,超过4000时销毁;
    
    
    ```
    
    ```
    
    
    StartServers         4 #httpd服务启动时,启动的进程数;
    
    MaxClients         300 #最大并发响应数
    
    MinSpareThreads     25 #最小空闲线程数
    
    MaxSpareThreads     75 #最大空闲线程数
    
    ThreadsPerChild     25 #每个进程可以启动25个线程
    
    MaxRequestsPerChild  0 #每个进程可以处理无限个请求
    
    
    ```
    
    - 5.DOS
    
    LoadModule xxx.so
    
    
    
    - 6.基于站点的访问控制
    
    ```
    
     #对/var/www/html目录下的所有资源进行访问控制;
    
       Options Indexes FollowSymLinks
    
       AllowOverride None
    
       Order allow,deny
    
       Allow from all
    
    
    ```
    
    ```
    
    Options:
    
    indexes:指明的URL路径不存在时,返回列表给用户;建议关闭;
    
    FollowSymLInks:允许跟踪符号链接文件所指向的原文件;
    
    Includes:允许启用服务端包含;
    
    SymLinksifOwnerMatch 原文件和链接文件的属主和属组相同时才允许跟踪访问;
    
    ExecCGI 允许执行CGI脚本
    
    MultiViews 允许执行内容协商;
    
    None 全部都不;
    
    ALL 所有都;
    
    AllowOverride:与访问控制相关是否允许放在.htacesss文件中;None什么都不可以放,建议使用None;
    
    ```
    
    
    
    - 7.基于ip地址的访问控制:
    
    ```
    
      Order allow,deny #放在后面的为默认法则;
    
       Allow from all
    
    Deny from 来源地址ip或者网段;
    
    网段地址格式:
    
    172.16
    
    172.16.0.0
    
    172.16.0.0/16
    
    172.16.0.0/255.255.0.0
    
    
    
       例:
    
         Order allow,deny
    
         Allow from 172.16 //仅允许172.16网段的地址访问;
    
    ```
    
    
    
    - 8.定义站点主页面:
    
    ``DirectoryIndex index.html index.html.var``
    
    当请求的资源不存在时,http服务器会有两种处理结果:
    
    。返回404或者403
    
    。将当前网页目录下的内容全部列出来;
    
    
    
    - 9.定义路径别名:Alias
    
    ``DocumentRoot "/data/www"``
    
    ``Alias /download/ "/rpms/pub/" 注意:定义别名时,前后的斜杠应该保持一致,不然会出错,影响访问效果;``
    
    ``http://www.magedu.com/download/test.html --->/rpms/pub/test.html``
    
    
    
    - 10.设定默认字符集
    
    ``AddDefaultCharset UTF_8``
    
    
    
    - 11.日志相关
    
    ```
    
    ErrorLog logs/error_log 错误日志
    
    CustomLog logs/access_log combined 访问日志
    
    LogFormat 定义日志格式
    
    %% 使用的Method
    
    %a 远程主机的ip地址
    
    %A web服务器的ip地址
    
    %B 响应豹纹的大小,不包含http响应首部;单位是字节;
    
    %H 请求使用的协议
    
    %l 远程登录的用户名,通常为一个‘-’
    
    %{Referer} 当前页面是从哪个页面跳转过来的
    
    %{User-Agent}客户端使用的浏览器
    
    %m request method
    
    %t 服务器收到请求时的时间,标准英文格式的时间;
    
    %u 远程登录的用户名,非登录访问的时候,其为一个减号;
    
    ```
    
    
    
    - 12.基于用户的访问控制:
    
    ```
    
    1.定义安全域:
    
    
    Options None
    
    AllowOverride None
    
    AuthType Basic
    
    AuthName "dangerous" #该页面需要认证的原因说明;
    
    AuthUserFile "/etc/httpd/conf/.htpasswd" #账号密码文件存放的位置
    
    Require user username1 username2... 允许哪些用户登录
    
    #Require user vaild-user #允许所有用户登录;
    
    Require group grpname1 grpname2 ... 允许哪些组登录;
    
    ```
    
    2.创建用户密码文件:
    
    ```
    
    #htpasswd -c -m /etc/httpd/conf/.htpasswd Username
    
    -c 第一次创建密码文件时使用;
    
    -m 使用MD5算法
    
    -D 删除一个用户;
    
    注意:基于组的认证,不需要创建组,先创建用户;并将用户写入 /etc/httpd/conf/.htgroup 中;
    
    格式: mygrp:username1 username2
    
    ```
    
    
    
    13.虚拟主机配置:基于ip,基于port,基于FQDN
    
    ```
    
    vim /etc/httpd/conf.d/vhost.conf
    
    基于port:
    
    Listen 8080
    
    
    DocumentRoot /data/www/
    
    ServerName www.a.com
    
    ErrorLog logs/www.a.com-error_log
    
    CustomLog logs/www.a.com-access_log common
    
    
    
    
    
    DocumentRoot /data/www1/
    
    ServerName www.b.com
    
    ErrorLog logs/www.b.com-error_log
    
    CustomLog logs/www.b.com-access_log common
    
    
    
    
    基于FQDN:
    
    NameVirtualHost 192.168.118.133:80 //2.2需要添加此项,2.4省略
    
    
    DocumentRoot /data/www/
    
    ServerName www.a.com
    
    ErrorLog logs/www.a.com-error_log
    
    CustomLog logs/www.a.com-access_log common
    
    
    
    DocumentRoot /data/www1/
    
    ServerName www.b.com
    
    ErrorLog logs/www.b.com-error_log
    
    CustomLog logs/www.b.com-access_log common
    
    
    
    
    基于ip:
    
    
    DocumentRoot /data/www/
    
    ServerName www.a.com
    
    ErrorLog logs/www.a.com-error_log
    
    CustomLog logs/www.a.com-access_log common
    
    
    
    DocumentRoot /data/www1/
    
    ServerName www.b.com
    
    ErrorLog logs/www.b.com-error_log
    
    CustomLog logs/www.b.com-access_log common
    
    
    ```
    
    
    
    - 14.开启httpd状态页面
    
    ```
    
    1.确认status模块已经加载:
    
    LoadModules status_module modules/mod_status.so
    
    2.启动状态访问页面:
    
    
    SetHandler server-status
    
    Order deny,allow
    
    Allow from 172.18.254.11 #仅允许此处指定的ip地址访问;
    
    
    ```
    
    
    
    - 15.httpd运行的用户和组
    
    ``User apache``
    
    ``Group apache``
    
    注意:如果是编译安装的httpd默认的用户和组都是daemon;
    
    
    
    - 16.使用mod_deflate模块来压缩也买优化传输速度
    
    ```
    
    1.确认已加载deflate模块:
    
    # httpd -M | grep deflate
    
     deflate_module (shared)
    
    2.排除不适合压缩的资源
    
    设置输出过滤器
    
    添加需要压缩的文件类型
    
    3.测试:访问页面,打开F12查看调试信息,Content-Encoding gzip
    
    SetOutputFilter DEFLATE
    
    AddOutputFilterByType DEFLATE text/html text/plain text/css  text/xml text/javascript  application/xhtml+xml
    
    ```
    
    
    
    配置https:
    
    - HTTPS协议
    
    。 Http Over SSL,TCP 443端口
    
    。  HTTPS是二进制协议
    
    
    >SSL协议会话过程:
    
    客户端发送可供选择的加密方式,并向服务器请求证书;
    
    服务器端发送证书以及选定的加密方式(公钥)给客户端;
    
    客户端取得证书并进行证书验证,如果信任给其发证书的CA,则:
    
    验证证书来源的合法性:用CA的公钥解密证书上的签名
    
    验证证书内容合法性:完整性验证
    
    检查证书的有效期
    
    检查证书是否被吊销
    
    证书中拥有者的名字,与访问目的主机要一致
    
    客户端生产临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
    
    服务用此密钥加密用户请求的资源,响应给客户端
    
    注意:SSL会话是基于IP地址所创建,所以单IP的主机上,仅可以使用一个Https虚拟主机。
    
    
    
    配置httpd支持https,主要步骤
    
    ```
    
    1.创建私有CA
    
    2.在服务器创建证书签署请求
    
    3.CA签证
    
    4.配置Httpd支持SSL及使用的证书
    
    5.测试基于Https访问相应的主机
    
    ```
    
    ```
    
    #创建CA服务器:
    
    [root@www CA]# cd /etc/pki/CA/
    
    [root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
    
    Generating RSA private key, 2048 bit long modulus
    
    ..........................................................................+++
    
    ...........................+++
    
    e is 65537 (0x10001)
    
    [root@www CA]# ll private/
    
    total 4
    
    -rw-------. 1 root root 1679 Nov  1 04:37 cakey.pem
    
    [root@www CA]# openssl req -new  -x509 -key private/cakey.pem -out cacert.pem
    
    [root@www CA]# touch serial index.txt
    
    [root@www CA]# echo 01 > serial
    
    ##web服务器证书签署请求:
    
    [root@www CA]# cd /etc/httpd/
    
    [root@www httpd]# mkdir ssl
    
    [root@www httpd]# cd ssl/
    
    [root@www ssl]# (umask 077;openssl genrsa -out httpd.key 1024)
    
    [root@www ssl]# openssl req -new   -key httpd.key -out httpd.csr
    
    [root@www ssl]# ls
    
    httpd.csr  httpd.key  //此时可以将证书签署请求发送给CA
    
    ##CA服务器签署请求:
    
    [root@www CA]# openssl ca -in /etc/httpd/ssl/httpd.csr -out certs/httpd.crt
    
    #将生成的证书发送给Httpd服务器
    
    [root@www CA]# ll /etc/httpd/ssl/
    
    -rw-r--r--. 1 root root 3866 Nov  1 04:52 httpd.crt
    
    
    
    1.Httpd安装mod_ssl模块
    
    yum install mod_ssl
    
    httpd -M | grep ssl
    
    ssl_module (shared)
    
    
    
    2.修改/etc/httpd/conf.d/ssl.conf配置文件
    
     DocumentRoot "/var/www/html"
    
     ServerName www.magedu.com
    
     SSLCertificateFile /etc/httpd/ssl/httpd.crt
    
     SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
    
    
    3.重启服务,测试https是否正常访问
    
    ```
    
    
    
    ### Httpd 2.4 的新特性:
    
     。MPM支持运行运行DSO机制,以模块形式按需加载
    
     。Event MPM生产环境可用
    
     。异步读写机制
    
    。 支持每模块及每目录的单独日志级别定义
    
     。每请求相关的专用配置
    
     。增强版的表达式分析式
    
    。 毫秒级持久连接时长定义
    
    。 基于FQDN的虚拟主机不再需要NameVirtualHost指令
    
     。新指令,AllowOverrideList
    
    。 支持用户自定义变量
    
    。  更低的内存消耗
    
    
    
    ### Httpd 2.4新模块介绍
    
     。mod_proxy_fcgi 支持PHP等动态语言
    
    。 mod_proxy_scgi SCGI Protocol,支持Python
    
    。  mod_remoteip 获取远端真实访问IP
    
    ```
    
    1.MPM模式切换
    
     编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf`
    
    2.Httpd 2.4基于IP的访问控制
    
       取消Allow,Deny,使用Require all granted/deny
    
       要将规则放在一个容器内
    
       基于域名的虚拟主机的实现,任何目录下的页面,只有显式授权才能被访问
    
       允许特定的IP访问
    
       Require IP IPADDR  //授权指定来源的IP访问
    
       Require not IP IPADDR //拒绝
    
       控制特定的主机访问
    
       Require host HOSTNAME //授权指定来源的主机访问,可以使用FQDN,也可以使用域名
    
       Require not HOSTNAME //拒绝
    
    
    3.基于FQDN的虚拟主机不需要NameVirtualHost指令
    
    4.毫秒级KeepAlive
    
    KeepAlive On
    
    KeepAliveTimeout 30ms
    
    MaxKeepAliveRequests 20
    
    ```
    
    
    
    ### Curl和Elinks命令:
    
    。命令行访问工具:
    
    - curl options http://www.xxx.com
    
    - options:
    
    。 -A STRING 设置用户代理
    
    。 --basic 使用basic认证
    
    。--referer URL 指定来源网址
    
    。  --compressed 要求返回的是压缩的格式
    
    。  -I 只返回响应报文中的首部信息
    
    。  --limit-rate 设置传输速度
    
    。  -m 设置最大传输时间
    
    。  -k 不使用证书
    
    
    
    ``elinks options http://www.xxx.com ``
    
    - options:
    
     -anonymous 使用匿名账号方式
    
    
    ### LAMP:Linux+Apache+MySQL|Mariadb|MongoDB+PHP|Perl|Python
    
    -  httpd:处理静态资源
    
    - PHP:处理动态资源
    
    
    
    。静态资源:原始形式和响应内容一致;
    
    。动态资源:客户端请求的是程序文件,需要服务器端执行后,将执行结果返回给客户端;
    
     客户端技术:JavaScript
    
     服务器端技术:PHP,JSP
    
    
    
    ### CGI:通用网关接口;
    
    
    
    -  安装WordPress数据库基本操作:
    
    ```
    
    mysql基本操作:
    
    #mysql -uroot -h127.0.0.1
    
    mysql>grant all privileges on *.* to username@'%' identified by 'walker';
    
    mysql>flush privileges;
    
    mysql>create database wpdb;
    
    mysql>show databases;
    
    mysql>grant all privileges on wpdb.* to wpuser@'%' identified by "walker";
    
    浏览器中安装WordPress:
    
    http://IP/wordpress
    
    ```
    
    - 优化httpd:2.4版本默认是打开的;2.2手动打开;
    
    ```
    
    vim /etc/httpd/conf/httpd.conf
    
    EnableSendfile on 开启sendfile
    
    减少内核态切换和用户数据的开销
    
    加快静态文件的请求速度
    
    减少CPU和内存开销
    
    适用于大量的小文件;
    
    ```
    
    
    - php-fpm
    
    。5.3.3之前的version 如果想使用php-fpm需要对php打补丁;#patch
    
    。  php-fpm的工作方式:类似于apache的worker模式;
    
    
    >正向代理:教室内的网络通过一个ip地址访问外网
    
    反向代理:通过代理服务器访问后面的web服务器;
    
    
    
    
    
    
    - 自定义错误页面:
    
    `` ErrorPage``
    
    ``Sendfile机制:直接在内核中分装http首部,发送给客户端,节省资源;``
    
    ```
    
     减少内核态切换和用户数据的开销;
    
     加快静态文件的请求速度;
    
     减少CPU和内存开销;
    
     适用于大量的小文件;
    
    ```
    
    > 开启SendFile : vim /etc/httpd/conf/httpd.conf
    
     EnableSendfile on  优化apache的方式之一;

    相关文章

      网友评论

          本文标题:http整理2

          本文链接:https://www.haomeiwen.com/subject/gmwotxtx.html