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

相关推荐

  • 条件判断if、case与文件查找locate、find及相关练习

    一、条件选择 1、if:按条件执行脚本中的内容,可以使用嵌套结构,有单分支、双分支和多分支结构,每个条件中可以有不止一条语句,如果有多条语句,可以用and(-a)或or(-o)连接在一起,但不能使用&&或||: if COMMANDS; then     COMMANDS;   &n…

    Linux干货 2016-08-18
  • 初识Linux

    本文对计算机组成及其功能、Linux的发行版、以及Linux的哲学思想进行了简单的介绍;同时对Linux系统中常用的基础命令以及如何获取帮助信息进行了详细的说明。

    2018-01-14
  • 第7天:磁盘文件管理

    http://note.youdao.com/yws/public/redirect/share?id=57ab13d4749920de1fbb0d4953fcd21b&type=false

    Linux干货 2016-08-18
  • MHA安装包及其依赖包下载

    MySQL MHA是一款在业界广泛部署的MySQL高可用软件。但是在安装时,需要安装较多依赖包,并且有些依赖包在操作系统中默认的yum源是不存在的,因此需要到多个地方去寻找相应的包,费时费力。特别是在某些公司的网络政策,只允许少数机器连接外网,因此部署MHA更是苦不堪言。     为了方便大家也是方便以后我自己的使用,…

    Linux干货 2016-12-05
  • linux终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2013-07-03
  • 私人定制—linux系统

    自制Linux系统: 1、分区并创建文件系统 [root@localhost6 ~]# fdisk  /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ 创建文件系统: [root@localhost6 ~]# mkfs.ext4 /dev/s…

    Linux干货 2016-09-26