Apache-httpd
一、HTTPD特性
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、雅安服务器托管、营销软件、网站建设、梁河网站维护、网站推广。httpd:特性
1.事先创建进程:在请求来之前,创建进程监听,加快响应速度
2.按需维持适当的进程
3.模块设计,核心比较小,各个功能都可以按照模块添加
4.支持多种方式的虚拟主机配置:
Socket IP:Port
1.基于IP的虚拟主机(如果一个server有多个ip,而在互联网上,每个IP每年都需要一定的费用)
2.基于端口的虚拟主机(如果不是标准的80端口,那么别人无法知道到底使用的是啥端口)
3.基于域名的虚拟主机(比较好的选择)
protocol://host:port/path/to/source
=================
Method URL version
header
body
=================
GET /download/linux.tar.bz2 HTTP/1.0
Host: www.harry.com
4.支持https协议(mod_ssl)
5.支持用户认证
6.支持基于IP或主机名的ACL
7.支持每目录的访问控制
8.支持URL重写
二、HTTPD安装
1.rpm包
httpd:
/usr/sbin/httpd(MPM: prefork)
httpd: root,root(master process)
httpd: apache,apache(worker process)
/etc/rc.d/init.d/httpd (启动脚本)
port:(http: 80/tcp)(https: 443/tcp)
/ec/httpd:工作根目录,相当于程序安装目录
/etc/httpd/conf:配置文件目录
httpd.conf主配置文件(以段文件分散到conf.d目录下,以include引入)
conf.d/*.conf
/etc/httpd/modules:模块路径(都是连接)
/etc/httpd/logs:->/var/log/httpd:日志目录
日志文件有两类:访问日志access_log错误日志err_log
/var/www: 资源文件目录
html :静态文件路径
cgi-bin:动态文件路径
cgi: Common Gateway Interface httpd通过cgi和各个模块进行通信
client --> httpd(index.cgi) --> spawn process(index.cgi) --> httpd --> client
perl, python, java(servlet,jsp), php
cgi工作原理:
1.一个动态请求到Web Server,Web Server判断cgi类型,创建对应的cgi进程来处理动态请求,并返回html给Web Server,Web Server响应client。动态cgi进程销毁
2.fast-cgi:cgi进程池,由master-workers模式
一个动态请求Web Server,Web Server和master进程通信由master分配给worker进程,来处理
这样Web Server与cgi可以部署在不同Server上
动静分离:
----->|------- | |------------|
|Apache|| 应用服务器|
| 如果是静态的,|
则直接返回
|
如果是动态的,
则请求应用服务器------>||
| -------- |
httpd是不处理动态文件的,而是通过调用模块,处理,并返回静态文件
2.源码编译
三、Global配置
[root@hfdb0001conf]#pwd /etc/httpd/conf [root@hfdb0001conf]#grep"Section*"httpd.conf=>可以看出配置主要有三段。 ###Section1:GlobalEnvironment=>全局配置项 ###Section2:\'Main\'serverconfiguration=>主Server配置 ###Section3:VirtualHosts=>虚拟主机配置(与主Server配置不能同时生效)
ServerTokens OS
http://httpd.apache.org/docs/2.2/zh-cn/mod/core.html#servertokens
ServerTokens Major|Minor|Min[imal]|Prod|[uctOnly]|OS|Full
#超时时间 TCP相关的,如TCP第一次握手后,就不在请求了。
Timeout 120
KeepAlive Off#如果服务器的访问不大,则需要打开长连接
MaxKeepAliveRequests 100
KeepAliveTimeout 15
#是否使用长连接(tcp连接每次都需要3次握手,而长连接,则第一次三次握手后,一直保持连接状态),如果是KeepAlive On,则需要定义MaxKeepAliveRequests 100(即该连接打开后,最多能请求的资源数,不能无尽的请求)。这样一个用户请求都会最多能请求100个。 KeepAliveTimeout 15.当用户拥有一个长连接,但是并不请求,15s后,即自我销毁了。
#对于繁忙的Server可以降低KeepAliveTimeout的值,可以提高并发
#eg 当第一个请求到来,获取一个长连接,他最多能请求100个,到了后,就会断开连接,重新排队。这样下一个请求就能回的连接,请求资源,不然,第一个请求永远拥有连接,除非自我断开。
MPM:Multi-Processing Modules(可以切换,通过配置文件修改)
当并发请求时,Server是如何工作的
1.mpm_winnt
2.prefork(一个请求用一个进程响应)=>预先会生成多个进程,每个进程响应一个请求
3.worker (一个请求用一个线程响应)=>生成多个进程,进程不处理,每个进程生成多个线程,每个线程来处理请求
多线程共享。当同一个进程下的线程已经打开了文件,其他线程和读取,但是存在竞争。需要枷锁。
4.event (一个进程处理多个请求)
[root@hfdb0001conf]#httpd-l=>查看所有的模块,可以看到当前只支持prefork模型 Compiledinmodules: core.c prefork.c http_core.c mod_so.c [root@hfdb0001conf]#rpm-qlhttpd|grepbin /usr/sbin/apachectl /usr/sbin/htcacheclean /usr/sbin/httpd=>是默认的,prefork /usr/sbin/httpd.event /usr/sbin/httpd.worker=>可以看出Server是支持worker,event的。 /usr/sbin/httxt2dbm /usr/sbin/rotatelogs /usr/sbin/suexec [root@hfdb0001conf]#httpd.worker-l Compiledinmodules: core.c worker.c http_core.c mod_so.c 我们可以修改配置文件,使得http.worker是默认的 [root@hfdb0001conf]#cat/etc/sysconfig/httpd #Configurationfileforthehttpdservice. # #Thedefaultprocessingmodel(MPM)istheprocess-based #\'prefork\'model.Athread-basedmodel,\'worker\',isalso #available,butdoesnotworkwithsomemodules(suchasPHP). #Theservicemustbestoppedbeforechangingthisvariable. # #HTTPD=/usr/sbin/httpd.worker ....
prefork:
worker:
Listen80 => 监听该Server上所有的80 端口
Listen 8080=>可以监听多个端口
Listten x.x.x.x:8181=> 可以指定IP:端口
Includeconf.d/*.conf=>加载conf.d目录下所有conf文件(以段文件形式)
LoadModulepath/to/...so
Userapache
Groupapache=>所有的httpd进程,只有一个是root:root权限启动的,其他的都是apache:apache权限
四、虚拟主机配置概述
Socket IP:Port
1.基于IP的虚拟主机(如果一个server有多个ip,而在互联网上,每个IP每年都需要一定的费用)
IP1:80
IP2:80
....:80
2.基于端口的虚拟主机(如果不是标准的80端口,那么别人无法知道到底使用的是啥端口,互联网上不好适用)
IP:80
IP:8080
3.基于域名的虚拟主机(比较好的选择)
IP:80
主机名不同(不同的主机名会被解析到同一个IP和端口上)
www.harry1.com=>都会被解析到IP:80上
www.harry2.com=>都会被解析到IP:80上
通过HTTP协议的请求头的host: 来判断到底访问的那台主机
ServerName:www.harry1.com
ServerAlias:www.harry11.com=> 当想www.harry1.com和 www.harry11.com是同一个Server时
DocuemtRoot/www/harry1.com/
.....
.....
当访问 http://www.harry1.com/images => 自然会解析到/www/harry1.com/这个目录下的images
Alias=> 当想再访问http://www.harry1.com/test/images 也要解析到 之前的images目录,此时需要别名
ErrorLog
CustomLog
ScriptAlias
虚拟主机和中心主机是不能使用的,注释中心主机的DocumentRoot即可
五、虚拟主机配置
1.基于IP
Host:
ip1:80
ip2:80
注释httpd.conf的DocuemtRoot配置,即注释中心主机配置 [root@hfdb0001conf]#pwd /etc/httpd/conf 在conf.d目录下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-ip.conf=>前提是要有两个ip
2.基于端口
Host:
ip:80
ip:8080
在conf.d目录下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf-bak -rw-------1rootroot227Oct3005:39virtual-port.conf -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-port.conf
3.基于域名
serverName不同即可
在conf.d目录下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf-bak -rw-------1rootroot227Oct3005:39virtual-port.conf-bak -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-domain.conf===>domain需要被解析到该主机上,可以修改hosts可以DNS NameVirutalHost10.224.243.1:80
六、其他配置
1.目录权限控制
针对某个IP不能访问www.harry1.com [root@hfdb0001conf.d]#catvirtual-domain.conf===>domain需要被解析到该主机上,可以修改hosts可以DNS NameVirutalHost10.224.243.1:80
2. 身份验证 转http://www.cnblogs.com/loveCloud/archive/2012/01/12/2320636.html
一、编辑虚拟目录配置文件,设置认证方式
3.Location配置 相对于Directory是配置本地文件系统路径的,而Location是针对URL路径的
当前文章:Apache-httpd
文章URL:http://scyanting.com/article/cgcjdg.html