Apche Httpd安装与配置

查看系统是否安装了httpd

   rpm -qa | grep httpd  或者 yum list |grep httpd

安装需要的tar包有:

httpd-2.2.22.tar.gz,apr-1.4.6.tar.gz,apr-util-1.5.2.tar.gz,pcre-8.32.tar.gz

安装顺序为apr、apr-util、pcre、httpd。

安装httpd后的使用rpm  -ql  httpd查看基本信息  

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

运行目录:/etc/httpd/

配置文件:/etc/httpd/conf

主配置文件:/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/

默认主页面文件:/var/www/html/index.html

操作httpd服务命令

1. 启动 apachectl -k start

2. 停止 apachectl -k stop

3. 状态 apachectl –k graceful

4. 重启 apachectl –k restart

5.service httpd configtest #测试配置文件有没有语法错误

6.httpd -t #同上

7.httpd -l #当前服务器所使用的模型及开启模块

8.httpd -D DUMP_MODULES #当前服务器支持的模块

9.service httpd reload #重新加载配置文件

10.service httpd restart #重启httpd服务

注意:修改配置文件后要重新加载配置文件,修改服务器监听端口后要重启

  服务

Httpd主配置文件/etc/httpd/conf/httpd.conf详解

1.ServerRoot "/etc/httpd"    

       用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目

       录,在后面使用到的所有相对路径都是想对这个目录下。服务器配置、出错信息,

       日志文件都保存在此目录下。注意:不要在目录末尾加“/

     2.PidFile run/httpd.pid

       服务器用于记录启动时进程ID的文件。记录httpd守护进程的pid号码,这是系统

       识别一个进程的方法,系统中httpd进程可以有多个,但这个PID对应的进程是其

       他的父进程

     3.Timeout 60

       服务器与客户端断开的时间。如果用户端超过60秒还没连上server,或server超过

        60秒还没传送信息给用户端,即断线。

     4.KeepAlive Off

      是否持续连接(因为每次连接都得三次握手,如果是访问量不大,建议打开此项,

       如果网站访问量比较大关闭此项比较好),修改为:KeepAlive On 表示允许程序

        性联机

     5.MaxKeepAliveRequests 100

       表示一个连接的最大请求数,设置为0表示无限制,建议设置较高的值,以获得最

       好的性能。

        MinSpareServer 5
      ·MaxSpareServers 10
        MinSpareServer 5表示最少会有5个闲置的处理程序,如果实际的数目少于此数目,

         则会增加处理程序。MaxSpareServers 10表示最大的闲置处理程序数目,如果你的

         网站需求量很大,可以将此数目设大一些,大不要随便将此数目设得太大。

         StartServers 5
         启动时Server的数目
         MaxClients 150
         限制同时间最大的连线数目,当然不能设得太小,一旦达到此数目,就无法再增

         加用户端
       ·MaxRequestPerChild 0
         限制子处理程序结果前的要求数目,0表示不限制

     6.KeepAliveTimeout 15

      同一连接同一客户端两个请求之间的等待时间。

     7.<IfModule prefork.c>

              StartServers       8

              MinSpareServers    5

              MaxSpareServers   20

              ServerLimit      256

              MaxClients       256

              MaxRequestsPerChild  4000

         </IfModule>

         系统默认的模块,表示为每个访问启动一个进程(即当有多个连接公用一个

           进程的时候,在同一时刻只能有一个获得服务)。
           StartServer开始服务时启动8个进程,最小空闲5个进程,最多空闲20个进程。
           MaxClient限制同一时刻客户端的最大连接请求数量超过的要进入等候队列。
           MaxRequestsPerChild每个进程生存期内允许服务的最大请求数量,0表示永不结

            

        8.<IfModule worker.c>

                 StartServers         4

                 MaxClients         300

                 MinSpareThreads     25

                 MaxSpareThreads     75 

                 ThreadsPerChild     25

                 MaxRequestsPerChild  0

           </IfModule>

           为Apache配置线程访问,即每对WEB服务访问启动一个线程,这样对内存占

            用率比较小。
            ServerLimit服务器允许配置进程数的上限。
            ThreadLimit每个子进程可能配置的线程上限
            StartServers启动两个httpd进程,
            MaxClients同时最多能发起250个访问,超过的要进入队列等待,其大小有 

                                         ServerLimit和ThreadsPerChild的乘积决定
            ThreadsPerChild每个子进程生存期间常驻执行线程数,子线程建立之后将不再

                                         增加
            MaxRequestsPerChild每个进程启动的最大线程数,如达到限制数时进程将结

                                         束,如置为0则子线程永不结束

          9.#Listen 12.34.56.78:80

             Listen 80

             允许将Apche绑定到指定的IP和端口,监听的端口,如有多块网卡,

               默认监听所有网卡参见<VirtualHost>

           10.150-221行为启动时加载的模块

          11.Include conf.d/*.conf  加载的配置文件

          12. User  apache   Group apache  启动服务后转换的身份,在启动服

                  务时通常以root身份,然后转换身份,这样增加系统安全。

          13.ServerAdmin root@localhost 管理员邮箱

          14.ServerName www.example.com:80  

           默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果

             解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定

             IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候

             提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could 

              not reliably determine the server's fully qualified domain name, using 

              127.0.0.1forServerName,解决方法就是启动该项把www.example.com:80修改

              为自己的域名或者直接修改为localhost
              注: 主机名不能随便指定。必须是你的机器有效的DNS名称。

                 否则无法正常工作。
                 如果不能理解,倾向你的网络管理员询问。
                 如果你的主机没有注册DNS名,可在此输入IP地址。
                 此时必须用IP地址来访问。(如, http://123.45.67.89/)
                 这样扔可以完成重新定向的工作。
                 127.0.0.1 是TCP/IP的本地环路地址, 通常命名为localhost.
                 机器默认此地置为本身。 如果只是使用Apache来进行本地测试和开发,
                 可使用127.0.0.1 作为服务器名.

          15.UseCanonicalName Off

             如果客户端提供了主机名和端口,Apache将会使用客户端提供的这些信息

               来构建自引用URL。这些值与用于实现基于域名的虚拟主机的值相同,并

               且对于同样的客户端可用。CGI变量SERVER_NAME和SERVER_PORT

               也会由客户端提供的值来构建

           16.DocumentRoot "/var/www/html"

              网页文件存放的目录

           17.<Directory />

                   Options FollowSymLinks

                   AllowOverride None

              </Directory>

                对根目录的一个权限的设置

           18.<Directory "/var/www/html">

       Options Indexes FollowSymLinks  

       AllowOverride None #此项控制目录中哪些.htaccess文件可覆盖。

       Order allow,deny #控制哪些用户可从此服务器获得资料。

       Allow from all

              </Directory>

      对/var/www/html目录的一个权限的设置,这个地址必须和DcoumentRoot保持一致。options中Indexes表示当网页不存在的时候允许索引显示目录中的文件,FollowSymLinks是否允许访问符号链接文件。有的选项有ExecCGI表是否使用CGI,如Options Includes ExecCGI FollowSymLinks表示允许服务器执行CGI及SSI,禁止列出目录。SymLinksOwnerMatch表示当符号链接的文件和目标文件为同一用户拥有时才允许访问。AllowOverrideNone表示不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件,修改为:AllowOverride All 表示允许.htaccess。Order对页面的访问控制顺序后面的一项是默认选项,如allow,deny则默认是deny,Allowfromall表示允许所有的用户,通过和上一项结合可以控制对网站的访问控制


19.<IfModule mod_userdir.c>

         UserDir disabled

   </IfModule>

  是否允许用户访问其家目录,默认是不允许

            20.#<Directory /home/*/public_html>

                  # AllowOverride FileInfo AuthConfig Limit

                  # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

                  #    <Limit GET POST OPTIONS>

                  #        Order allow,deny

                  #        Allow from all

                  #    </Limit>

                  #    <LimitExcept GET POST OPTIONS>

                  #        Order deny,allow

                  #        Deny from all

                  #    </LimitExcept>

               #</Directory>

如果允许访问用户的家目录中的网页文件,则取消以上注释,并对其中进

 行修改

            22.DirectoryIndex index.html index.html.var

  指定所要访问的主页的默认主页名字,默认首页文件名为index.html

            23.AccessFileName .htaccess

                定义每个目录下的访问控制文件名,缺省为.htaccess

            24.<Files ~ "^\.ht">

                   Order allow,deny

                    Deny from all

                    Satisfy All

               </Files>

                 控制不让web上的用户来查看.htpasswd和.htaccess这两个文件

      25.TypesConfig /etc/mime.types

           用于设置保存有不同MIME类型数据的文件名

       26.DefaultType text/plain

           默认的网页的类型

      27.<IfModule mod_mime_magic.c>

            #   MIMEMagicFile /usr/share/magic.mime

                MIMEMagicFile conf/magic

        </IfModule>

        指定判断文件真实MIME类型功能的模块

      28.HostnameLookups Off 

        当打开此项功能时,在记录日志的时候同时记录主机名,这需要服务器来反

          向解析域名,增加了服务器的负载,通常不建议开启

      29.#EnableMMAP off

        是否允许内存映射:如果httpd在传送过程中需要读取一个文件的内容,它

          是否可以使用内存映射。如果为on表示如果操作系统支持的话,将使用内

          存映射。在一些多核处理器的系统上,这可能会降低性能,如果在挂载了

          NFS的DocumentRoot上如果开启此项功能,可能造成因为分段而造成httpd

          崩溃

      30.#EnableSendfile off

        这个指令控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送

          到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比

          如发送一个静态的文件内容),如果操作系统支持,Apache将使用sendfile

          将文件内容直接发送到客户端而并不读取文件  

      31.ErrorLog logs/error_log     

        错误日志存放的位置

      32.LogLevel warn

       Apache日志的级别

      33.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


         定义了日志的格式,并用不同的代号表示

      34.#CustomLog logs/referer_log referer

         #CustomLog logs/agent_log agent

        说明日志记录的位置,这里面使用了相对路径,所以ServerRoot需要指出,日

        志位置就存放在/etc/httpd/logs

      35.ServerSignature On

       定义当客户请求的网页不存在,或者错误的时候是否提示apache的版本的一 

         些信息

       36.Alias /icons/ "/var/www/icons/"

      定义一些不在DocumentRoot下的文件,而可以将其映射到网页根目录中,这

        也是访问其他目录的一种方法,但在声明的时候切记目录后面加”/”

       37.<Directory "/var/www/icons">

                 Options Indexes MultiViews FollowSymLinks

                 AllowOverride None

                 Order allow,deny

                 Allow from all

          </Directory>

          定义对/var/www/icons/的权限,修改为 Options MultiViews FollowSymLinks

          表示不在浏览器上显示树状目录结构

      38.<IfModule mod_dav_fs.c>

             # Location of the WebDAV lock database.

            DAVLockDB /var/lib/dav/lockdb

        </IfModule>

        对mod_dav_fs.c模块儿的管理

    39.ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

       对CGI模块儿的的别名,与Alias相似。

    40.<Directory "/var/www/cgi-bin">

             AllowOverride None

             Options None

             Order allow,deny

             Allow from all

     </Directory>

     对/var/www/cgi-bin文件夹的管理,方法同上

关于cgi执行脚本的配置,这里有两种设置CGI脚本的方法。第一、CGI的脚本文件以.cgi为扩展名;第二、设置脚本可执行目录。但是这两种方法都需要将要执行的文件设置为711,才可以被执行。
第一种方法,我们需要在access.conf文件种将你要发行的目录设置为Option ExecCGI All,在srm.conf资源配置文件中,加上下列一句:
AddHandle cgi-script .cgi
这样在所有的目录种只要你的文件是.cgi为扩展名的,且文件访问权限为711的,无论给文件在你发行目录的任何一个地方都可以做为CGI被Apache服务器调用。这种方法一般没有第二种方法安全。
第二种方法,是将一个目录作为一个可执行目录,将所有的cgi文件都放在其中,这里就不一定非得是以.cgi为扩展名得文件可以执行,而是只要有711属性的文件就可以被执行,而且其它的非可执行文件都被禁止访问只要在/home/httpd/cgi-bin/目录中的可执行文件都可以被Web服务器调用,而其它的非可执行文件将被拒绝访问。

       41.# Redirect old-URI new-URL

Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档改变位置之后,又需要能够使用老URL能访问到原网页

       42.IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable 

            Charset=UTF-8 
          AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
           ... 
          IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件,如果目录中不存在索引文件,并且服务器有许可显示目录文件列表的时候,就会显示这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前这些参数。如果使用了IndexOptionsFancyIndexing选项,可以让服务器针对不同的文件引用不同的图标。如果没有就使用DefaultIcon定义缺省图标。同样,使用AddDescription可以为不同类型的文档介入描述

     43.AddLanguage ca .ca 
        ...... 
        AddLanguage zh-TW .zh-tw

          添加语言

      44 .LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt 

         pt-BR ru sv zh-CN zh-TW

          Apache支持的语言

      45. AddDefaultCharset UTF-8

          默认支持的语言

      46. #AddType application/x-tar .tgz

          支持的应用如果想支持对php的解析添加这样一行

      47.#AddEncoding x-compress .Z 
         #AddEncoding x-gzip .gz .tgz

           支持对以.Z和.gz.tgz结尾的文件

       48.AddType application/x-compress .Z 
         AddType application/x-gzip .gz .tgz

            添加对上述两种文件的应用

       49.#AddHandler cgi-script .cgi

             修改为:AddHandler cgi-script .cgi .pl 表示允许扩展名为.pl的CGI脚本运行

       50.AddType text/html .shtml 
          AddOutputFilter INCLUDES .shtml

             添加动态处理类型为server-parsed由服务器预先分析网页内的标记,将标记

              改为正确的HTML标识

         51#ErrorDocument 404 /missing.html

               当服务器出现404错误的时候,返回missing.html页面

          52. Alias /error/ "/var/www/error/"

                赋值别名

           53.<IfModule mod_negotiation.c>

<IfModule mod_include.c>

    <Directory "/var/www/error">

        AllowOverride None

        Options IncludesNoExec

        AddOutputFilter Includes html

        AddHandler type-map var

        Order allow,deny

        Allow from all

        LanguagePriority en es de fr

        ForceLanguagePriority Prefer Fallback

    </Directory>

</IfModule>

</IfModule>

           对/var/www/error网页的权限及操作


         54.BrowserMatch "Mozilla/2" nokeepalive 
          BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 
          BrowserMatch "RealPlayer 4\.0" force-response-1.0 
          BrowserMatch "Java/1\.0" force-response-1.0 
          BrowserMatch "JDK/1\.0" force-response-1.0 

          设置特殊的参数,以保证对老版本浏览器的兼容,并支持新浏览器的特性


  Virtual Hosts

       55.#NameVirtualHost *:80

         如果启用虚拟主机的话,必须将前面的注释去掉,而且,第二部分的内容都可以

         出现在每个虚拟主机部分。
         # VirtualHost example: 

#<VirtualHost *:80>

#    ServerAdmin webmaster@dummy-host.example.com

#    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>