web服务介绍二)

apache指令说明:
http://httpd.apache.org/docs/2.2/mod/directives.html

Listen 172.18.100.67:8081  监听某个指定地址和端口
启动前检查一下语法:
    httpd -t

如果要监听多个端口,要多行写
    Listen 80
    Listen 8080

页面上关于主机的一些信息:
         ServerTokens OS

ExtendedStatus On

    Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,
    打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息

指明配置存放的位置:
            ServerRoot “/etc/httpd”

超时时间与后端应用建立连接的时候
      Timeout 60

DocumentRoot : 资源映射 (网页根目录)
                我们在访问某个站点的时候,站点从哪儿去加载资源
    http://www.magedu.com/a.jpg ——–> /var/www/html/a.jpg
    DocumentRoot “/data/www/”      #建议修改时注释复制后修改
       注意:  setenforce 0  一定要记得最先关掉 

非保持连接(短连接)       #连接请求后立即断开
         对于大量并发的场景中,短连接的三次握手四次挥手占据了大量带宽

保持连接(长连接)         #连接请求后不会立马断开,避免再次连接三次握手
         避免过多的连接保持,可以从时间和数量两个维度对长连接加以限制
   KeepAlive Off          #短连接  
   KeepAlive on           #生成环境都要开启,下面的信息才会生效

查看httpd 程序的模块列表
          查看静态编译的模块:#httpd -l
          查看静态编译及动态编译的模块:#httpd -M
更换使用的Httpd 程序以支持其他MPM 机制,修改  /etc/sysconfig/httpd
注意:对Linux 而言,线程是跟进程一样的量级,
      多线程模型所能带来的性能的提升是有效的。Worker 和prefork 的性能并没有
      太大的改变。 所以基本没必要更改。

条件式配置,prefork 和worker 分别对应不同的配置区段
Prefork 模式
    <IfModule prefork.c>
           StartServers 8          #服务器进程启动时候启动多少空闲进程
           MinSpareServers 5       #最少空闲进程数,如果少于5 ,主控进程
                                      再启动几个达到5
           MaxSpareServers 20      #最大空闲进程数,如果大于20 主控进程对
                                      子进程进行回收
           ServerLimit  256        #所允许启动的最大在线进程数量
           MaxClients   256        #最大允许启动进程数量响应用户请求(最
                                      大并发响应数)
           MaxRequestsPerChild 4000 # 每个进程最多可以处理多少个请求,
                                       超过4000 销毁
     </IfModule>
worker 模式
  <IfModule worker.c>
    StartServers 4       #服务器进程启动时候启动多少空闲进程
    MaxClients 300       #最大并发响应数300
    MinSpareThreads 25   #最小空闲线程数25
    MaxSpareThreads 75   #最大空闲线程数75
    ThreadsPerChild 25   #每个进程启动25个线程
    MaxRequestsPerChild 0   #每个进程可以处理无限个请求
  </IfModule>

PV page view 页面访问量 只能大概得出每天的QPS
UV user page 用户访问量
PV UV 运营人员比较关注的数据
      QPS: 每秒的请求数  (统计峰值QPS)
      QPM: 每分钟的请求数
           一天的PV 一百万,实际的QPS只有12,需要除以86400
      峰值的QPS 峰值的QPM 才是我们需要关注的

经验值:
   QPS  硬件资源不成为瓶颈的前提下: 
   C++ 的应用迸发值一般在1500左右
   JAVA (tomcat)的应用在 1000–1200
   PHP 800–900

MPM(多路处理模块机制):
        多路处理模块机制MPM(Multipath processing Modules)
    Prefork :多进程模型,每个进程响应一个请求,一个主进程,多个子进程
    Worker  :多进程多线程模型,每个线程响应一个请求,MN
     Event  :事件驱动模型,一个进程响应多个请求

apache 2.2 中MPM不支持动态装卸载,直接放在模块里面
     httpd -l         #使用此命令可以看出改模式在模块里面,
        core.c
          prefork.c
          http_core.c
          mod_so.c      
       httpd -M  | grep prefork
  注意:   如果想自己编译一个Apache 2.2 那么你编译成什么模式,它就是什么模式
            如果想改模式 只能重新编译

使用yum安装的时候centos官方想了一个办法同时提供了三个二进制可执行文件:
[root@CentOS68 www]# ll /usr/sbin/httpd

-rwxr-xr-x. 1 root root 356320 May 12  2016 /usr/sbin/httpd
-rwxr-xr-x. 1 root root 369480 May 12  2016 /usr/sbin/httpd.event
-rwxr-xr-x. 1 root root 368136 May 12  2016 /usr/sbin/httpd.worker
如果你想切换模式,可以直接修改/etc/sysconfig/httpd

LoadModule     authn_default_module          modules/mod_authn_default.so
   DSO指令         模块名                 模块的存放的相对路径(/etc/httpd)

ServerName www.magedu.com:80
     定义网站(中心主机)域名
          1 需要借助DNS 将域名解析(A记录)指定到服务器对应的IP
          2 或者直接使用hosts文件
               vim  /etc/hosts
               172.18.100.67 www.mageu.com
对于windows来说是在
    C:\Windows\System32\drivers\etc\hosts

可基于两种机制指明对哪些资源进行何种访问控制
      对目录或者是文件进行访问控制 不建议使用正则表达式
      <Directory “/var/html/www”>
       ……
      </Directory> // 对目录下所有资源实现访问控制
       File “ ”>
       ….
      </File> //

Options Indexes FollowSymLinks
        如果访问一个站点 首页不存在且有Indexes选项 则:
        要么直接返回资源不存在
        要么将当前的目录里面的内容全部给列出来,供自己选择 indexs
     如果你的网站是在公网上 访问者将看到网站的所有内容,很危险
     如果用作内容共享,供访问者访问目录下的资源,可以将此选项打开。
FollowSymLinks 是否允许访问软连接所指向的真实文件,有的话表示允许

   Includes             // 允许启用服务端包含
   SymLinksifOwnerMatch // 源文件和链接的目标文件的属主属组相
                           同的时候才允许跟踪访问
   ExecCGI              // 允许执行CGI 脚本
   None                 // 全部都不
   ALL                  // 全部都

AccessFileName .htaccess
       针对每个网站子目录定义一个配置文件,    #不建议使用,会耗费资源

基于源地址定义访问规则:
Order allow,deny         # 定义允许或者禁止
Allow from 172.16        # 仅允许172.16的网段访问
Deny  from  172.18.0.1   # 不允许此网络访问

DirectoryIndex index.html index.html.var index.php
定义默认的访问主页

路径别名
www.magedu.com/bbs/a.jpg  ——-网页根目录(/var/www/html) bbs/a.jpg
如果定义一个路径别名的时候
www.magedu.com/bbs/a.jpg  /data/www/a.jpg

定义一个别名:  
exam:  Alias /download/  “/data/www/”       #定义download  指向/data/www/
        mkdir download
           cd download/
           echo “/var/www/html/download” >> a.html
           vim /etc/httpd/conf/httpd.conf 
                更改: Alias /download/  “/data/www/”
           cd /data/www/
           ls
           echo “/data/www/” >> a.html      #方便查看这样写
           service httpd restart

AddDefaultCharset UTF-8
生产环境一定要保证字符集为UTF-8

error_log 放的是Apache本身出错的信息         # 是本身的错误,而不是用户出错信息
acces_log 记录访问信息 每条访问会生产一条日志信息

ErrorLog logs/error_log 定义错误日志的存放路径已经名称

日志级别:
      debug,   所有信息,只要产生就全部记录下来  日志量最大的,便于生产调试
      info,    所有的信息数据
      notice,  引起注意
      warn,    警告        只记录警告信息      #一般选择中间值,
      error,   发生错误
      crit,    级别很严重
      alert,   红色警戒
      emerg.   引起恐慌    日志量最小

一天某个日志量200G-300G
删日志的时候 占用大量的CPU资源
      echo “” > 
      > log
      cp /dev/null log
   禁止使用rm,使用上面三种
 
CustomLog logs/access_log   common
 定义访问日志             日志格式

自定义日志格式 运维规范化中日志规范
日志的作用:
       1 error
       2 统计QPS QPM
统计访问前10的IP:
cat /var/log/httpd/access_log |awk ‘{print $1}’ |sort | uniq -c | sort -nr | head
ELK 对日志做聚合分析

常见的用户认证方式
   basic    : 明文认证
   表单认证 : digest
Basic 认证配置步骤
     定义安全域
      <Directory “”>
          Options None
          AllowOverride None
          AuthType Basic               #基本basic认证
          AuthName “String”            #提示信息
          AuthUserFile “/PATH/TO/HTTPD_USER_PASSWD_FILE”   #密码文件路径
        # AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE” # 基于组来认证
          Require user username1 username2…
        # Require group grpname1 grpname2 …
       </Directory >
 账号和密码存储(文本文件)
    新建密码文件
           htpasswd -c -m /etc/httpd/conf/.htpasswd tom
     注意   -c 第一次创建密码文件的时候使用,后面创建不需要,否则会覆盖
                    -m MD5 认证

Httpd虚拟主机的使用:  
      通常情况下 ,一个服务器上只能跑一个网站,或者说一个进程只能跑
      一个网站。虚拟主机实现了一台机器上或者一个Web 服务上为多个网站提供服务。
  站点标示:Socket
         IP 相同,端口不同,易于实现,不实用
         IP 不同,端口均为默认端口,不实用,需要多个IP ,成本很高
         IP 相同,端口相同,FQDN 不同,在请求报文首部实现
  虚拟主机的实现方式
         基于IP 为每个虚拟主机至少准备一个IP 地址
         基于port 为每个虚拟主机至少一个独立的port
         基于FQDN 每个虚拟主机至少一个FQDN
      注意:虚拟主机和中心主机不能同时使用,直接注释掉中心主机

基于端口
Listen 8080                      #基于端口,需要监听,在这方便些
<VirtualHost 172.18.100.67:80>   #如果基于IP, 需要多个网卡,端口不变
    ServerAdmin ma@mageud.com
    DocumentRoot /data/www1
    ServerName www.a.com
    ErrorLog logs/a-error_log
    CustomLog logs/a-access_log common
</VirtualHost>

<VirtualHost 172.18.100.67:8080>
    ServerAdmin ma@mageud.com
    DocumentRoot /data/www2
    ServerName www.b.com
    ErrorLog logs/b-error_log
    CustomLog logs/b-access_log common
</VirtualHost>

新建子配置文件:               #基于域名FQDN的虚拟主机
NameVirtualHost 172.18.100.67:80          #一定需要此选项
<VirtualHost 172.18.100.67:80>
    ServerAdmin ma@mageud.com
    DocumentRoot /data/www1
    ServerName www.a.com
    ErrorLog logs/a-error_log
    CustomLog logs/a-access_log common
</VirtualHost>

<VirtualHost 172.18.100.67:80>
    ServerAdmin ma@mageud.com
    DocumentRoot /data/www2
    ServerName www.b.com
    ErrorLog logs/b-error_log
    CustomLog logs/b-access_log common
</VirtualHost>
    验证:
          /etc/hosts添加
              172.18.100.67 www.a.com
              172.18.100.67 www.b.com
[root@CentOS68 conf.d]# curl www.a.com
www1
[root@CentOS68 conf.d]# curl www.b.com
www2

curl
    -i 返回网站信息的同时返回头信息(GET)
    -I 只返回请求的头信息 (HEAD)
    -o 将请求结果写到某个文件里面
    -s 静默输出
    -k 不使用证书
    -m 5 最大传输时间5秒

Httpd 状态页面开启
      /etc/httpd/conf/httpd.conf 开启status 模块
    启动状态访问页面
        <Location /server-status>
             SetHandler server-status
             Order deny,allow
             Allow from all 修改访问权限    #默认是deny
             Allow from .example.com
        </Location>
    然后访问域名:如:192.168.235.135/server-status

curl -I URL(不支持HEAD)     #很多网站不支持此方式,默认不安全
    405 method not allowed

curl  -i -s http://www.baidu.com | grep “HTTP” | cut -d” ” -f2
200                           #抓状态码200
                               通常用来判断一个网站是否可以正常访问

elinks www.a.com | grep “www”       
            #纯文本界面的www,如果出现乱码,需要调字符集UTF-8
            #用来判断一个网站是否正常
      #状态监控和健康检查

使用mod_deflate 模块压缩页面优化传输,生产模式默认没有定义,需要再主配置文件尾部
手动添加,只需要三步就KO了
        1.设置一个输出过滤器
        2.根据内容类型执行过滤
        3.指定压缩级别
        4.有时需要排除压缩文件

HTTP——-全站HTTPS 

magedu.com 这个域的证书和key

如果只需要用户通过某端口访问:
   1 跳转 用户通过80访问,然后网站重定向到443端口
          www.magedu.com 自动跳转 重定向
          https://www.magedu.com
          Apache写rewrite 

   2 HSTS协议(了解一下) 直接在浏览器里跳转
         访问www.magedu.com 的时候浏览器直接帮你改成https://www.magedu.com
学习Nginx的时候 在Nginx写rewrtie跳转

压力测试:全链路压测
Jmeter, Loadrunner等图形界面工具
网易tcpcopy             #建议使用此工具

Httpd2.4在6上编译安装:
  1.安装apr-1.4和apr-util-1.4以上版本, 可移植的系统库,来编译安装
  2.编译安装以上版本,安装apr-1.4只需要指定安装目录即可
  3.编译安装apr-util-1.4以上版本,需要增加 –with-apr=(apr的安装目录)
  4.然后就可以痛快的安装httpd2.4了,可能需要开启指定的功能

   1  2.4 新建虚拟主机 以及中心主机需要对网页目录进行显示授权
           Require all granted                 #每个虚拟主机需要添加显示授权
   2  2.4上新建基于域名的虚拟主机的时候不需要指定
           NameVirtualHost 172.18.100.67:80    #可以不需要指定这些
   3 持久连接支持毫秒级别  
           KeepAlive On                        #默认没有,需要手动在结尾添加
           KeepAliveTimeout 30ms
           MaxKeepAliveRequests 20

cookie   客户端标识用户的身份
session  服务器端标识用户的身份
session共享 
     1 保存共享存储 NFS 共享文件系统
     2 保存到数据库中 MySQL中 
     3 保存到cookie中
     4 保存到内存数据库中(memcached redis)  目前流行的

原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/73794

(0)
sheweishewei
上一篇 2017-04-20
下一篇 2017-04-20

相关推荐

  • 搜索引擎-倒排索引基础知识

    1.单词——文档矩阵        单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。          …

    Linux干货 2015-12-10
  • 优云实践:巧用Salt,实现CMDB配置自动发现

    随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)IT时代,信息化环境越来越复杂,既有IOE三层架构,也有VCE、Openstack等云虚拟化架构和互联网化的分布式大数据架构。所以,企业急需建立一套合适的配置管理库(CMDB),像人类“大脑”一样统一存储从基础架构到业务应用各层面的配置信息,以便协调“身体”(运维系统)各部分完成复杂的运维工作。 C…

    系统运维 2016-07-26
  • shell脚本终结篇——数组

    数组定义: 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引: 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅仅是数值格式,自定义格式的数组即为关联数组,bash4.0版本之后开始支持 bash的数组支持稀疏格式(索引不连续) 声明数组: declare -a ARRAY_NAM…

    Linux干货 2016-08-24
  • 关于取路径名与基名的探讨和扩展-20160806

                          关于取路径名与基名的探讨和扩展     这两天学习grep  ,   egrep  ,  sed  &nb…

    Linux干货 2016-08-07
  • N24_小天 学习宣言

    每周安排时间看视频,每天安排时间学习并跟进课程,认真记笔记,认真写博客。多动手操作,坚持不断。学习思维,提升自己解决问题的思路。多动手,多实践。

    Linux干货 2016-10-27
  • 【招聘福利】三生石/郑州/6-10K

    三生石科技 岗位职责: 1、熟悉Linux系统环境/内核参数/系统调用接口等,对系统、网络和应用的原理等有较深刻的理解; 2、熟悉Linux操作系统的管理部署、配置和调优; 3、熟悉服务器架构部署、负载均衡、CDN等; 4、了解mysql数据库的基本管理技能,有Apache/Tomcat/MySQL等服务的优化配置经验; 5、了解常用系统自动化监控软件的使用…

    Linux干货 2015-11-10