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)
上一篇 2017-04-20 12:27
下一篇 2017-04-20 18:54

相关推荐

  • 第一周作业

    一:计算机的组成和功能 主要分为五个部分:控制器、运算器、存储器、输入、输出 CPU :包含控制器和运算器、寄存器、缓存 存储器:内存,RAM(Random Access Memory) 输入:下指令,提供数据等 输出:输出数据加工的结果     微型计算机系统组成:      …

    Linux干货 2016-12-06
  • LNMP (nginx+php-fpm)

    Nginx简明: 特性: 采用模块化设计,较好的扩展性;高可靠性  master/worker支持热部署:不停机更新配置文件、更换日志文件、列新服务器版本低内存消耗:10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存;event-dreiven,aio,mmap基本功能;静态资源的web服务器http协议反向代理服务器;pop3/ima…

    2017-06-28
  • 终端的类型

    Linux下的终端是一个连接系统的接口,它有以下几个分类     tty:虚拟终端       tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。   &nbsp…

    Linux干货 2016-10-20
  • Linux哲学思想和常用命令的用法

    Linux哲学思想:    (1)、一切皆文件:               不仅普通的文件,目录、字符设备、块设备、套接字等在Unix、Linux中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套…

    2017-07-02
  • 用户管理、组管理、权限管理、文本处理工具应用示例

    用户管理、组管理、权限管理、文本处理工具应用示例 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 [root@localhost ~]# cp -a /etc/skel/ /home/tuser1/ [root@localhost ~]# chmod -R go= /hom…

    Linux干货 2017-07-23
  • 20160802课堂练习题

    练习: 1、  当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 无法cd进入该目录,但可以ls查看到该目录下的文件,其余的任何操作都执行不了。 2、  当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作? 能够进入该目录,不能读取到信息;但如果知道有哪些文件及目录是可以创建…

    Linux干货 2016-08-04