3、Web server 之httpd2.2 配置说明

http协议实现的程序

静态(httpd, nginx, lighttpd)

动态 (IIS, tomcat,  jetty,  jboss,  resin,  websphere, weblogic, oc4j)

客户端工具 (telnet, elinks, curl)  纯文本协议访问工具

HTTPD配置(端口、别名、访问控制、MPM、keep-alive、dso、DocumentRoot、DirectoryIndex、默认字符集、虚拟主机、mod_deflate模块、HTTPS配置)

HTTPD工具(htpasswd, apxs, rotatelogs, suexec),HTTPD压力测试(ab, webbench, http_load, jmeter, loadrunner, tcpcopy)

 

ASF: Apache Software Foundation  Apache 软件基金会

FSF: Free Software Foundaton    自由软件基金会

ASF赖以起家的是: httpd<命名:apache>

 


 

HTTP安装

httpd(2)    

   CentOS 6 默认提供rpm包 2.2版本

   CentOS 7 默认提供rpm包 2.4版本 (默认未安装)

 

CentOS 6  httpd程序环境(rpm安装)

/etc/httpd                   //ServerRoot  服务器根目录                        
/etc/httpd/conf.d               //配置片段目录
/etc/httpd/conf/httpd.conf           //主配置
/etc/httpd/logs                //日志目录
/etc/httpd/modules              //模块目录
/etc/httpd/run                //运行中的进程的数据
/etc/rc.d/init.d/httpd            //服务脚本
/etc/sysconfig/httpd              //服务脚本配置

/usr/lib/httpd/modules
/usr/lib/httpd/modules/mod_actions.so     //DSO机制,动态共享对象
/usr/sbin/apachectl               //apachectl程序

主程序文件:
/usr/sbin/httpd //MPM为IO,串行响应的进程 /usr/sbin/httpd.event //MPM为复用I/O模型,并行响应的进程 <2.2的httpd,event不成熟> /usr/sbin/httpd.worker //MPM............................. //ps axu | fgrep httpd可查看 /usr/share/doc/httpd-2.2.15 //<DOCUMENTATION> /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README /usr/share/doc/httpd-2.2.15/VERSIONING /usr/share/man/man8/apachectl.8.gz //<MAN Document> /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/httpd.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/suexec.8.gz /var/cache/mod_proxy //<缓存目录> /var/lib/dav //<程序运行中的数据> /var/log/httpd //《日志目录》     access_log:访问日志
    errot_log: 错误日志
/var/run/httpd //《运行中的httpd进程的数据》 /var/www/error/ //错误页面html网页存放目录

站点文档目录 /var/www/html //DocuRoot目录,资源路径的根映射的位置

httpd配置文件

/etc/httpd/conf/httpd.conf 

//首次配置需要备份文件:
# cp -v /etc/httpd/conf/httpd.conf{,.bak}

配置文件的组成:

# fgrep 'Section' /etc/httpd/conf/httpd.conf  
### Section 1: Global Environment       //全局环境:定义httpd通用功能特性
### Section 2: 'Main' server configuration //主配置段:一个服务器提供单个站点
### Section 3: Virtual Hosts         //虚拟主机:一个服务器提供多个站点
注: 2和3不能同时使用

 

配置格式:directive value

  directive :不区分字符大小写

  value:为路径时,取决于文件系统

 


 


 

 三、HTTPD配置及应用

3.1、修改监听的IP和Port

    Listen [IP:] PORT  :

注:Listen 端口  ----- 省略IP 表示监听于所有网卡的IP

  Listen指令,可以使用多次,用于监听不同地址的不同端口之上

e.g

  Listen 192.168.1.105:8080    //监听在改IP的8080端口之上,能与此IP通信的主机才能访问此进程

  Listen 80           //监听在所有接口的IP之上 

 注:修改端口后一定要重启, service httpd reload

 

3.2、持久连接

a)Persistent Connection :连接建立,每个资源获取完成后,不会断开连接,而是继续等待其它的请求完成

  一个pv(自引用多个链接指向)多个资源,每个资源都需要一个请求

  非持久连接:请求pv时,每个资源请求时,都需要建立tcp连接。<1.0默认>

  持久连接:请求pv时,首个资源需要建立tcp连接,不断开情况下,继续完成后续请求

b)如何断开?

    • 限制:到达一定时间[def:75s]后,tcp连接自动断开。httpd-2.4支持毫秒级别
    • 数量限制:资源获取数量[def:100个]到达一定值时,tcp连接自动断开

c)副作用:并发访问量过大场景,时间或数量限制过大时,可能会导致后续的请求被[拒绝服务],可以关闭或调整时间或数量限制

  折中:使用较短的持久连接时间

 

e)<默认配置:关闭持久连接功能

 

 

 

 f)测试连接的关闭,显示结果

  非持久连接测试结果显示:

 

 

   持久连接测试结果显示:

 

 

 



 3.3 、MPM 多路处理模块---并发响应模块

注: httpd-2.2 不支持同时编译多个模块,所以只能编译时确定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持

  确认方法: ps aux | grep httpd  查看相应文件

默认为/usr/sbin/httpd ,其使用prefork

1)查看当前使用的模块

wKiom1nIicPRum2HAAALYNPY1xs955.png

2)查看装载的模块

wKiom1nIigSSqJvAAAAveprtBf0459.png

3)更换MPM模块----/etc/sysconfig/httpd

wKioL1nIioaSF5NjAAApu3Z_RWw034.png

更改为worker
# awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd 
#HTTPD=/usr/sbin/httpd.worker
HTTPD=/usr/sbin/httpd.worker
#OPTIONS=
#HTTPD_LANG=C
#PIDFILE=/var/run/httpd/httpd.pid

# service httpd restart
# ps axu | fgrep httpd
root     20183  0.0  1.4  11716  3560 ?        Ss   22:02   0:00 /usr/sbin/httpd.worker
apache   20298  0.0  1.2 289448  3000 ?        Sl   22:02   0:00 /usr/sbin/httpd.worker

更改为event
# awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd 
#HTTPD=/usr/sbin/httpd.worker
HTTPD=/usr/sbin/httpd.event
#OPTIONS=
#HTTPD_LANG=C
#PIDFILE=/var/run/httpd/httpd.pid

# service httpd restart
# ps axu | fgrep httpd
root     20360  0.6  1.4  12184  3556 ?        Ss   22:04   0:00 /usr/sbin/httpd.event
apache   20363  0.0  1.1 289916  2916 ?        Sl   22:04   0:00 /usr/sbin/httpd.event
apache   20364  0.0  1.1 289916  2904 ?        Sl   22:04   0:00 /usr/sbin/httpd.event
apache   20365  0.0  1.1 289916  2904 ?        Sl   22:04   0:00 /usr/sbin/httpd.event

 

MPM配置详解 /etc/httpd/conf/httpd.conf <网站的承载能力有一定影响>

# prefork MPM
# StartServers: 启动服务器后,预留的进程数
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: 服务器的生命周期内为MaxClients准备的最大值
# MaxClients:  最大并发数
# MaxRequestsPerChild: 每个进程最大响应请求数
<IfModule prefork.c>
StartServers       8  #服务启动时服务进程数
MinSpareServers    5   #最小空闲进程数
MaxSpareServers   20  #最大空闲进程数
ServerLimit      256  #服务器进程数量最大值
MaxClients       256  #最大并发请求数
MaxRequestsPerChild  4000   #一个服务器进程最多能够响应多少次的请求
</IfModule>

# worker MPM
# StartServers:  启动服务预留进程数
# MaxClients:    最大并发数
# MinSpareThreads: 最小并发数
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: 每个进程内的线程数
# MaxRequestsPerChild: 每个线程最多响应请求数
<IfModule worker.c>
StartServers         4   #不包含主控进程
MaxClients         300 
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25  #每个进程所能够启动的线程数
MaxRequestsPerChild  0 //0表示没有上限
</IfModule>

配置:影响网站的承载能力

PV承载量= \(每秒请求资源数 * 86400 \)/每个页面的资源数    //满载工作

考虑:全天满负荷运行?带宽使用大小200k?

  300*86400/50=40W  

带宽:每个PV消耗多少KB * PV承载量

 

PV :Page View 页面计数

UV:User View 用户数量计数(独立IP数量)

 

3.4、DSO

配置指令实现模块加载

  使用语法:LoadModule  <模块名> <模块路径>

  模块路径可使用相对地址:相对于serverroot [/etc/httpd]  (CentOS 6)

    /etc/httpd/modules ----->/usr/lib64/httpd/modules

重载配置文件,实现启动或禁用模块

查看此模块已经被装载
# httpd -M | fgrep deflate_module
deflate_module (shared)

禁用 (配置文件注释)
# vim /etc/httpd/conf/httpd.conf
#LoadModule deflate_module modules/mod_deflate.so

重载 
# service httpd reload

查看 
# httpd -M | fgrep deflate_module
Syntax OK

 

3.5、定义"Main"  server 的文档页面路径 

注:先关掉selinux再测试-----setenforce 0

文档路径映射:

  DocumentRoot 指向的路径为URL路径的起始位置:

  DocumentRoot  "/var/www/html"
      /var/www/html/index.html  -----> http://www.magedu.com/test/index.html
  注:
    #setenforing 0
    #iptables -F
    2.2版本修改DocumentRoot,不需要授权
    2.4版本修改DocumentRoot 需要对文件系统目录授权

注意:

① 可以写多行,但是下边的会覆盖上边的,最后还是使用下边的,写到子配置文件一样,因为子配置文件Include conf.d/*.conf在这行设置的上边,会被这行设置覆盖。

② 若设置的主站点不存在,那么服务会启动失败!

 

3.6、站点访问控制

a)可基于两种类型的路径指明对那些资源进行访问控制

  文件系统路径:      

    DocumentRoot "/var/www/html"

    <Directory "">...</Directory>

    <Files "">...</File>

e.g
<Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>

  URL路径:

     <Location "">...</Location>     

b)访问控制机制:

  基于来源地址:Order , allow from 地址,deny from 地址

  基于用户账号控制 :LogFormat :%u

  

c)基于用户访问控制的实现

  安全域:需要用户认证后方能访问的路径 

      应该通过名称对其进行标识,并用于告知用户认证的原因

  用户的账号和密码存储与何处

     虚拟账号:仅用于访问某服务时用到的认证标识(跟操作系统里面的账号没有任何关系)

  定义在/etc/httpd/conf/httpd.conf文件中

wKioL1nHdruh4nagAAAtf6v6xVg314.png

认证质询:

  WWW-Authenticate :响应码为401 ,拒绝客户端请求,并说明要求客户提供账号和密码

认证:

  Authorization :客户端用户填入账号和密码后再次发送请求报文;认证通过,则服务器发送响应的资源

  认证类型:

      basic :明文,放入https中进行【通用:浏览器大多数较老,不支持digest认证】//弹窗认证

      digest :消息摘要  发送账号及密码对应的md5码至服务器,服务器将md5码与存储的对应的md5码对比

  表单认证-----登录淘宝时输入的账号密码类型

密码存储位置:文件、数据库、ldap、nis、认证系统

  •  ) 基于basic认证实现(了解)
    •     定义安全域
<Directory "">
  Options None                      #访问目录中的文件特性
  AllowOverride None                   
  AuthType Basic                     #认证类型
  AuthName "STRING"                   #安全域
  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"  #密码储存位置
  Require user <username1> <username2> ...        #可登录的用户
 # Require group GROUP1 GROUP2 ...     #基于组来认证是需要此步骤
</Directory>
允许账号文件中的所有用户登录访问:
  Require valid-user
  •   提供账号和密码存储(文本文件)

  使用htpasswd命令进行管理
    htpasswd [options] passwordfile  username

    • -c: 自动创建passwordfile,因此,仅应该在添加第一个用户时使用;
    • -m: md5加密用户密码;
    • -s: sha1加密用户密码;
    • -D: 删除指定用户

e.g

# echo "hello" > /www/htdocs/admin/index.html

<Directory "/www/htdocs/admin">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "Administrator private"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    Require valid-user
</Directory>
 
# httpd -t
# service httpd reload
# htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom  #第一次创建用户需-c
# htpasswd  -m /etc/httpd/conf.d/.htpasswd obama
# htpasswd  -m /etc/httpd/conf.d/.htpasswd obama

基于组进行认证实现

vim  /etc/httpd/conf.d/.htgroup  创建组文件并建立组名
  weblogic :tom obama
<Directory "/www/htdocs/admin">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "Administrator private"
    AuthUserFile "/etc/httpd/conf.d/.htpasswd"
    AuthGroupFile "/etc/httpd/conf.d/.htgroup"
    Require group weblogic
</Directory>
  要提供:用户账号文件和组文件;    
    组文件:每一行定义一个组     
     GRP_NAME:user1 user2 user3 ...

 

 

3.7、默认主页面

DirectoryIndex index.html index.html.var

自左向右,依次匹配给出目录下的文件,存在时,显示

 

3.8、 Directory 中“基于来源地址”实现控制”

<Directory "/var/www/html">

  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all

</Directory>

a)Options 选项

    所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

  常用选项:None, ALL

  Indexes  : 索引 ----- 允许索引  没有默认主页面时,显示欢迎界面【注:docroot与directory 修改路径要相同】

  FollowSymLinks :索引的文件是symolic link 时,允许跟踪符合链接文件

  SymLinksifOwnerMatch :属主匹配-----符号链接文件的属主与原文件属主为同一个用户时,才允许跟踪

   MultiViews  :是否允许多视图 内容协商:启动后性能差

   ExecCGI  :是否允许CGI接口

b)AllowOverride ---是否允许覆盖选项   (了解)

  选项值:FileInfo  AuthConfig  Limit  None  ALL 

  是否允许当前的配置去覆盖每一个网站页面下的一个隐藏文件(./htaccess )

  ./htaccess   每个目录访问控制:灵活 但对性能影响非常大不启用

c)基于来源地址的访问控制机制

Order :检查次序  写在后面的位默认法则   
   Order allow,deny (白名单)    Order deny ,allow(黑名单)
  
    Allow from
    deny from
      后接 来源IP地址
         NetAddr :表示172.16网络的方式
         通配符:*.magedu.com

修改配置文件如下信息及其显示结果:

 

 

 wKioL1nIlAPzwaFfAABUTJ7yPvk292.png-wh_50

3.9 日志设置

官网地址:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html

http://httpd.apache.org/docs/2.2/logs.html

a)错误日志

 

日志为链接路径:/etc/httpd/logs ----->/var/log/httpd/

 

b)访问日志

  CustomLog logs/access_log         combined    

 日志文件路径<相对于ServerRoot>    日志格式名<logformat>

LogFormat格式

  •  combined 格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined   #组合格式包含下面是三个格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
  •  combinedio
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio  
记录日志时候,会根据这一次用户的请求 把这些宏替换成对应的相关信息
e.g
192.168.1.105 - tom [18/Sep/2017:02:59:24 +0800] "GET /admin/ HTTP/1.1" 304 11 "-" "Mozilla/5.0
%h remote host      客户端IP地址
%l remote logname   登录的用户名,mod_ident模块为空时,用 “_” 表示
%u remote user     用户访问控制的basic,digst认证的用户名为空时,用 “_” 表示
%t Time the request was received   服务器收到请求的时间
%r First line of request        请求报文的首行  
%>s  Status                响应状态码
%b :响应报文的大小,单位是字节,不包括响应报文首部
%{Referer}i :请求报文当中“referer”首部的值;当前页面(资源)的访问入口,即从哪个页面的超链接跳转而来
   “ _ ”  网站有名--直接从浏览器键入的,而不是从网页超链接跳转过去的
   “不为空时,网站的广告有效”  
%{User-Agent}i :请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序
   用户代理:发起请求的用到的进程<elink,ab,telnet,浏览器, curl>搜索引擎是爬虫爬出来的

 

10、路径别名 

Alias  /URL/  "/PATH/TO/SOMEDIR/"

  注:URL后面存在“/” 时,路径后必须存在“/”

    /URL/被匹配是从资源路径的根起始的

E.g

  • DocumentRoot "/www/htdocs"

    http://www.magedu.com/download/bash-4.4.2-3.el6.x84_64.rpm

       --->/www/htdocs/download/bash-4.4.2-3.el6.x84_64.rpm

  • Alias /bbs/  "/forum/htdocs/"

    http://www.magedu.com/bbs/index.html ---> /forum/htdocs/index.html

 

    例如:/www/forum    此处DocumentRoot为/www/forum
        文件系统路径:/www/forum/bbs/upload/a.rar
        则URL路径为:http://Server_IP/bbs/upload/a.rar

    # mkdir -p /www/forum
    # echo "This is a new site location" > /www/forum/index.html
    # vi /etc/httpd/conf/httpd.conf    ###修改为 /www/forum
    # service httpd reload
    # curl http://192.168.21.10
    This is a new site location

 11、字符集设定 (了解)

   AddDefaultCharset UTF-8

   全球:UTF-8

  国标:GBK,GB2312 ,GB18030 <中文>

   源文件中的编码应该与服务器的编码相同

 


 四、虚拟主机

虚拟主机的类型

  •   基于IP :一个服务器有多个IP    (实践中很少使用)
  •   基于PORT :同一个IP,有多个PORT  (实践中很少使用)
  •   基于主机名hostname :同一个IP,有多个Host

 

基于名称完成不同虚拟主机的识别

封装时: HTTP首部、TCP首部、IP首部、帧首部..

    Host: 浏览器键入的主机名 //"应用层首部"中附加,非通信子网

wKioL1nHkI7Qpg26AAA-43oHWTE933.png

 注:一般虚拟主机不可与中心主机混用,所以要使用虚拟主机,需先禁用中心主机

4.1、配置前提  

   httpd2.2版本 注释中心主机DocumentRoot ,并启动 ServerName :NameVirtualHost *:80
   httpd2.4版本 注释中心主机DocumentRoot

 

4.2、每个虚拟主机都有专用配置格式

wKiom1nHkVzgBUthAAAwP9tuwwM958.png

 

实例1  基于IP地址

 

a) 在配置文件的最后写入一下字段:
<VirtualHost 192.168.1.105:80> ServerName web1.douma.com DocumentRoot "/data/web1" </VirtualHost> <VirtualHost 192.168.1.25:80> ServerName web2.douma.com DocumentRoot "/data/web2" </VirtualHost>

b) 然后创建对应位置:
mkdir -pv /data/web{1,2}
echo "web1 > /data/web1/index.html"
echo "web2 > /data/web2/index.html"
c) 添加一块网卡:
    ip addr add 192.168.1.25/24 dev eth0
  显示添加网卡:ip addr list

实例:基于port实现 

a) 配置文件的最后写入一下字段:
 <VirtualHost 192.168.1.105:8080>
                                ServerName web3.douma.com
                                DocumentRoot "/data/web3"
 </VirtualHost>
 <VirtualHost 192.168.1.105>
                                ServerName web4.douma.com
                                DocumentRoot "/data/web4"
 </VirtualHost>
mkdir -pv /data/web{3,4}
echo "web3 > /data/web3/index.html"
echo "web4 > /data/web4/index.html"

b) 开启监听8080端口
  Listen :8080

实例3、基于Hostname实现

a) 要开启NameVirtualHost:80 项
  修改配置文件
  NameVirtualHost 192.168.1.105:80
注:选中部分要求一致
<VirtualHost 192.168.1.105:80>
    ServerName web3.douma.com
    DocumentRoot "/data/web3"
</VirtualHost>

<VirtualHost 192.168.1.105:80>
    ServerName web4.douma.com
    DocumentRoot "/data/web4"
</VirtualHost>
c) 编辑/etc/hosts文件 添加如下内容
  192.168.1.105
web3.douma.com
  192.168.1.105  web4.douma.com

d)测试 curl http://
web3.douma.com

 

 内置的status页面

  web的子功能

访问结果显示如下:

开启扩展信息:

  

再互联网上访问上述信息:需基于账号实现访问控制 

 

 

CentOS 7

默认运行级别

  [root@localhost ~]# systemctl get-default
multi-user.target

修改运行级别

   [root@localhost ~]# systemctl set-default

 

 https://blog.51cto.com/sonlich/1968229

 https://blog.51cto.com/11010461/2109162

https://www.cnblogs.com/dannylinux/articles/7999156.html

https://www.aliyun.com/1111/2019/group-buying-share?ptCode=BD1104468FD85A9BBC32DA64D3419891647C88CF896EF535&userCode=sllkyfo6&share_source=copy_link 

posted @ 2019-10-31 21:41  幻落之瞳  阅读(545)  评论(0编辑  收藏  举报