您的位置:首页 > 运维架构 > Apache

Web学习之——02Apache的基本配置(全局配置、主服务器配置)

2015-09-30 20:31 597 查看
主要内容:httpd相关包信息httpd的安装及主页面httpd的配置文件httpd的全局配置httpd的主服务器配置一、httpd的RPM包介绍及其相关信息:CentOS6上httpd的相关包信息:CentOS7上的httpd的相关信息:【httpd安装后各文件的内容及存放位置】:CentOS6:服务脚本:/etc/rc.d/init.d/httpd运行目录:/etc/httpd配置文件:/etc/httpd/conf/ 主配置文件:httpd.conf 扩展配置文件:/etc/httpd/conf.d/*.confsocket: http:80/tcp https:443/tcp网页文件目录(DocumentRoot): 静态页面:/var/www/html 动态页面(CGI):/var/www/cgi-bin/ 默认主页面:index.html index.php【httpd的安装】:注意:httpd的默认安装会试图通过反解当前主机的IP地址来为httpd服务器提供一个主机名称,如果反解失败会报错,会提示主机名称解析失败并使用127.0.0.1作为当前主机的主机名。所以在没有配置DNS的情况下,建议首先配置/etc/hosts文件为其提供一个主机名。1、 编辑/etc/hosts文件,为当前主机配置相应的主机名:2、 通过yum来安装httpd,如果需要手册(httpd-manual:官方提供的httpd的配置手册),也可以一并安装;3、 安装完成后通过“chkconfig”命令来设置开机启动:
[root@localhost ~]# chkconfig --list httpd
httpd              0:off1:off2:off3:off4:off5:off6:off
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd              0:off1:off2:on3:on4:on5:on6:off
4、 通过“service httpd start”或“/etc/rc.d/init.d/httpd”来启动服务:
[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName    #此处有点小问题;
[  OK  ]
[root@localhost ~]# /etc/rc.d/init.d/httpdrestart
Stopping httpd:                                           [  OK  ]
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName
[  OK  ]
在/etc/httpd/conf/httpd.conf文件中将# ServerName www.example.com:80 的注释符#号去掉即可;
5、 通过“netstat”“ss”命令来查看80/tcp端口是否处于监听状态:
[root@localhost ~]# netstat -tan | grep 80
tcp       0      0 :::80                       :::*                        LISTEN
[root@localhost ~]# ss -tnl | grep 80
LISTEN     0     128                     :::80                      :::*
6、 80/tcp端口被监听说明服务已经启动了,在客户机的浏览器中输入服务器地址验证安装。看到上面的页面表示httpd已经能够正常工作了哈,上面的页面是一个测试页面,在我们提供默认主页面后该页面就会被替换。7、 httpd提供默认主页(在"/var/www/html"目录下新建一个名为index.html的文件),内容如下:8、 再次通过浏览器访问:自定义主页设置成功,能正常访问;二、配置httpd的工作属性:指令的说明:/etc/httpd/conf/httpd.conf:1、指令不区分字符大小写,但约定俗成的习惯:单词的首字母大写;指令的值很有可能区分大小写;有些指令可以重复使用多次; 2、所有以“#”号开头的都为注释;配置文件的构成:整个配置文件由3段组成:(1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;(2)主服务器:主站属性;(3)虚拟主机:虚拟主机及属性定义注:第二段和第三段(即主机和虚拟主机)不能同时使用;说明:大多数配置修改后,使用service httpd reload即能生效;而修改了监听的地址和端口通常需要重启服务;第一段:全局配置:1、配置监听的地址和端口:Listen [IP:]PORT //Listen可重复使用多次
#Listen 12.34.56.78:80
Listen 80
2、配置所选用的MPM的属性:MPM:意为多路处理模块,也就是我们所说的Apache的工作模式,共有3中模式: prefork:一个主进程产生多个子进程,一个子进程响应一个请求; worker:一个进程生成多个线程,一个线程响应一个请求; event:基于事件驱动;说明:
event在apache2.4版本之前是以测试状态提供,网上并没有太多的资料,在更新至2.4版本之后正式上线
prefork:当httpd启动起来之后,会生成一个主进程,它负责监听用户的请求,一旦请求进来后,它不负责自己响应,而是让其生成的子进程来响应,而主进程继续监听请求。
需要考虑的是:刚启动服务的时候需要创建几个空闲进程,太多不好太少也不好。最少保证有几个空闲进程来响应请求进来,这是必须的。 最多设定多少个空闲进程,多余的空闲进程需要回收回来。
所以Prefork有如下几个关键作用:
(1)启动服务时绑定特权端口:Linux系统中,只有管理员有权限使用小于1024的特权端口;但运行一些公共可用的服务,一定不能以管理员身份运行;
(2)派发或回收子进程
(3)读取分析主配置文件
(4)监听每个用户请求并且派发子进程
httpd 命令的使用:
Usage: httpd [-D name] [-d directory] [-ffile][-C "directive"] [-c "directive"][-k start|restart|graceful|graceful-stop|stop][-v] [-V] [-h] [-l] [-L] [-t] [-S]Options:-Dname            : define a name for usein <IfDefine name> directives-ddirectory       : specify an alternateinitial ServerRoot-ffile            : specify an alternateServerConfigFile-C"directive"     : processdirective before reading config files-c"directive"     : processdirective after reading config files-elevel           : show startup errors oflevel (see LogLevel)-Efile            : log startup errors tofile-v                 : show versionnumber-V                 : show compilesettings-h                 : listavailable command line options (this page)-l                 : list compiledin modules-L                 : listavailable configuration directives-t-D DUMP_VHOSTS  : show parsed settings(currently only vhost settings)-S                 : a synonym for-t -D DUMP_VHOSTS-t-D DUMP_MODULES : show all loaded modules-M                 : a synonym for-t -D DUMP_MODULES-t                 : run syntaxcheck for config files
参数说明:
httpd –l    用于查看核心模块;
[root@localhost ~]# httpd -lCompiled in modules:core.cprefork.c#prefork被直接编译进了核心模块,所以默认使用的就是prefork模型;http_core.cmod_so.c[root@localhost ~]#
httpd–M 检查DSO模块加载情况(通过2种方式查询已加载的模块数量应该相等)
[root@localhost ~]# httpd -M | grep -v"static\|Loaded Modules" | wc -lSyntax OK52[root@localhost ~]# grep"^LoadModule" /etc/httpd/conf/httpd.conf | wc -l52
【配置prefork模型】:
Apache服务默认就是以prefork模式启动的,无须更改启动模式,下面来看看如何更改其模型参数:
编辑主配置文件:vim /etc/httpd/conf/httpd.conf找到与模块相关的参数:IfModule为指令,意为判断模块是否存在,如果存在那么参数则生效,反之如果不存在此模块,参数将不会生效。
<IfModule prefork.c>                   #如果存在这个模块,那么提供以下属性;StartServers       8                       #刚启动Web服务时启动几个空闲子进程;MinSpareServers    5                      #最少空闲进程数;MaxSpareServers   20                     #最大空闲进程数;ServerLimit      256                       #限定最多允许并发进来的活动用户连接个数;MaxClients       256                     #服务器所允许同时所连接进来的链接数,一般来说与上面保持一致,或者大于上面的数。MaxRequestsPerChild  4000          #一个服务器进程最多可以处理多少个进程,一旦超出请求后无论如何将进程结束并新启动新进程</IfModule>                                          #最后以IfModule结尾;
如果一个进程需要20M内存,那么256*20=5G内存,通常说ServerLimit是相当消耗内存的,256已经足够;
例:工作中,通过观察发现服务器每个请求进来并处理结束之间的过程大概需要50毫秒,在一秒钟之内一个进程可以处理20个请求,那么一共开启了256个那 么即意味着256*20=每秒的并发数量,因此还需要再计算极端情况:对于一个站点来说一般都有高峰期,假如一次性进来的请求远远超于预想的阀值,该如何处理?
如果发现服务器满负荷工作时,但服务器上仍然有空闲,可以将MaxClients、ServerLimit值调大。【配置worker模型】;当第一个用户请求到达的时候线程发现需要复制文件,通过内核将文件复制给其进程,所以第二个用户请求同一个文件,对于第二个线程来说这个文件已存在,因为线程是共享同一个进程空间,所以速度得到提升;缺点:共享意味着争用,共享资源被称作临界资源,线程共享进程空间就可能产生资源争用,并不是全状态并行。所以一个进程里不能启用太多线程;可启用多个进程然后由每个进程再启用多个线程,但无论如何每个线程也都是一个独立的执行实体(线程要能运行必须给其cpu资源)。更改apache当前工作模式为worker模式: 编辑文件/etc/sysconfig/httpd,将以下参数的注释信息去掉:HTTPD=/usr/sbin/httpd.worker更改模式后必须重新启动服务:
[root@localhost ~]# service httpd restartStopping httpd:                                           [  OK  ]Starting httpd:                                            [  OK  ]
启动完毕后,查看其进程状态:
[root@localhost ~]# ps -ef | grep httpdroot     34786      1  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker  #以root用户身份生成的父进程(用于派发工作进程)apache   34788  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker #以apache用户身份运行的工作进程(该工作进程派发线程)apache   34789  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.workerapache   34791  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.workerroot     34907   1947  0 22:26 pts/0    00:00:00 grep httpd
【worker属性配置】:
<IfModule worker.c>StartServers         4                #配置启动多少个用于监听的服务,注意:这里并不是服务器进程,而是线程;MaxClients         300                #最大支持的用户连接数;MinSpareThreads     25                #最小的空闲线程数;MaxSpareThreads     75               #对大的空闲线程数 ;ThreadsPerChild     25                  #允许每个进程最多生成多少个线程;MaxRequestsPerChild  0                 #设置一个独立的子进程将能处理的请求数量;</IfModule>
3、配置服务器支持keep-alived:
KeepAlive {On | Off }    #启用之后支持一次连接可以发送多个请求(对于非常繁忙的服务器建议Off)KeepAliveTimeout 15           #15秒之后断开长连接;MaxKeepAliveRequests 100  #一次长连接之内最多允许50个请求;
4、配置加载的模块:
# Example:# LoadModule     foo_module modules/mod_foo.so#LoadModule指令模块名称   模块所在的路径(相对于ServerRoot而言)LoadModule auth_basic_modulemodules/mod_auth_basic.soLoadModule auth_digest_modulemodules/mod_auth_digest.soLoadModule authn_file_modulemodules/mod_authn_file.soLoadModule authn_alias_modulemodules/mod_authn_alias.so
第二段:主服务器配置:5、配置站点根目录(网页存放目录)
DocumentRoot ""#与之配对使用两个容器类指令:Directory指令限定的是文件系统上站点目录的路径(/var/www/html);Location指令限定的是URL路径<Directory "FS_PATH"></Directory><Location "URL"></Location>#两种路径定义方法/var/www/html/images/logo.jpg   => <Directory "/var/www/html" ></Directory> http://www.magedu.com/images/logo.jpg  =>  <Location "/"></Location>#这里的“/”==/var/www/html
6、配置页面文件属性:
<Directory "FS_PATH">OptionsIndexes: 是否允许索引页面文件(不安全,建议关闭);FollowSynLinks: 是否跟随软链接文件(不安全,建议关闭);SymLinksifOwnerMatch:相对安全的跟随软链接指令(如果软链接文件的属主与网页访问用户匹配则允许)ExecCGI:是否允许执行CGI脚本;All  允许上述所有;None  不允许上述所有;</Directory>
Example:是否允许索引?首先删除欢迎页面文件和默认主页面文件,或者将二者改名:
[root@localhost ~]# cd /etc/httpd/conf.d/[root@localhost conf.d]# mvwelcome.conf{,.bak}[root@localhost conf.d]# cd /var/www/html/[root@localhost html]# mv index.html{,.bak}[root@localhost html]# service httpd reloadReloading httpd:[root@localhost html]#
此时是能正常索引的,现在来禁止索引功能:本文出自 “佧拉贵银's Blog” 博客,请务必保留此出处http://kalaguiyin.blog.51cto.com/4831716/1699661
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: