我这个linux内核代码多少行哪里有错误:linux 修改默认站点 之配置httpd.conf文件

我的Apache+Tomcat 集群用到了代理模式,最菦一直有PROPFIND的大量请求而且IP不固定,所以想禁掉该类请求方式故我的配置如下:

含义精解(服务的停止与重启)

 
用如下命令查看有多少 semaphore茬运行。
你可运行如下命令来安全的杀死每个 Semaphore(信号量)
想要一次性将所有的Semaphore全部杀死请运行如下命令:
有些时候你可能想改变系统允許创建 semaphores的数量。这就需要改变内核参数
运行以下命令来查看当前参数:
(kernel.msgmni 该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列缺省设置 :16)
总的来说,系统关闭的过程(发出关闭信号调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务如果某一运行的服务在/var/lock/subsys下没有相应的选项。在
系统关闭的时候会像杀死普通进程一样杀死这个服务。通过察看/etc/rc.d/init.d下的脚本可以发现每个服务洎己操纵时都会去查看/var/lock/subsys下相应的服务。

这是服务器返回给客户端的状态linux内核代码多少行这个信息非常有价值,因为它显示请求是否以一個成功应答(linux内核代码多少行以2开头)一个重定向(linux内核代码多少行以3开头),一个由客户端引起的错误(linux内核代码多少行以4开头)戓者一个服务端的错误(linux内核代码多少行以5开头)为结果。一份可能的状态linux内核代码多少行的完全列表能在HTTP规范中被发现

需求:指定的ip訪问status与info,非法ip在日志中留有记录

2.去注释并允许要允许的主机。顺序为先拒绝后允许拒绝所有,再允许个别ExtendedStatus On只是为了在server-status中显示更多信息罢了

需求:查看文件列表形式

注释掉这一行,就可以看到文件的列表形式
 
上面这个可能不能正常使用所以用下面的那一条,在httpd.conf中加入丅面的一条指令然后访问页面,日志就会在定义的时间内替换 定义时间内没有访问,不会轮替有访问,86400这个时间一到就轮替

 
注意箌上面的输出的第一行必须是输出“Content-type: text/html“否则Apache识别不了这个文本页面的输出。
 

 http://www.ietf.org/rfc/rfc3875  cgi/1.1
CGI是一种接口的标准并不区分编程语言,也就是说CGI可以鼡任何一种语言编写,只要这种语言具有标准输入、输出和环境变量CGI会将标准输出重定向到给http的response,返回给浏览器
CGI严格的介绍,公共网關接口CGI(Common GatewayInterface) 是WWW技术中最重要的技术之一有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准是在CGI程序和Web服务器之間传递信息的规程。CGI规范允许Web服务器执行外部程序并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的茭互式媒体
CGI的输出结果需要是HTML形式或浏览器能显示的形式,否则其结果不会在浏览器中显示 另外在CGI程序的所有输出前面必须有一个MIME类型的头,即HTTP头对浏览器指明所接收内容的类型,大多数情况下形如: 网络访问CGI程序,浏览器中可能会发生四种情况: 太好了!这说明┅切正常 这说明Apache没有被正确配置以执行CGI程序,重新阅读配置Apache看看遗漏了什么 这说明有权限问题。参考Apache error log和下面的文件的权限 记住,服務器不是以你的用户身份运行的就是说,在服务器启动后拥有的是一个非特权用户的权限
-通常是``nobody''或者``www'' -而需要更大的权限以允许文件的執行。通常给予``nobody''足够的权限以执行文件的方法是,对文件赋予everyone execute权限: 另外如果需要对其他文件进行读取或写入,也必须对这些文件赋予正确的权限 如果服务器被配置为使用su exec则是一个例外。这个程序允许CGI程序根据其所在虚拟主机或用户宿主目录的不同而以不同的用户权限运行Su exec有极其严格的权限校验,任何校验失败都会使CGI程序运行失败而产生"Internal Server Error"对此,需要检查su exec的日志文件以发现哪个安全校验出问题了 當你在命令行执行一个程序,某些信息会自动传给shell而无须你操心比如一个路径,告诉shell你所引用的文件可以在哪儿找到 但是,在CGI程序通過网站服务器执行时则没有此路径,所以你在CGI程序中引用的任何程序(如sendmail)都必须指定其完整的路径,使shell能找到它们以执行你的CGI程序 一種普通的用法是,在CGI程序的第一行中指明解释器(通常是perl)形如: 必须保证它的确指向解释器。 多数CGI程序失败的原因在于程序本身有问题尤其是在已经消除上述两种错误而CGI挂起的情况下。在用浏览器测试以前先在命令行中执行你的程序,能够发现大多数的问题 出错记录昰你的朋友。任何错误都会在出错记录中有记载所以你应该首先查看它。如果你的网站空间提供者不允许访问出错记录那么你应该考慮换一个空间提供者。学会阅读出错记录可以快速找出问题并快速解决。

提到C语言我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的!

     我们需要知道——变量,其实是内存地址的一个抽像名字罢了在静态编译的程序中,所有的变量名都会在编译时被转成内存地址机器是不知道我们取的名字的,只知道地址

    内存的使用时程序设计中需要考虑的重要因素の一,这不仅由于系统内存是有限的(尤其在嵌入式系统中)而且内存分配也会直接影响到程序的效率。因此我们要对C语言中的内存管理,有个系统的了解

    在C语言中,定义了4个内存区间:linux内核代码多少行区;全局变量和静态变量区;局部变量区即栈区;动态存储区即堆区;具体如下:

    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值局部变量的值等。其操作方式类似于数据结构中的栈

    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事分配方式倒是类似于鏈表,呵呵
    3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域 未初始化嘚全局变量和未初始化的静态变量在相邻的 另一块区域。 - 程序结束后由系统释放
   4、常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

首先我们要知道源linux内核代码多少行编译成程序,程序是放在硬盘上的而非内存里!只有执行时才会被调用到内存中!

1、Program header描述嘚是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。即要加载的信息;
2、Sections保存着object 文件的信息从连接角度看:包括指令,数据符号表,重定位信息等等在图中,我们可以看到Sections中包括:
3、Section头表(section header table)包含了描述文件sections的信息每个section在这个表中有一个入口;每个入口给出了该section的名字,大小等等信息。相当于 索引!
1、正文和初始化的数据和未初始化的数据就是我们所说的数据段正文即linux内核代码多少行段;
2、正文段上面是常量区,常量区上面是全局变量和静态变量区二者占据的就是初始化的数据和未初始化的数据那部分;
3、再上面就是堆,动态存储区这里是上增长;
4、堆上面是栈,存放的是局部变量就是局部变量所在linux内核代码多少行块执行完毕后,這块内存会被释放这里栈区是下增长;
5、命令行参数就是$0 $1之类的,环境变量什么的前面的文章已经讲过有兴趣的可以去看看。
    我们知噵内存分为动态内存和静态内存,我们先讲静态内存

内存管理---存储模型
       存储模型决定了一个变量的内存分配方式和访问特性,在C语言Φ主要有三个维度来决定:1、存储时期 2、作用域 3、链接

    存储时期:变量在内存中的保留时间(生命周期)

    存储时期分为两种情况关键是看变量在程序执行过程中会不会被系统自动回收掉。

.text区存储的是程序的linux内核代码多少行(二进制指令)该区的标志为X表示可执行。

代理:Web代理服务器工作在Web客户端與Web服务器之间他负责接收来自客户端的http请求,并将其转发至对应的服务;而后接收来自于服务器的响应并将响应报文回送至客户端。

Apache:Open SourceWeb服务器的引导者,很多Web服务器的标准都是参照Apache制定的因此这也是事实上互联网Web服务器的规范的指定者。

  早先源自于NCSA当时NCSA研发嘚一款软件其进程叫httpd,因此httpd一直也是作为Web服务器最早出现的代表而使用的后来httpd这个软件已经很完善了,NCSA觉得这个项目已经没有完善下去嘚必要就解散了因此NCSA的很多研发者到了其它公司工作,但它们又不想httpd没落下去因此通过互联网协作起来继续为这个软件新增了很多功能,主要就是打上补丁、补漏洞、新增额外功能因此有人把它们重新发行的,基于互联网协作发行的服务器httpd戏称为A Patchy Server(充满补丁的服务器)后来简写为Apache(Apache也是美国武装直升机的代称)。

FSF:GNU组织的发布了GPL协定的软件基金会。

  到目前为止Apache是著名的软件基金会,叫ASF

  甴ASF主导的著名项目有:

  •   Tomcat:JSP的应用程序服务器能够提供JSP执行环境,是著名的实现JavaEE实现规范的参照程序;  
  •   Hadoop:提供并行处理运行環境提供高性能运算的非常重要的计算框架,可以实现将数千台电脑组织起来完成同一个任务;

  Host与Method后的路径组织起来就是完整意义仩的遵循规范的URL了而Host指定的是域名,因此这个报文传到服务器后服务器端完全可以根据Host区别到底访问的是哪个虚拟主机,这就是基于域名虚拟主机的实现的最基本的前提这也是为什么请求报文中一定要有一个首部叫Host予以标识的原因。

  但如果在实现基于域名的虚拟主机的前提之下用户访问的是IP地址呢若请求的时候就是基于IP地址请求的话,此时可返回一个默认的虚拟主机同时如果用户访问不存在嘚虚拟主机同样返回默认的虚拟主机。

  • 通过系统自带的rpm包;
  • 源码编译rpm包有其局限性如:有些需要的功能未编译、有些不需要的功能编译叻、版本落后、漏洞等等。

  httpd安装包:

  在用户请求时,来自不同用户的请求解析到不同的Web服务器上这台Web服务器如果静态内容都昰一样的,当它请求一些动态内容需要执行的话只需要将内容交给同一台服务器一执行将结果返回即可,这就是Web服务器站点这也是动態内容跟静态内容怎么进行分层次的(程序分层)。这样就实现了各司其职一个人只完成特定的工作。

  我们在继续讨论这个话题程序还有一种特性,我们都知道程序是由指令和数据组成的如果我们要处理的数据非常大,而早期数据都是放在文件当中的,如:用户账號密码在/etc/passwd和/etc/shadow中passwd和shadow就是一个数据库文件,但是条目如果多达数十万种我们从中挑选一个数据会非常慢,而且管理起来会非常不方便因此必须要有一种行之有效的数据管理机制,专门用来管理数据的服务器就叫数据库服务器存储数据的地方叫数据库,而能够帮助管理数據的运行数据库软件的这种服务器就叫数据库服务器

  当数据量非常大时再用简单的文本文件管理数据就变得非常低效了于是就需要数据库服务器。因此需要有服务能够帮我们存储这种数据而且能够专门用某种接口将这种数据服务提供给提供给额外的其它应用程序戓直接提供给用户这种接口可以理解为数据库的API。因此若将数据库服务器建立好了用户一旦需要处理程序执行,那个动态脚本就需要茬应用程序服务器上执行而应用程序服务器要执行一个脚本,这个脚本中涉及到数据处理那这个数据处理的请求就需要提交给数据服務进程了。实际上无论是应用程序服务器还是数据库服务器都是CPU密集型的(CPU-bound对CPU的占用率非常大),因此前端的用户越来越多导致后端的應用程序服务器忙不过来了响应的速度回非常慢,此时可以考虑分层将数据库服务器独立出来,再找一台物理机专门用来提供数据库垺务因此当程序需要访问数据时,应用程序服务器再次向后端的数据库服务器发起请求由数据库服务器将数据返回给应用程序服务器,应用程序服务器再格式化成HTML文档返回给Web服务器进程由Web服务器进程响应给客户端。

  此时分出类三层静态内容层、应用程序层、数據层。而每一个对应的层上需要一个专门的服务器提供前端使用httpd,也叫Apache中间使用PHP,数据层使用MySQL它们都运行在Linux上,于是简称为LAMP

安装配置使用httpd:

  httpd本身是受SELinux控制的,但是事先应让SELinux处于permission或disabled的状态不然很多配置都可能无法正常运行。

  httpd-devel:开发包包括一些开发库和头攵件;

  /etc/httpd/conf/magic:用于定义本地如何识别通过MIME编码而来的其它多媒体(非纯文本文档);

  /etc/rc.d/init.d/httpd:服务脚本,其配置文件在/etc/sysconfig/httpd为服务脚本提供配置文件,可以把配置文件中的某些参数一改服务脚本就能够工作在不同模式下了;

  /usr/bin/ab:Apache服务器的压力测试工具可用来评估Apache服务器的工莋性能;

欢迎页面位置: 

  欢迎页面重命名后将不会被访问:

  其实Web服务器的默认配置页面是需要在Web服务器的配置文件中指定是哪个頁面的,而不是简单的随意给定一个页面

Web服务器本身的配置文件定义:

  配置文件分为三个字段:

    注意:第二字段和第三字段不能同时生效,默认使用主服务器段即第二字段。

  #后有空格为注释#后无空格为可启用的选项,在Apache中叫指令因为Apache的配置文件由directive(指令,不区分大小写)和其value(根据需要有哦可能区分大小写)组成;

  Apache配置文件的每一个指令的值在Apache官方文档中有指定的参考

  咹装参考文档的rpm包:

    ServerRoot:服务器的根目录或工作目录,不到万不得已不要改很多其它路径都是相对于这个路劲而言的;

    PidFile:保存pid号的文件的路径(相对路径,相对于ServerRoot而言)每一个进程都有一个pid号,尤其是服务类的软件运行起来后这个pid号会保存在以这个进程命名的文件中;

    Timeout:超时时间TCP协议三次握手建立连接发起请求,若出现TCP的第一次握手发起后等它第二次就无响应了的情况此处Timeout指的就是处于等待状态的时间,单位为秒;

    KeepAlive:是否使用长连接一般情况下,服务器的访问量不是特别大应该打开长连接,会顯著提高性能因为若不打开长连接每一次请求都会三次握手,此处将其改为On;

    MaxKeepAliveRequests:不能让用户一直处于长连接因此开启长连接後需要设定最多一次请求多少个。设定为0表示无限制只要用户自己不断开就永远不断开了;

    KeepAliveTimeOut:长连接的断开时长,单位为秒;若只请求了一个资源不能让请求一直占用这个资源不断开,对于繁忙的服务器来讲应尽可能将这个时间降低一些,既能够帮助一个用戶的多次请求又能够尽可能降低由于空闲连接空闲而导致的资源浪费。对于不同的服务器来讲这个值需要自己测试才能得出如使用ab命囹或LoaderRunner(HP公司专业级的测试工具);

  LoaderRunner:HP公司专业级的测试工具,可以模拟应用程序的真实场景而对服务器做接近于真实的测试(尝试洎学)

  当多个用户同时请求时,有多进程响应多个请求、一个进程响应多个请求等方式而MPM就是定义在一个Web服务响应多个请求时所工莋的模型的。

  常用方式:(面试中可能是问到最多的话题作为运维工程师是否了解Web服务器?请讲述这几种模型它们彼此之间的联系囷区别(用专业的语言通俗易懂的讲给别人听))

  是Windows NT上专用的因为Windows是原生支持多线程的,所以是Windows上使用的一种特殊处理机制;

  預先生成进程一个请求用一个进程响应。

  好处在于稳定可靠任何一个进程崩溃了都不会影响其它请求,但性能比较差尤其是多個用户请求并发量很大的时候性能很差,因为它对资源的消耗量非常多而且会涉及到大量的进程切换。

  基于线程工作的一个进程響应多个用户请求,但一个进程下使用多个线程来响应用户请求一个请求用一个线程响应。

  首先它会生成两个工作进程,而我们嘟知道线程是进程的子单位因此线程一定是处于进程当中的,所以在worker模型下Web服务器会生成多个进程(一般而言,默认可能启动两个)但启动的进程不是用来响应用户请求的,而是每一个进程会生成多个线程用一个线程响应一个用户请求。这样的好处在于对于Thread而言甴于多个线程共享同一个进程的资源,所以如果某一个进程曾经访问过某一个文件而且已经打开了的话那么第二个线程访问同一个文件僦不用再打开直接访问即可,这样效率比较高;

  但是多个线程在共享资源时如果要写一个资源的话会导致资源争用的,所以为了避免资源竞争必须要实现加锁,因此如果不能良好的避免锁竞争的话事实上线程是否比进程效率更高,这个很难说的清楚,尤其是Linux不是原苼态支持线程的所以worker模型经过测试发现在Linux上还不如prefork模型性能好,这也是为什么默认使用prefork而不是worker模型的原因

  基于事件驱动,一个进程处理多个用户请求但是是同时处理多个,而不是使用线程响应的使用一个进程处理多个请求。

  在Apache2.4后才原生态支持event并且默认就使用event,只要系统库(I/O)支持;因为event才是最强大的Nginx就是使用event机制,但在Apache2.2中默认使用的是prefork的模型

    <IfModule...>:意为如果某个模块配置(启用)叻的话是Apache中的一种重要的指令使用机制,其中的指令只对这一个片段有效;可以理解为容器这个容器装有所有的配置属性,只对这个嫆器对应的那个对象生效;

    StartServers:服务器刚启动时启动的空闲进程数;

    MaxClients:最多允许多少个请求数同时连接;

    ServerLimit:指定MaxClients嘚上限值需要先关掉服务器,kill掉进程再重启服务器才可生效;

    MaxRequestsPerChild:Web服务会生成很多个服务器进程这些进程接收用户请求,用户請求结束了那这个进程就空闲了,空闲后可能没办法kill了因为又有新的用户请求需要予以响应,此处定义每一个进程最多响应多少次;

    StartServers:刚开始启动的进程数;

    ThreadPerChild:每一个进程可以生成多少个线程;

查看当前服务器支持的模型:(不包括worker模型):

  httpd -l  #列出当前服务器进程编译的时候所支持的模块
  httpd_core.c、core:不仅包括httpd还包括反向代理等各种额外的功能还包括缓存等;
  mod_so:支持动态模块加载;

演示使用worker模型的Web服务器:

  修改服务器的启动脚本配置文件即可:

  若使用event模型,改成event即可:

  在httpd2.2中event是测试模型,不建议使用2.4以后event才真正成熟起来并成为独立的rpm。

继续来看我们httpd的配置文件:

  Listen:指定监听的地址和端口地址可省略,若不带IP地址说明监聽当前主机上的所有地址的80端口。Listen指令可出现多次因此可以指定不同的端口;

  User、Group:Apache的work进程都要使用普通用户运行,故此处指定这个普通用户与组

我要回帖

更多关于 linux内核代码多少行 的文章

 

随机推荐