httpd2.2配置文件详解(一)


apache



一,apache MPM简介

MPM:

prefork:多进程模型,每个进程响应一个请求

worker:多线程模型,每个线程响应一个请求

event:事件驱动模型,一个线程响应多个请求



并发服务器响应请求

1,单进程I/O模型

2,多进程I/O模型

3,复用的I/O模型

    多线程模型

    事件驱动复用的多进程I/O模型





httpd基本配置和应用



httpd的官网是http.apache.org,目前早已超过系统安装树的版本,为2.2和2.4



二,httpd包介绍

[root@localhost ~]# yum list all httpd

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

 
base: ftp.sjtu.edu.cn

 * extras: ftp.sjtu.edu.cn

 * updates: ftp.sjtu.edu.cn

base                                                                                                    | 3.7 kB     00:00     

extras                                                                                                  | 3.4 kB     00:00     

mariadb                                                                                                 | 2.9 kB     00:00     

mariadb/primary_db                                                                                      |  22 kB     00:01     

updates                                                                                                 | 3.4 kB     00:00     

Installed Packages

httpd.x86_64      #依赖包                                        

httpd-tools.x86_64  #依赖包                                      

Available Packages

httpd-devel.i686                                          

httpd-devel.x86_64  #以上三个和开发相关                                       

httpd-manual.noarch  #在线手册页,                                    

[root@localhost ~]# 





httpd-tools,  压力测试等    

[root@localhost ~]# rpm -ql httpd-tools

/usr/bin/ab           

/usr/bin/htdbm

/usr/bin/htdigest

/usr/bin/htpasswd

/usr/bin/logresolve

/usr/share/doc/httpd-tools-2.2.15

/usr/share/doc/httpd-tools-2.2.15/LICENSE

/usr/share/man/man1/ab.1.gz

/usr/share/man/man1/htdbm.1.gz

/usr/share/man/man1/htdigest.1.gz

/usr/share/man/man1/htpasswd.1.gz

/usr/share/man/man1/logresolve.1.gz

[root@localhost ~]# 





三,程序环境:

rpm安装的httpd,大多数情况下http自己ID运行时,他的工作路径是/etc/httpd/

配置文件:

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

分段配置文件:/etc/httpd/conf.d/*.conf

服务脚本:/etc/rc.d/init.d/httpd

脚本的配置文件:/etc/sysconfig/httpd,#定义httpd进程如何工作

模块链接文件:/etc/httpd/modules  #映射文件。真正的路径是/usr/lib64/httpd/modules

主程序文件:/usr/sbin/httpd #这里提供的是prefork文件

            /usr/sbin/httpd.worker #worker

            /usr/sbin/httpd.event #event

这里要说明的是,httpd在2.2,mpm时是不是支持dso,需要切换不同的文件来进行切换模块,而在2.4,则使用dso动态加载即可。



日志文件目录:/var/log/httpd

  access_log:访问日志文件

  error_log: 错误日志

站点文档目录:/var/www/html



如果已经安装好,则可以使用:server httpd start 启动

在查看下httpd 80端口,使用:ss -tnl   查看







如下所示:

[root@localhost ~]# service httpd start

Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName

                                                           [  OK  ]

[root@localhost ~]# 



当我们第一次启动时候,会报出一个警告,这是因为DNS会反解本机IP对应的主机名是否解析,如果反解除的结果和我们的主机名不一致,但是我们没有DNS,所以他无法确定,使用当前的主机名!这个信息可以安全忽略





/var/log/httpd/error_log中的日志,不一定全是错误信息,有安装信息等,关闭启动信息等等





我们可以在浏览器输入ip地址讲会看到欢迎页面,这个页面是rpm安装的自带的。而这个欢迎页面在/etc/httpd/conf.d/welcome.conf







当成功访问,日志里面将会有记录

[root@localhost html]# tail /var/log/httpd/access_log 

192.168.233.1 - - [30/Oct/2015:06:00:56 -0700] "GET / HTTP/1.1" 403 4961 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"

192.168.233.1 - - [30/Oct/2015:06:00:56 -0700] "GET /icons/apache_pb.gif HTTP/1.1" 200 2326 "http://192.168.233.138/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"

192.168.233.1 - - [30/Oct/2015:06:00:56 -0700] "GET /icons/poweredby.png HTTP/1.1" 200 3956 "http://192.168.233.138/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"

192.168.233.1 - - [30/Oct/2015:06:00:56 -0700] "GET /favicon.ico HTTP/1.1" 404 290 "http://192.168.233.138/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36"

[root@localhost html]# 



四,配置文件:

Directive #指令   

Value  #值

整个配置文件分成三个段

[root@localhost html]# grep "Section" /etc/httpd/conf/httpd.conf

Section 1: Global Environment #全局环境配置,对所有内容生效,虚拟主机         

Section 2: 'Main' server configuration  #主服务器配置,核心配置 

Section 3: Virtual Hosts #虚拟主机配置

[root@localhost html]# 



Main和Virtual是不能同时启用的,要使用Main则需要忽视Virtual,使用Virtual则需要注释Main,也就是说主配置和虚拟主机是不能同时启用





在编辑配置文件之前备份

[root@localhost conf]# cp httpd.conf{,.bak}

1,指定监听端口

Listen 80 ,一般情况下当我们输入IP地址是监听所有可用IP地址的,使用IP:prot

(1),Listen指令可出现多次,用于指明多个不同的套接字,如下所示

Listen 127.0.0.1:80

Listen 127.0.0.1:8080

如果你修改了端口,则需要进行重启操作,service httpd restart,重启后使用IP:8080进行访问



2,持久链接相关

当我们打开一个也没可能会应用数十个甚至上百个其他资源,每一个资源获取,如下:



当我们打开页面是,输入域名

1,DNS解析

2,和IP建立tcp三次握手链接

3,传输资源

4,拆除链接

如下所示:





非持久链接:每个资源都是单独通过专用的链接进行获取

持久链接:链接建立后,每个资源获取结束不会断开链接,而持续等待其他资源请求并完成传输



我们将上图第四段去掉,处于持久链接状态,当有别的请求在进来时,仍然处于等待状态,当时我们需要考虑一个问题,如何断开?何时断开?

1,数量限制:如100,超过则断开

2,时间限制:如60秒,超过则断开

劣势:对并发访问量较大的服务器,开启持久链接会对有些请求得不到服务

改进:减短持久链接时间:httpd-2.4支持毫秒级别



非持久链接对非常繁忙的场景中,他可以对每个排队的请求都能得到请求,尽管他可能浪费了大量带宽





开启持久链接:KeeAlive Off|On



开启断开的限制如下:

最大保活请求资源数:MaxKeepAliveRequests 100 

如果没有达到100个则这条生效:KeepAliveTimeout 15

以上两条那个先到达,则断开





3,MPM

多路处理模块:并发请求响应的不同实现

prefork ,worker,event



httpd-2.2不支持同时编译多个不同的MPM,rpm安装的httpd-2.2提供了三个不同的



那如何确定用的是哪个模块呢

(1),查看httpd

[root@localhost ~]# vim /etc/sysconfig/httpd

下面这项:这项没有启用

#HTTPD=/usr/sbin/httpd.worker



默认为:/usr/sbin/httpd.其为prefork

(2),ps aux |grep httpd





(3),查看最主要的模块

[root@localhost ~]# httpd -l

Compiled in modules:

  core.c

  prefork.c

  http_core.c

  mod_so.c

[root@localhost ~]# 





httpd -l查看静态编译模块

httpd -M可以查看所有模块,包括静态和DSO模块



httpd.worker -l,还有event -l

[root@localhost ~]# httpd.worker -l

Compiled in modules:

  core.c

  worker.c

  http_core.c

  mod_so.c

[root@localhost ~]# 



五,更换支持不同的MPM的主程序

1,编辑/etc/sysconfig/httpd

[root@localhost ~]# vim /etc/sysconfig/httpd

HTTPD=/usr/sbin/httpd.worker

注意,这里可以修改成httpd.worker或者httpd.event,修改后需要重启生效

2,重启

service httpd restart

3.在查看

[root@localhost ~]# ps aux |grep httpd

root       3809  0.0  0.4 184532  4072 ?        Ss   07:20   0:00 /usr/sbin/httpd.worker

apache     3812  0.0  0.5 528792  5392 ?        Sl   07:20   0:00 /usr/sbin/httpd.worker

apache     3813  0.0  0.5 594328  5412 ?        Sl   07:20   0:00 /usr/sbin/httpd.worker

apache     3814  0.0  0.5 594328  5396 ?        Sl   07:20   0:00 /usr/sbin/httpd.worker

root       3925  0.0  0.0 103252   836 pts/0    S+   07:20   0:00 grep httpd

[root@localhost ~]# 





当你更换不同的模块时,调用的配置各不相同

配置文件在:/etc/httpd/conf/httpd.conf



注意:在httpd2.2中event是测试专用的,所以,配置文件重只有prefork和worker两个容器



<IfModule prefork.c>

StartServers       8 #默认服务启动会启动8个空闲进程    

MinSpareServers    5 #最少5个空闲进程  

MaxSpareServers   20 #最大空闲进程数

ServerLimit      256 #最多仅允许多少个进程来响应请求

MaxClients       256 #最大客户端并发请求连接数

MaxRequestsPerChild  4000 #每个子进程最多响应多少个请求

</IfModule>



<IfModule worker.c>

StartServers         4      #默认启动多少个空闲进程

MaxClients         300 #最大并发连接数

MinSpareThreads     25      #最少空闲线程数

MaxSpareThreads     75      #最大空闲线程数

ThreadsPerChild     25      #每个子进程可生产多少个线程

MaxRequestsPerChild  0      #每个进程响应的链接无限制

</IfModule>





当我们第一次启动是会杀掉一个进程







六,DSO机制

httpd是高速模块化的,配置指令模块加载如下:



在/etc/httpd/conf/httpd.conf中有很多LoadModuls,这些模块是存放在/etc/httpd/modules中,而/etc/httpd/modules是链接至/usr/lib64/httpd/modules/下,这些模块如果不想用只需要注释,添加模块只需要添加进去即可,可以使用httpd -M查看添加或者注释是否生效,如果进程生效,则需要reload,这里的模块可使用相对路径,相对于serverRoot指令指向的位置即可



注意:建议使用service httpd reload重新装载配置文件



5,指定主服务器的文档映射路径 "Main server"

DocumentRoot指令

这里的修改只需要修改DocumentRoot路径即可



DocumentRoot "/var/www/html"  #就是这项,改到页面位置即可,这个位置必须存在



文档路径映射:

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

/var/www/html/images/1.jpg

http://server/images/1.jpg



6,站点路径访问控制

站点访问控制机制:

(1),基于来源地址

(2), 基于账号



定义的方式有两种:

(1),文件系统路径

文件系统路径通常使用 

<Directory "/PAHT/TO/SOMEDIR">

...

</Directory>

2,URL路径

<Location "/URL">

  ...

  </Location>



七,Directory中定义访问控制 

(1)Options

Indexes:当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所以资源以列表呈现给用户;非常危险,不建议使用;

FollowSymLinks:如果其页面文件是为指向DocumentRoot之外路径上的其他文件时,将直接显示目标文件的内容

    None:什么特性都不启用 

    All:所以的都启用

 (2)AllowOverride  这项一般不启用,启用可能占用相当多的服务器性能

 (3)基于来源地址的访问控制

    Order:检查次序

        Order Allow Deny:只有明确Allow的来源地址,才允许访问,其他的均为Deny

        Order Deny Allow:只有明确Deny

    Allow from:允许访问的来源地址

    Deny from:拒绝访问的来源地址

  如:

    Order Allow Deny

    Deny from 10.0.0.2/16

    Allow from 10.0.0.1/16  

    允许10.0.0.1来访问,拒绝10.0.0.2,明确Deny为Deny,明确Allow为Allow



    这里的from支持网络格式,如:

    10.0

    10.0.0.0 

    10.0.0.0/16  

    都是一个意思

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2015-10-30分类: apache

标签: apache

发表评论