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

主要内容:

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/*.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=每秒的并发数量,因此还需要再计算极端情况:对于一个站点来说一般都有高峰期,假如一次性进来的请求远远超于预想的阀值,该如何处理?

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

【配置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/images/logo.jpg   => <Directory "/var/www/html" ></Directory>
http://www.magedu.com/images/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]#

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

时间: 2024-08-10 06:27:54

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

Java Web学习(一) Eclipse与Tomcat配置

Java Web学习(一) Eclipse与Tomcat配置 一.Eclipse的选择 使用基于Eclipse的STS Ide ,个人感觉挺好用的. 地址:http://spring.io/tools/sts 根据以上两张图片,将STS 下载下来.然后解压缩. 用编辑器打开STS.ini 文件,在最后一行,添加    -Dfile.encoding=UTF-8 这样以后所有用STS 创建的文件都是UTF-8的编码了. 二.JDK与Tomcat的安装与配置 1.JDK安装与配置 地址: http:

Linux运维实战之Apache的基本配置(全局配置、主服务器配置):

上次博文我们具体讨论了http协议(参见:http://sweetpotato.blog.51cto.com/533893/1656137),本次博文我们来具体配置一台Apache(httpd)服务器. 本次博文的主要内容: httpd相关包信息 httpd的安装及主页面 httpd的配置文件 httpd的全局配置 httpd的主服务器配置 一.httpd的RPM包介绍及其相关信息: RHEL5和RHEL6略有不同: 下图是RHEL5上httpd相关包的信息: 下图是RHEL6上httpd相关包

Keepalived的全局配置

Keepalived的全局配置 默认配置文件如下: 1 ! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 [email protected] 6 [email protected] 7 [email protected] 8 } 9 notification_email_from [email protected] 10 smtp_server 192.168.200.1 11 smtp_

Web API 源码剖析之全局配置

Web API  均指Asp.net Web API .本节讲述的是基于Web API 系统在寄宿于IIS. 本节主要讲述Web API全局配置.它是如何优雅的实现这个配置.做过MVC 都知道Global文件来初始化.Web API 本质上也是ASP.NET applications.所以也是在Global定义里一个GlobalConfiguration静态类.该类作用就是初始化ASP.NET applications.如下是GlobalConfiguration的定义. //    // 摘要

Java Web学习(二) Eclipse的配置

Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后根据windows系统32位或64位,进行选择(建议64位).如果你的机器内存过小,可以选择Eclipse的旧版本:Eclipse Indigo .Eclipse Juno . Eclipse Kepler 等版本. 2.解压缩安装 打开压缩包,将里面的Eclipse 拖出到指定位置,进行解压缩.

java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</servlet-class> 4 </servlet> 5 6 <ser

Sharepoint商务智能学习笔记之PowerPviot Service安装与配置(七)

1) PowerPviot Service多服务器部署注意事项 PowerPviot Service不是Sharepoint自带的服务,要想使用PowerPviot Service需要先在sharepoint场中部署PowerPivot for SharePoint.详情请参考在 SharePoint 场中规划 PowerPivot 部署. 如果sharepoint场是多服务器场,可以将PowerPivot for SharePoint以扩展方式部署到多个应用程序服务器上.对于 PowerPiv

Tomcat学习之二:tomcat安装、配置及目录文件说明

我们看到tomcat目录/bin文件夹里有个tomcat6w.exe,顾名思义就是tomcat以window方式显示控制台.第1次点击打开它时候,可能会提示:tomcat指定的服务未安装,此时我们可以这样解决它. 打开命令行提示符窗口-> 进入Tomcat安装目录-> 进入bin目录下-> 输入:service.bat install 即可,如图操作,tomcat目录按自己电脑上的来即可 <!--[endif]--> 这样就可以让tomcat以window方式显示控制台.点击

web学习笔记-servlet

web学习笔记-servlet 概念 servlet是一个小应用程序,用于处理从客户端发送的请求及服务端的响应. 详情参见: 百度百科的定义 在idea创建servlet 在src右键新建servlet,如图所示: 然后会报异常可以下载包,也可以添加tomcat中的包,添加tomcat->lib-->servlet-api.jar作为libraries. 然后再打开web.xml此时会发现多出一个servlet标签 ServletDemo1 servelt.ServletDemo1 "