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

marksugar
2015-10-30 / 0 评论 / 2,926 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2015年10月30日,已超过2179天没有更新,若内容或图片失效,请留言反馈。

apache

<span style="background-color:#E53333;">一,apache MPM简介</span>
MPM:
prefork:多进程模型,每个进程响应一个请求
worker:多线程模型,每个线程响应一个请求
event:事件驱动模型,一个线程响应多个请求

并发服务器响应请求
1,单进程I/O模型
2,多进程I/O模型
3,复用的I/O模型
    多线程模型
    事件驱动复用的多进程I/O模型


httpd基本配置和应用

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

<span style="background-color:#E53333;">二,httpd包介绍</span>
[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 ~]# 


<span style="background-color:#E53333;">三,程序环境:</span>
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]# 

<span style="background-color:#E53333;">四,配置文件:</span>
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支持毫秒级别

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


开启持久链接:<span style="color:#E56600;">KeeAlive Off|On</span>

开启断开的限制如下:
最大保活请求资源数:MaxKeepAliveRequests 100 
如果没有达到100个则这条生效:KeepAliveTimeout 15
以上两条那个先到达,则断开


<span style="color:#E53333;">3,MPM</span>
多路处理模块:并发请求响应的不同实现
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 ~]# 

<span style="background-color:#E53333;">五,更换支持不同的MPM的主程序</span>
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>


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



<span style="background-color:#E53333;">六,DSO机制</span>
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>

<span style="background-color:#E53333;">七,Directory中定义访问控制 </span>
(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

评论 (0)

取消