Loading...

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

–>

主要内容:

         httpd相关包信息

         httpd的安装及主页面

         httpd的配置文件

         httpd的全局配置

         httpd的主服务器配置

一、httpdRPM包介绍及其相关信息:

CentOS6httpd的相关包信息:

CentOS7上的httpd的相关信息:

httpd安装后各文件的内容及存放位置】:

CentOS6

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

运行目录:/etc/httpd

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

           主配置文件:httpd.conf

         扩展配置文件:/etc/httpd/conf.d/*.conf

socket:

           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”命令来设置开机启动:

[[email protected] ~]# chkconfig --list httpd
httpd              0:off1:off2:off3:off4:off5:off6:off
[[email protected] ~]# chkconfig httpd on
[[email protected] ~]# chkconfig --list httpd
httpd              0:off1:off2:on3:on4:on5:on6:off

4、   通过“service httpd start”或“/etc/rc.d/init.d/httpd”来启动服务:

[[email protected] ~]# service httpd start
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using localhost.localdomainfor ServerName    #此处有点小问题;
                                                          [  OK  ]
[[email protected] ~]# /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端口是否处于监听状态:

[[email protected] ~]# netstat -tan | grep 80
tcp       0      0 :::80                       :::*                        LISTEN
[[email protected] ~]# 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    用于查看核心模块;
[[email protected] ~]# httpd -l
Compiled in modules:
 core.c
 prefork.c
#prefork被直接编译进了核心模块,所以默认使用的就是prefork模型;
 http_core.c
 mod_so.c
[[email protected] ~]#

httpd–M   检查DSO模块加载情况(通过2种方式查询已加载的模块数量应该相等)

[[email protected] ~]# httpd -M | grep -v"static\|Loaded Modules" | wc -l
Syntax OK
52
[[email protected] ~]# grep"^LoadModule" /etc/httpd/conf/httpd.conf | wc -l
52
【配置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=每秒的并发数量,因此还需要再计算极端情况:对于一个站点来说一般都有高峰期,假如一次性进来的请求远远超于预想的阀值,该如何处理?

如果发现服务器满负荷工作时,但服务器上仍然有空闲,可以将MaxClientsServerLimit值调大。

【配置worker模型】;

当第一个用户请求到达的时候线程发现需要复制文件,通过内核将文件复制给其进程,所以第二个用户请求同一个文件,对于第二个线程来说这个文件已存在,因为线程是共享同一个进程空间,所以速度得到提升;

缺点:共享意味着争用,共享资源被称作临界资源,线程共享进程空间就可能产生资源争用,并不是全状态并行。所以一个进程里不能启用太多线程;可启用多个进程然后由每个进程再启用多个线程,但无论如何每个线程也都是一个独立的执行实体(线程要能运行必须给其cpu资源)。

更改apache当前工作模式为worker模式:

     编辑文件/etc/sysconfig/httpd,将以下参数的注释信息去掉:

HTTPD=/usr/sbin/httpd.worker

更改模式后必须重新启动服务:

[[email protected] ~]# service httpd restart
Stopping httpd:                                           [  OK  ]
Starting httpd:                                            [  OK  ]

启动完毕后,查看其进程状态:

[[email protected] ~]# ps -ef | grep httpd
root     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.worker
apache   34791  34786  0 22:24 ?        00:00:00 /usr/sbin/httpd.worker
root     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.so
LoadModule auth_digest_modulemodules/mod_auth_digest.so
LoadModule authn_file_modulemodules/mod_authn_file.so
LoadModule 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/p_w_picpaths/logo.jpg   => <Directory "/var/www/html" ></Directory>
http://www.magedu.com/p_w_picpaths/logo.jpg  =>  <Location "/"></Location>  
#这里的“/”==/var/www/html

6、配置页面文件属性:

<Directory "FS_PATH">
    Options
        Indexes: 是否允许索引页面文件(不安全,建议关闭);
        FollowSynLinks: 是否跟随软链接文件(不安全,建议关闭);
        SymLinksifOwnerMatch:相对安全的跟随软链接指令(如果软链接文件的属主与网页访问用户匹配则允许)
        ExecCGI:是否允许执行CGI脚本;
        All  允许上述所有;
        None  不允许上述所有;
</Directory>

Example:是否允许索引?

首先删除欢迎页面文件和默认主页面文件,或者将二者改名:

[[email protected] ~]# cd /etc/httpd/conf.d/
[[email protected] conf.d]# mvwelcome.conf{,.bak}
[[email protected] conf.d]# cd /var/www/html/
[[email protected] html]# mv index.html{,.bak}
[[email protected] html]# service httpd reload
Reloading httpd:
[[email protected] html]#

此时是能正常索引的,现在来禁止索引功能:

转载于:https://blog.51cto.com/kalaguiyin/1699661

本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。

© 版权声明

相关文章