Apache服务器学习

1. Apache 架构之模块化设计

         Apache HTTP server非常重要的特性是它采用了模块化设计模型,Apache模块分为静态模型和动态模型两种。静态模型在是编译Apache时指定的,一般是Apache最基本的模块。动态模块可以随时通过Apache Extension Toolapxs)添加到apache中,且配合LoadMoudle指令加载到内存中。这样的模块化设计为Apache用户带来了非常大的灵活性。

    Apache Module是按照Apache的编码规范,给Apapche写的module, 这些module在Apache服务器启动时会加载进来。Apache支持许多特性,大部分通过模块扩展实现,常见的模块包括mod_auth(权限验证)、mod_ssl(SSL和TLS支持)mod_rewrite(URL重写)等

        一些通用的语言也支持以Apache模块的方式与Apache集成。如Perl,Python,Tcl以及PHP等。Apache允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。换句话说,模块可以在Apache的任何一个处理阶段中挂接(Hook)上自己的处理函数,从而参与Apache的请求处理过程。mod_php5.so/php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。PHP来说,当PHP需要在Apache服务器下运行时,一般来说,它可以mod_php5模块的形式集成,此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求, 然后将处理后的结果返回给Apache。

  Apache的安装目录的modules子目录中,就存放了各种模块的*.so文件,例如mod_cgid.so、mod_vhost_alias.so等等。如果需要将phpmodule的形式集成到Apache中,那我们就需要在编译安装phpso文件到该目录中,然后在httpd.conf中使用LoadModule指令加载。比如Apahce启动时其实就加载了mod_php5这个module,然后把请求传递给这个module进行处理,这就是PHP程序的入口。

 

参考资料来源于:

http://www.php-internals.com/book/?p=chapt02/02-02-01-apache-php-module


2.Apache服务器的配置方法之容器和指令

${APACHE_HOME}/conf/httpd.confhttpd最主要的配置文件,搞定了这个配置文件,也就搞定了apache. Apache的配置文件httpd.conf主要有指令和容器两部分组成。其中容器使用<容器名称>开始,以</容器名称>结尾,容器的指令一般仅在容器内有效。

httpd.conf常用的指令和容器有:

1ServerRoot指令

用来配置Apache软件安装的主目录

2Listen指令

用来设置服务器监听的IP以及端口号。

3LoadModulue指令

加载指定的模块,其中的模块文件一般位于ServerRoot目录下的modules目录中。

4LoadFile指令

LoadModule指令有点类似

5ServerAdmin指令

若配置了ServerAdmin指令,那当服务器出现问题后,可以为网名提供一个邮件地址来反馈问题。

6DocumentRoot指令

配置网站的根目录,默认为${APACHE_HOME}/htdocs

7LogFormat指令

该指令用来描述用户日志文件格式

8Include指令

该指令可以将其他的配置文件引入到httpd.conf中来。

9Options指令

为特定的目录设置选项,该选项可以配置的参数有:

All  ——开启除MultiViews之外的所有选项

ExecCGI ——允许执行Options指定目录下的CGI脚本

FollowSymlinks —— 允许Options指定目录下的文件链接到目录外的文件或目录

Indexes —— 如果找不到网站首页文档,那么apache将会把当前目录的所有文件列表传递个client

10Order指令

Orderdeny,allow  —— 先检查deny规则,再检查allow规则,当deny规则和allow规则有冲突时,以allow规则为准。如果denyallow规则均不匹配,那默认规则是允许通过

Order allow,deny —— 先检查allow规则,再检查deny规则,当deny规则和allow规则有冲突时,以deny规则为准。如果denyallow规则均不匹配,那默认规则是拒绝通过

Deny from all ——一条deny规则

Allow from all ——一条allow规则

allow from192.168.0.1 ——一条allow规则

11IfModule容器

指令当指定的容器被加载了,才会执行IfModule容器中配置的指令

12Directory容器

在该容器中的指令,只对指定的目录生效。

13Alias指令

为一个apache中目录取一个别名,便于隐藏服务端程序的目录结构

14ScriptAlias指令

也是为一个目录取一个别名,不过这个目录是一个存放CGI脚本程序的目录。

15DirectoryIndex指令

该指令指定了以DocumentRoot指定的目录中的什么文件作为首页。apache中默认是以index.*为首页的。当然也可以通过该指令来修改这个默认的配置。

16…..

>>>to be continued


3..Apache的“处理器handler

  “处理器”是当文件被调用时,Apache 要执行的动作的内部表示形式。 一般来说,每个文件都有基于其文件类型的隐式处理器。通常的文件会被服务器简单处理,但是某些文件类型会被分别“处理”。

          处理器也可以被基于扩展名或位置来明确配置。它们都很有用,这不仅因为它是优雅的方案,而且还允许类型与处理器关联到文件

          处理器可以编译到服务器中,或者包含在模块中,它们还可以被 Action 指令增加。标准发行版中内置的处理器有:

default-handler:使用 default_handler() 发送文件,它是用来处理静态内容的处理器(核心)。
send-as-is:直接发送,不增加 HTTP 头(mod_asis)。
cgi-script:按 CGI 脚本处理(mod_cgi)。
imap-file:按 imagemap 规则处理(mod_imagemap)。
server-info:取得服务器配置信息(mod_info)。
server-status:取得服务器状态报告(mod_status)。
type-map:用于内容协商,按类型映射文件处理(mod_negotiation)
举例来说: 

Actionadd-footer /cgi-bin/footer.pl  #增加一个add-footer的处理器,对应的处理动作在/cgi-bin/footer.pl中

AddHandleradd-footer .html #为以.html为后缀的资源,设置add-footer来处理。也就是浏览器请求.html资源时,使用add-footer来处理。

或者下面为请求*.php资源的请求,使用phpphp-cgi bin来处理

ScriptAlias/fcgi-bin/ "/usr/local/php/bin/"

AddHandlerphp-fastcgi .php

Action php-fastcgi/fcgi-bin/php-cgi

 

参考资料来源于:

https://httpd.apache.org/docs/2.2/zh-cn/handler.html


4..配置允许Apache在哪些路径下可以执行cgi脚本

配置允许Apache在哪些路径下可以执行cgi脚本,有三种方式:

1)使用ScriptAlias指令

ScriptAlias指令使Apache允许执行一个特定目录中的CGI程序。当客户端请求此特定目录中的资源时,Apache假定其中文件都是CGI程序并试图运行。例如:

ScriptAlias /cgi-bin//usr/local/apache/cgi-bin/

该指令告诉Apache,将浏览器请求/cgi-bin/下的资源路由到/usr/local/apache/cgi-bin/目录,且ApacheCGI协议方式执行这些cgi脚本

2)在Directory容器中使用Options指令

<Directory/usr/local/apache/htdocs/somedir>

Options +ExecCGI

</Directory>

AddHandlercgi-script *.cgi *.pl *.php

Options指令允许Apache执行Directory指定目录下的CGI脚本。AddHandler告诉Apache什么类型的文件是CGI脚本

3).htaccess文件

.htaccess文件是针对目录进行配置的一种方法。Apache在提供一个资源时,会在此资源所在目录中寻找.htaccess文件,如果有,则使其中的指令生效。AllowOverride指令决定了.htaccess文件是否有效,它指定了哪些指令可以出现在其中,或者根本不允许使用。为此,需要在主服务器配置中如此配置:

AllowOverride Options

.htaccess文件中,需要如此配置:

Options +ExecCGI

通过以上的配置以使Apache允许此目录中CGI程序的执行。

 

参考资料来源于:

https://www.centos.bz/2012/06/configure-apache-run-cgi/

你可能感兴趣的:(Apache服务器学习)