apache server 介绍和安装配置

概念介绍

1、apache server 是一个流行的http服务器。对应的可执行软件是httpd 和 apachectl。httpd提供http服务,apachectl控制httpd的执行。

2、CGI 即 Common Gateway Interface, 是apache server 上程序和http交互的协议,在多种语言上都有实现,所以你在apache服务器上可以运行perl、php、python等脚本。apache默认提供的是文旦内容,即访问服务上的资源时,得到的是一个纯文本文档。CGI让程序能够提供动态网页内容。

3、FCGI, Fast CGI ,是CGI的改进版,性能比CGI好。

4、apache可以加载动态模块,FCGI就是用于给apache加载的一个动态库。apache要加载哪些模块,是在配置文件中设置的。

5、在apache上使用CGI运行脚本的时候,需要给脚本文件设置可执行权限,否则被认为是服务器异常,http返回500状态码,日志中输出: Permission denied: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。

6、APR 、 APR-UTIL 安装运行apache软件需要的环境

7、Perl 一个脚本语言

环境搭建

1、安装apache server

扫描二维码关注公众号,回复: 7016354 查看本文章

官网: http://www.apache.org/ 

进入download页下载压缩文件。解压后是无法直接安装的。需要下载 APR 、 APR-UTIL 并解压到apache的srclib目录下。文件层级如下

 

之后执行下面的命令,把其中的PREFIX替换成安装目录

    $ ./configure --prefix=PREFIX
     $ make
     $ make install
     $ sudo PREFIX/bin/apachectl start

  

安装后的apache服务默认监听的端口是80,监听这个端口需要使用root权限。你可以在config/httpd.config文件中修改要监听的端口:Listen 8081。

apachectl start启动服务后,访问 http://localhost:8081/ 可以看到 It Works页面,说明apache 正常启动了。此时apache只提供文档内容,还没有配置CGI交互能力。

2、apache基本配置

apache的配置文件使用xml格式,默认配置文件是config/httpd.config。

apache按目录进行配置。<Directory> 标签用来配置某一个目录的信息。下面的配置表示设置/usr/local/bin/apache/htdocs目录的访问权限对所有ip公开(Require all granted ,2.4版本以前使用Allow指令设置,2.4以后的版本不能使用Allow 指令),表示设置该目录的子目录不可以重写配置(AllowOverride None),表示该目录下的可以进行的操作有显示列表(Indexes),访问连接文件(FollowSymLinks)。

<Directory "/usr/local/bin/apache/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

  

apache默认输出的日志很少,你需要在http.config中把LogLevel修改为下面的内容来打印更多的信息。如果不修改,下面提到的一些日志你是看不到的。

LogLevel debug

  

3、CGI模块安装 和 apache 配置CGI功能 (以Perl为例)

从apache官网下载模块mod_fcgid,解压后执行:

./configure.apxs
    make
    make install

  

安装好之后,apache的modules目录下应该有modules/mod_cgid.so文件。在http.config文件中增加配置:LoadModule cgid_module modules/mod_cgid.so,从而使得apache能加载CGI模块。

http.config中默认有下面的配置: 它表示给/usr/local/bin/apache/cgi-bin/路径设置一个别名 /cgi-bin/ 即 可以使用 http://localhost:8081/cgi-bin/test-cgi 形式的地址访问/usr/local/bin/apache/cgi-bin/下的test-cgi资源。Alias指令也是设置别名,不同的是ScriptAlias下的资源会当做脚本来执行。

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

  

修改配置后,直接重启apache是不能运行脚本的。从error.log中可以看到对应的错误提示。

1、第一个错误是脚本执行权限错误。因为/cgi-bin目录下的脚本默认只有读写权限,直接访问会导致http 500错误,此时error.log中会输出 Permission denied: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。

2、第二个错误是脚本格式错误。此时error.log中提示:Exec format error: AH01241: exec of '/usr/local/bin/apache/cgi-bin/printenv' failed。需要在脚本头中添加#!/bin/bash #!/usr/bin/perl 等,用来表明使用哪一个解释器来执行脚本。

3、如果你执行perl脚本,还有可能看到这条日志: can't locate fcgi.pm in @inc。它表明你的perl缺少CGI模块。可以按照perl官网的提示下载安装。

最终在apache上通过CGI访问脚本的效果如下:

猜你喜欢

转载自www.cnblogs.com/afraidToForget/p/11349460.html
今日推荐