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以及端口号。如果是Listen ip:port,表示apache只监听指定的ip:port;如果是Listen port 或 Listen 0.0.0.0:port,表示Apache会监听该服务器上的所有ip的port端口。

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中目录取一个别名,便于隐藏服务端程序的目录结构。例如Alias /nagios "/root/prod/nagios-4.2.4/share",那么当我们请求的url是http://example-domain.com/nagios时,那么会去服务器/root/prod/nagios-4.2.4/share中寻找缺省index页面(注意不是虚机哦)。那如果请求url是http://example-domain.com/nagios/history.html那么会直接请求/root/prod/nagios-4.2.4/share/history.html页面。

14ScriptAlias指令

也是为一个目录取一个别名,不过这个目录是一个存放CGI脚本程序的目录。类似于Alias,只是真实目录中存放的是CGI脚本。例如ScriptAlias /nagios/cgi-bin "/root/prod/nagios-4.2.4/sbin",若请求url是http://192.168.65.239:8000/nagios/cgi-bin/trends.cgi,那么apache会通过CGI协议执行/root/prod/nagios-4.2.4/sbin/trends.cgi这个CGI程序。

15DirectoryIndex指令

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

(16)ServerName指令

在Apache的配置中可能在主server配置段,或虚拟主机端中出现ServerName指令。
在主Server配置段中出现ServerName,主要是用来给Apache构造URL用的。比如Apache对一个请求进行302跳转,若UseCanonicalName配置为Off,Apache会用浏览器请求过来的servername和端口来构造url;若UseCanonicalName配置为On,那么就会依据主server段中的ServerName指令指定的servername来构造。
在虚拟主机段出现ServerName,主要是用来区别虚拟主机的,HTTP请求头中Host字段必须与ServerName指令配置匹配的虚拟主机才可以处理请求。

17…..

>>>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)
举例来说: 

Action add-footer /cgi-bin/footer.pl  #增加一个add-footer的处理器,对应的处理动作在/cgi-bin/footer.pl中
AddHandler add-footer .html  #为以.html为后缀的资源,设置add-footer来处理。也就是浏览器请求.html资源时,使用add-footer来处理

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

ScriptAlias /fcgi-bin/ "/usr/local/php/bin/"
AddHandler php-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>
AddHandler cgi-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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值