Apache在互联网上非常广泛的web服务程序,在Linux系统上是httpd的服务器名称。而且属于开源程序,可以跨平台使用,经过多次修改,成为世界使用排名第一的Web服务器软件。
Apache的安装:
配置yum源,系统光盘上直接提供rmp包,centos7上版本2.4以上。2.4新加了很多特性,模块化管理为维护提供了很多方便之处。这里就centos6上的2.2.15版本来说明。
工作特性:
Apache的工作方式有3种:prefork,worker,event。
prefork:多进程工作,一个主进程生成多个子进程一个子进程相应一个请求,主进程接受请求但并不处理而是把请求交给下面的子进程。在Apache启动后预先生成多个空闲进程来响应用户的请求,还会生保证一定数量的空闲进程来应对迎接新的请求。一个进程响应请求资源就有一次I/O,到一定数量级的时候势必会影响性能,但如果其中一个进程出现问题不会影响其他进程,所以它极其稳定。
worker:多线程工作,主进程生成多个子进程,子进程生成多个线程,每个线程响应一个请求,而且在系统资源开销上小于进程并共享内存资源。在高流量的情况下这个工作模式更为适合,但如果其中一个线程“挂”掉会殃及其他线程和在它之上的进程。
event:事件驱动模式,主进程生成多个子进程,子进程再生成多个线程,而线程能响应N个请求。它是在worker基础之上的的改进,在2.2的版本中还处于测试状态。到2.4版本之后才正式使用。
默认安装的目录:
服务脚本:/etc/rc.d/init.d/httpd
配置文件目录:/etc/httpd/conf/ ,
主程序目录:/usr/sbin/httpd httpd.worker httpd.event
模块文件目录/usr/lib64/httpd/modules/
日志文件目录:/var/log/httpd/
access_log:访问日志. error_log:错误日志
在配置中主要就是对/etc/httpd/conf/httpd.conf文件进程配置下面是文件中常用的配置内容:(安装后的默认配置)
# ServerRoot "/etc/httpd" 注释:主工作目录 # PidFile run/httpd.pid 注释:PID文件目录 # # Timeout: The number of seconds before receives and sends time out. # Timeout 60 注释:超时时间,定义接收或者发送超时的时间. # # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive Off 注释:保持连接选项开启或关闭.on或off # MaxKeepAliveRequests 100 注释:保持连接时可以最大请求的请求数量. # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 15 注释:保持连接的时间,单位是秒,超过这里定义的时间连接断开.建议不要过长2-5秒即可. ## ## Server-Pool Size Regulation (MPM specific) ## # prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # ServerLimit: maximum value for MaxClients for the lifetime of the server # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule prefork.c> 注释:prefork的工作模式配置,只有工作在此模式下有效否则无效. StartServers 8 注释:开启服务时启动的进程数量. MinSpareServers 5 注释:子进程最小进程空闲数量.如果不够此设置的值父进程将会创建出子进程到这个值的数量. MaxSpareServers 20 注释:子进程最大空闲的数量,当空闲子进程超过这里设定的值后时候,父进程将回收空闲的子进程 ServerLimit 256 注释:最大的活动进程数量. MaxClients 256 注释:最大的请求数量,此设置不能超过serverlimit MaxRequestsPerChild 4000 注释:子进程在工作周期内最大响应的请求数量.如超过此数量后子进程将会被回收. </IfModule>
# worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule worker.c> 注释:worker工作模式配置,工作在此模式有效否则无效. StartServers 4 注释:启动服务后创建的进程数量. MaxClients 300 注释:最大的并发请求数量 MinSpareThreads 25 注释:最小空闲线程数量. MaxSpareThreads 75 注释:最大空闲线程数量. ThreadsPerChild 25 注释:子进程最多生成线程的数量. MaxRequestsPerChild 0 注释:子进程最多响应请求的数量,0表示不限定. </IfModule> #Listen 12.34.56.78:80 Listen 80 注释:监听的端口,可以设置多个端口. # LoadModule foo_module modules/mod_foo.so 注释:加载的模块,名称和模块路径.如不需要加载可以在前面加#号注释. # LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so 省略………… # Load config files from the config directory "/etc/httpd/conf.d". # Include conf.d/*.conf 注释:加载conf文件,开启服务时会加载/etc/httpd/conf.d/下面的所有以.conf结尾的配置文件 User apache 注释:运行Apache的用户名 Group apache 注释:运行Apache的组名
<Directory ""> 注释:访问控制区域定义. Options Indexes FollowSymLinks 注释:options 设置: Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None, All AllowOverride None 注释: 是否去找.htacess文件作为配置文件. Order allow,deny 注释:访问控制顺序,先看allow允许访问的列表,再检查deny的列表 Allow from all 注释:allow定义是all就是允许所有,可以使用IP地址和网络地址进程控制. </Directory>
<IfModule mod_userdir.c> 注释:用户目录站点开启与否检查 UserDir disabled 注释:如果开启,可以通过http://URL//~username/ 的形式来访问系统中每个用户的私人站点 </IfModule>
ErrorLog logs/error_log 注释:错误日志文件存放路径和名称,可自己定义. LogLevel warn 注释:错误日志级别 # 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 #CustomLog logs/access_log common # # CustomLog logs/access_log combined 注释:访问日志存放路径和文件名称,combined是日志格式. 格式参考logformat
# Alias /icons/ "/var/www/icons/" 注释:路径别名.访问/icons/的时候实际目录位置为/var/www/icons/. # # DocumentRoot "/usr/local/apache2/htdocs" 注释:网站文件存放目录. # # DirectoryIndex index.html index.html.var 注释:默认主页文件,按照从左到右的文件匹配,文件存在且最先匹配的为默认主页. # # AddDefaultCharset UTF-8 注释:默认字符集. # #<VirtualHost *:80> 注释:虚拟主机,*为IP地址.80是监听的端口号.其中以下配置和以上提到的配置功能一样. # ServerAdmin [email protected] # DocumentRoot /www/docs/dummy-host.example.com # ServerName dummy-host.example.com # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost> |
logformat的说明:
%h:客户端IP地址
%l:客户端用户名,-表示空
%u:认证用户.-表示空
%t:访问时间,服务器收到请求时的时间.
%r:请求报文的首行信息.
%s>s:响应状态码
%b:响应报文的大小,单位是字节,不包括响应报文首部
%{referer}i:请求报文中"referer"的首部值,当前资源的访问入口,即从哪个页面中的超链接跳转而来,-表示用户直接键入的URL
%{User-Agent}i:请求报文中"User-Agent"首部的值,即发出请求用到的应用程序.
虚拟主机的工作方式有三种:基于IP,基于主机名,和基于端口号,在VirtualHost定义的时候区别即可,比如,基于IP的主机<VirtualHost 192.168.1.2:80>
<VirtualHost 192.168.1.3:80>,在访问的时候输入对应的IP即访问对应的虚拟主机,前提是你需要有对应的IP地址在你的网卡上面.基于端口号,IP可以是同一个IP不过是端口的区分,基于主机名同理.
Apache工作模式的切换:
Apache在安装后默认的工作模式是perfork,在Linux系统下可以使用httpd �Cl查看, 如果查看当前模块的动态还是静态加载的可以使用httpd -M
在工作模式上Apache已经准备好了worker和event,在命令行输入httpd按tab键2此就可以列出来
如需切换工作模式要修改/etc/sysconfig/httpd文件,找到 #HTTPD=/usr/sbin/httpd.worker 把前面的#好去掉即可,然后重启Apache服务.
同样的道理如果使用event则把后面的httpd.worker更改为httpd.event。但在2.2的版本中不建议使用event的模式因为还处于测试当中可以看文档也并没有在下面增列出event。如果要使用event更新为2.4的版本。
重启服务后可以用pa aux 查看:
要切换会prefork再把刚才的HTTPD=/usr/sbin/httpd.worker注释掉重启服务即可。