Apache的主配置文件详解

HTTP服务---> http://httpd.apache.org/(官方网站)

httpd  service :纯粹的web服务器,同时开源(不是GPL)。

     特性:1、在进程特性上通常是事先创建进程,

           2、按需维持适当的进程(多进程多线程),维持保留一定数目的进程。

           3、模块化设计,核心只具备最基本的功能,所以内核比较小。各种功能都能通过模块添加。

           4、支持运行时配置,支持单独编译模块

           5、支持多种方式的虚拟主机配置

           6、支持https协议,(使用一个模块来实现的mod_ssl

           7、支持用户认证

           8、基于IP或主机名的访问控制机制(ACL

           9、支持URL重写、条件式重写

套接字:一个IP地址和一个端口号组成

虚拟主机:一台物理服务器,web程序只有一个,却可以服务不同的站点。

    1、基于IP的虚拟主机,不同的IP提供不同的主机

    2、基于端口的虚拟主机,不同的端口提供不同的站点

    3、基于域名的虚拟主机,IP一样,端口一样,但是由于其站点访问的时候DNS解析的那个主机名不同,却也可以打开不同的虚拟主机

IP+端口 可以组成一个套接字,而一个套接字只能为一个服务去提供服务的!

redhat安装方法:

 1、使用系统自带的rpm

 2、源码编译(自定义功能)

https是由seLinux控制的,事先禁用它---->查看selinux状态getenforce(让他处于permssive/disabled)

                 使用命令setenforce  0  将其禁用,当前生效

                 编辑/etc/selinux /config 改大写的SELINUX那一行,改为permssive.

安装包httpd:

    1、执行进程服务在/usr/sbin/httpd事先创建新进程并接受用户请求

     一但启动起来进程,系统中会有好多httpd进程,在众多进程中

     有一个httpd进程的属主属组都是root,负责创建空闲进程,或者销毁多余的空闲进程--->master  process

     其余httpd进程的属主属组都是Apache,工作进程----worker  process

    2、Apache的服务脚本在/etc/rc.d/init.d/httpd

    3、服务启动起来占据的TCP80端口,(基于ssl的占据443/tcp端口)

    4、基于rpm包编译安装的httpd工作的根目录在/etc/httpd

            /etc/httpd/conf :主配置文件目录

               httpd.conf :主配置文件

            /etc/httpd/conf.d/*.conf 的配置文件也是主配置文件的组成部分。

            /etc/httpd/moudules 这个目录下有各种模块的链接文件

            /etc/httpd/logs链接 ---->/var/log/httpd :日志文件

                 日志文件有两类,访问日志(access_log)错误日志(error_log

            /var/www/  主要有两个目录,存放Web主页面

                      html :提供静态页面所在路径

                      cgi_bin:提供动态内容所使用的路径

问题httpd或web并不处理任何动态内容,那么它是如何处理动态内容???

通过某种协议调用额外的其他程序来运行这个程序,并将结果取回来以后,响应给客户端。

     cgi(通用网关接口):让web服务器能够跟额外的应用程序通信的一种机制

          能够让你的web服务器必要的时候调用一个额外的应用程序来处理动态内容。

LAMP=Apache+PHP+MySQL

动态网站:

              客户端动态:我们把程序(这个程序是源码,源文件)放在网站上,先被用户下载到本地,在用户本地执行。

              服务器动态:当用户访问一个动态数据,而服务器中放的是数据的脚本文件,服务器不能直接给用户脚本文件,而是通过CGI调用服务

                          器中的合适的解释器,把这个脚本运行起来,把运行的结果返回给用户。

 

/etc/httpd/conf.d/ welcome.conf :这是http服务的一个欢迎界面,若没有任何网络文件,就显示这个欢迎界面.改名之后就可以了.

配置文件由参数和指令组成!

指令不区分字符大小写,参数则需要!

httpd主配置文件注意!主服务器和虚拟主机不能同时运行。默认使用主服务器配置!

使用 grep  "Section"  http.conf  --->查看配置文件中分为几段

第一段:### Section 1: Global Environment  --->全局环境配置

第二段:### Section 2: 'Main' server configuration   --->主服务器配置

第三段:### Section 3: Virtual Hosts   --->虚拟主机

第1个选项:ServerTokens  [OS] :输出操作版本信息

             Servertokens major :只显示主版本号

             Minor :+显示次本号

             Min :+显示次尾号

             Prod :显示软件本身

             OS :连操作系统版本也会显示

             Full :全部信息显示

注意!用yum仓库装这个包也会给你显示参数指令指南  yum -y install httpd-manual。在/etc/httpd/conf.d/manual,con配置文件,只需在访问路径下加上manual这个,重启一下服务就OK。

第一段全局设置

第2个选项:ServerRoot "/etc/httpd" :服务器的工作目录在这里(根目录),不到万不得已不要改这里,因为有很多文件是跟这个路径相对产生的

第3个选项:PidFile  run/httpd.pid :文件的PID号。run是相对路径,生成的文件是相对于这个路径而言的!

第4个选项:Timeout  60 :针对于tcp的三次握手,超时时间!

第5个选项:KeepAlive Off :是否使用长连接

第6个选项:MaxKeepAliveRequests  100 :长连接限制,每个用户只能持续请求一百次。设定为0是无限制。

第7个选项:KeepAliveTimeout  15 :用户使用长连接请求间隔时间。用户请求间隔时间不能超过15秒,不能占着茅坑不拉屎!

MPM:多处理模块,用于定义Apache在响应多个用户请求时我所工作的模型的!

           prefork MPM:预先生成进程(一个请求用一个进程响应)稳定性好!(最多)

           worker MPM:基于线程来工作的(一个请求用一个线程响应.启动多个进程,每个进程生成多个线程)

           event MPM :基于事件的驱动(一个进程处理多个请求)

 改变使用模型:/etc/sysconfig/httpd中有一个HTTPD=。。。启动这一项是启用。。。。模型

第8个选项:  <IfModule prefork.c> :若启用了prefork模块

              StartServers       8 :服务器刚一启动就生成多少个进程

              MinSpareServers    5 :最少空闲的进程

              MaxSpareServers   20 :最大空闲的进程

              ServerLimit      256 :为MaxClients指定硬限制,要想更改必须先关闭服务在更改两个上限数

              MaxClients       256 :最大客户端数,最多多少个客户端同时进行请求

              MaxRequestsPerChild  4000 :一个子进程最多响应多少个用户请求,一旦达到这么多次了,无论如何就得杀死这个子进程

              </IfModule>

 

第9个选项:<IfModule worker.c>

              StartServers         4 :默认启动多少个进程

              MaxClients         300 :最大客户端数

              MinSpareThreads     25 :最小空闲线程

              MaxSpareThreads     75 : 最大空闲线程

              ThreadsPerChild     25 :一个进程最多生成多少个线程

              MaxRequestsPerChild  0 :一个子进程最多响应多少个用户请求,0为不做限定。

              </IfModule>

 

第10个选项:#Listen 12.34.56.78:80 :指定监听那个主机上的IP地址。

               Listen 80 :指定监听的端口。可同时监听多个端口,再写一行Listen 8080。

第11个选项:# Example:

              # LoadModule foo_module modules/mod_foo.so :httpd模块化设计,装载模块的

              #   关键字        模块名称       相对路径

               LoadModule auth_basic_module modules/mod_auth_basic.so

               LoadModule auth_digest_module modules/mod_auth_digest.so

               LoadModule authn_file_module modules/mod_authn_file.so

               LoadModule authn_alias_module modules/mod_authn_alias.so

               。。。。。。

第12个选项:Include conf.d/*.conf  主配置文件的组成部分

第13个选项:User apache :指定属主

             Group apache :指定属组

第二段主服务器设置

第1个选项:ServerAdmin  root@localhost :服务器管理员

第2个选项:#ServerName  www.example.com:80 :主机名,未开启。

第3个选项:UseCanonicalName  Off :正式名称

第4个选项:DocumentRoot  "/var/www/html" :文档根目录。

第5个选项:# features. 

             <Directory />

             Options FollowSymLinks

             AllowOverride None

             </Directory>

第6-11选项:定义文档根目录限制,用一个容器<Directory> </Directory >

        <Directory "/var/www/html"> :用一个容器<Directory> </Directory >来限制文档根目录访问限制

        Options  [Indexes] [FollowSymLinks] :options 用于定义DocumentRoot  "/var/www/html"这个目录下的所有网络文件。

                                     (Indexes:允许索引目录,必须去掉!把你文档根目录下的所有目录列举出来让你自己选。

                                      None:不支持任何选项

                                      FollowSymLinks  :允许访问符号链接指向的源文件。必须去掉

                                      ExecCGI :允许运行CGI脚本

                                     MultiViews :内容协商的一种机制,根据你的客户端来源的语言和文字来判定我应该显示哪一种网页给你        AllowOverride  None (不生效):是否生效/覆盖底下这两项(服务器的访问控制列表)

                      Authconfig :需要基于一个文件的用户的用户名和密码来基于认证之后才可以访问,这个文件需要自己建立。

                      Limit :

                      FileInfo :

        Order allow,deny :[allow允许/deny拒绝]用于定义基于主机的访问控制功能的。实现IP、主机名、网络地址定义访问控制机制。

        Allow from all :允许所有人访问[IP(可以只写一部分主机名   域名 ]

        </Directory>

使用httpd  -t :来测试配置文件语法真确性的!

实验:AllowOverride 设为Authconfig 并自己创建一些选项。

基于用户来限制访问

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic

AuthName   "sun" :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :认证用户时,认证用户的文件是哪个(验证文件,自己创建)

Require  user  sun  :只允许sun这个用户才可以访问

Require  valid-user :这个文件中的所有用户都能登陆

使用命令来建立这个文件htpasswd,  格式htpasswd   这个文件的路径     要添加的用户

                  -c:第一次创建这个文件时要使用。若曾经有这个文件还是用-c这个选项会把以前的数据覆盖掉!

                       注意!添加第二个用户时不需要加-c这个选项了

                  -m:用户的密码是以md5的方式加密存放的

                  -D:删除用户,从添加进的用户删除用户!格式:htpasswd  -D  认证文件的路径  用户名

   使用httpd -t 检测一下,重启服务就可以了!

基于组来限制访问

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic

AuthName  "sun"  :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :创建认证用户的验证文件(验证文件,自己创建)

AuthGroupFile  /etc/httpd/conf/htgroup : 创建认证用户组的验证文件

Require  group  sun  :只允许sun这个组中的用户才可以访问

自己在这路径下创建一个文件,文件格式:组名:用户1   用户2   用户3

注意!你添加进组的用户必须已经在用户密码认证文件中。

第11-14选项:

<IfModule  mod_userdir.c> :针对于mod_userdir.c这个模块(httpd -l/httpd -M查看支持的模块)

                          是否支持用户在自己的家目录中建立各种的网络文件。用http://192.168.2.112/~sun/网络文件这种格式来访问。

UserDir disabled :默认是不予许的,若想开启这种模式只需要注释掉这一行。

# UserDir  public_html :开启这一行就可以了,明确指定在账户的家目录下哪一个目录下放网页文件,默认是public_html这个目录。

</IfModule>:这个功能在下面有被注释掉的一些选项!

实验:建立一个自己家目录的网页文件

1、在自己加目录创建一个文件夹,默认文件夹是public_html,在里面添加网页文件(index.html)。

2、返回root用户,添加权限chmod  o+x /家目录中创建的文件夹

3、访问http://192.168.2.112/~sun/ ,别忘了开启选项和重启服务!

第15选项:

DirectoryIndex  index.html index.html.var :用于定义若我们访问主页时不指定访问那个页面,默认转到index.htmlindex.html.var这个文件的页面。

第16选项:

AccessFileName  .htaccess :定义每个目录访问限制,使Apache服务器效率极低!这些限制是自上而下继承的

第17-20选项:

<Files ~ "^\.ht"> :~用于对后面的文件做模式匹配,定义私密文件不被别人窃取到。

 Order allow,deny :先允许后拒绝

 Deny from all :拒绝所有人

 Satisfy All

</Files>

第21选项TypesConfig  /etc/mime.types :多用途互联网邮件扩展。用于定义我们的http协议可以传输多媒体文档。定义了支持哪些媒体文件

第22选项:DefaultType  text/plain :默认类型为文本下的纯文本信息。(事先没有给支持的类型文件)

第23-26选项:

<IfModule mod_mime_magic.c> :判断,如果你的模块mod_mime_magic.c存在的话。

#   MIMEMagicFile /usr/share/magic.mime

    MIMEMagicFile conf/magic

</IfModule>

第27选项:HostnameLookups  Off :在访问日志里面是否记录主机名(若开启,每个用户的IP地址都会解析为主机名,浪费资源)

第28选项:ErrorLog logs  /error_log :错误日志

第29选项:LogLevel  warn  :日志级别

第30-34选项:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined :访问日志格式,(combined 混合模式)

LogFormat "%h %l %u %t \"%r\" %>s %b" common  :(common通用模式)

LogFormat "%{Referer}i -> %U" referer :(referer 只记录客户端访问来源)

LogFormat "%{User-agent}i" agent :(agent 只记录客户端浏览器类型)

第35选项:CustomLog  logs/access_log  combined :用来定义访问日志的日志文件及其访问类型

第36选项:ServerSignature  On

第37-43选项:

Alias  /icons/  "/var/www/icons/" :路径别名,一个路径映射到另外一个位置的别名!

      别名       映射的路径      可以自己创建!!!

<Directory "/var/www/icons">

    Options Indexes MultiViews FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

 

第三段虚拟主机

要想使用虚拟主机,必须先取消中心主机!(只需要注释中心主机的Document Root就行)

虚拟主机:能够在一台物理主机上虚拟出多个同时运行的站点!

我们运行一个Apache服务,当这个Apache进程运行起来以后,可以服务于多个站点。

 

虚拟主机:服务于多个不同的站点

           基于IP:每一个主机使用不同的IP地址,端口相同。

           基于端口:IP地址相同,端口不同。(网页间跳转或公司内部使用)外部不能使用

           基于域名:IP地址和端口号相同,但主机名不同

Apache2.2中,需要一条命令来启用基于主机名的虚拟主机(命令:NameVirtualHost

Apache2.4中,三种不同功能名称的虚拟主机不再需要命令,各自定义就可以

问题:为多个站点定义时需要具备哪些东西?

1、位于不同的目录(Document  Root

2、主机名不同(Server  Name),基于主机名

3、用一个容器来定义某个站点需要认证,有某个站点不需要认证。

        <directory"目录路径">   --->为站点定义一个容器,在这个容器中设定访问限制

            option      --->定义这个目录下的所有网络文件

            allowoverride   --->以用户名的方式限制

       </directory>   --->结束

4、虚拟主机还可以使用路径别名、服务器别名

 

<directory"目录路径">   </directory>  用于封装定义用户访问本地文件系统下的文件时应该具有什么样的属性。

  <location"文件路径">   用于定义URL,使用相对路径,相对于Document  Root而言的!

  script alias :定义允许执行CGI脚本的目录

  </location>  

 

 

虚拟主机的定义 :

使用一个容器来定义某一个特定的虚拟主机

<virtual  HOST>

< /virtual  host>

这个HOST(主机名)该怎么写?

  基于IP: 不同IP:同一端口

基于端口:同一IP:不同端口

基于主机名:IP:端口 ,server name 不同主机名


基于IP的虚拟主机

1、首先将主配置文件中的中心主机配置选项中的文件根目录失效!

    #DocumentRoot "/var/www/html"在配置文件前面添加#号

    ServerName  www.example.com:80  顺便把主机名那一选项打开

2、你可在主配置文件中添加虚拟配置,也可以新建一个文件(这里我选的是重新再conf.d这个目录下新建一个文件)。

      新建文件名为virtual.conf,在里面添加这么几行

<VirtualHost 192.168.178.133:80>  --->添加一个虚拟主机的容器,里面有  IP:端口号

ServerName www.sun2.com    --->这个网页的主机名称(域名)

DocumentRoot "/www/sun2"   --->文件根目录在。。。

</VirtualHost>  --->结束

 

<VirtualHost 192.168.178.132:80>

ServerName www.sun1.com

DocumentRoot "/www/sun1"

</VirtualHost>

3、创建这个虚拟主机的文件根目录

     mkdir  -pv  /www/{sun1,sun2}

4、在每个文件根目录中添加网页文件!然后重启服务

!注意:若网页提示权限不够(禁止),那就关闭防火墙

基于端口的虚拟主机

与基于IP的虚拟主机配置一样,只是要IP相同,端口改一下!

别忘了在主配置文件中添加监听端口: Listen 81

基于主机名(域名)的虚拟主机

首先开启主配置文件中的#NameVirtualHost *:80这一栏,开启虚拟主机的基于域名配置文件。

或者自己在配置文件中写上NameVirtualHost  IP地址:端口

<virtualhost 192.168.178.132:81>

servername  www.sun1.com

DocumentRoot   "/www/sun1"

</virtualhost>

 

<virtualhost 192.168.178.132:80>

servername  www.sun2.com

DocumentRoot   "/www/sun2"

</virtualhost>

 

IP地址和端口号相同,域名不一样。要配置成功必须配置dns服务!

dns服务要使用静态的。

 

用户限制

<Directory "/ wwwl"> :用一个容器<Directory> </Directory >来限制文档根目录访问限制

AllowOverride  Authconfig  设置为基于一个文件的用户账户为访问限制

AuthType  Basic  :设为基本认证(basic

AuthName   "sun" :在用户认证时给他显示一个名字

AuthUserfile  /etc/httpd/conf/htpasswd :认证用户时,认证用户的文件是哪个(验证文件,自己创建)

Require  user  sun  :只允许sun这个用户才可以访问

Require  valid-user :这个文件中的所有用户都能登陆

</Directory>

 

设置各自的日志文件

1、配置自己的配置文件,设置访问日志路径

<VirtualHost 192.168.178.133:80>

ServerName www.sun2.com   

DocumentRoot "/www/sun2"  

CustomLog   /var/log/httpd/目录名/access_log   combined  --->设置你自己的访问日志文件位置,格式为combined

</VirtualHost> 

2、创建日志文件

      mkdir -pv  /var/log/httpd/目录名  只创建目录

      chown  apache:apache  目录名  目录名。。。  改为Apache属主属组!

      然后重启服务,系统自动给你创建日志文件!


猜你喜欢

转载自blog.51cto.com/10784316/2425143
今日推荐