CGI完全配置,Httpd服务器之基础教程

2019-08-24 作者:yzc216亚洲城   |   浏览(193)

Ubuntu 15.10下Python Apache CGI完全配置

操作系统环境:Ubuntu 15.10

0.需求原因

    想在我的Linux上架设Apache来运行CGI程序,方便以后用Apache部署Python的Web应用,但遇到各种各样的问题,网上找的答案要么都太旧了(4/5年前跟现在已经差很多了),要么就不完整,所以这里总结一下,作为最新版本吧。

1.Apache安装

    采用的是源码编译安装的形式。首先要说明的是,要成功安装Apache,需要依次安装完下面的软件(函数库)才算是成功地安装了Apache:

(1)apr安装

下载地址:

注意这个网站上有两个相应的软件下载,一个是apr,另外一个是下面将要安装的apr-util,由于英文名字看起来太容易混淆,所以一定要看清楚下载的是哪个。这里我下载的是: apr-1.5.2.tar.gz

第一步:解包

1 2 3 4 5 [email protected]:~/下载$ tar xvf apr-1.5.2.tar.gz  ...... apr-1.5.2/mmap/win32/ apr-1.5.2/mmap/win32/mmap.c apr-1.5.2/apr-config.in

第二步:运行configure检测和设置编译选项

1 2 3 4 5 6 [email protected]:~/下载/apr-1.5.2$ ./configure  ...... config.status: creating include/arch/unix/apr_private.h config.status: executing libtool commands rm: cannot remove 'libtoolT': No such file or directory config.status: executing default commands

    正常情况下是没有问题的,如果出现问题,可以自行查找,这个好解决。

第三步:编译和安装

1 2 3 4 [email protected]:~/下载/apr-1.5.2$ make ...... [email protected]:~/下载/apr-1.5.2$ sudo make install ......

    OK,这样的话,apr就安装完成了。

(2)apr-util安装

    下载地址跟上面的是一样的,这里我下载的版本是:apr-util-1.5.4.tar.gz

    apr-util安装的步骤跟上面的差不多,不过有一步要注意的,就是在执行./configure命令的时候需要指定apr的安装目录

1 2 3 4 5 6 7 8 [email protected]:~/下载/apr-util-1.5.4$ ./configure ...... checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed Applying apr-util hints file rules for x86_64-unknown-linux-gnu checking for APR... no configure: error: APR could not be located. Please use the --with-apr option. #注意看上面的报错提示

    先找到apr的安装目录:

1 2 [email protected]:~/下载/apr-util-1.5.4$ whereis apr apr: /usr/local/apr

    再添加相应参数执行apr-util的./configure命令:

1 2 3 4 5 [email protected]:~/下载/apr-util-1.5.4$ ./configure --with-apr=/usr/local/apr ...... config.status: creating test/Makefile config.status: creating include/private/apu_config.h config.status: executing default commands

    这样的话预编译就算完成了,再执行下面的make和sudo make install:

1 2 [email protected]:~/下载/apr-util-1.5.4$ make [email protected]:~/下载/apr-util-1.5.4$ sudo make install

    OK,这样的话,apr-util的安装也完成了。

(3)pcre安装

    这不是必需的,前提是你的系统原来已经安装了它的库,如果还没有安装的话,在你编译Apache的时候就会出现下面的错误提示:

configure: error: pcre-config for libpcre not found. PCRE is required and available from

    所以如果你也出现了这样的情况,请先下载安装pcre。

    下载地址:

    这里我下载的版本是:pcre-8.38.tar.gz

    安装步骤跟上面的一样,而且这里也不会出现什么问题,直接给出步骤好了:

1 2 3 4 [email protected]:~/下载$ tar zxvf pcre-8.38.tar.gz  [email protected]:~/下载/pcre-8.38$ ./configure [email protected]:~/下载/pcre-8.38$ make [email protected]:~/下载/pcre-8.38$ sudo make install

   

    pcre也安装完之后,下面就可以真正安装Apache了。

(4)Apache安装

    在上面的三个软件安装完成之后,这下面才开始安装Apache.

    下载地址:

    我下载的版本是:httpd-2.4.18.tar.gz

a.安装  

    只要上面的几步完成了,安装apache就比较容易了,依次执行下面的命令就可以了。

1 2 3 4 [email protected]:~/下载$ tar zxvf httpd-2.4.18.tar.gz  [email protected]:~/下载/httpd-2.4.18$ ./configure --enable-module=shared [email protected]:~/下载/httpd-2.4.18$ make [email protected]:~/下载/httpd-2.4.18$ sudo make install

 

b.参数说明

     需要注意的是,如果在执行./configure时没有指定apache的安装目录,默认是安装在/usr/local/apache2,你也可以通过下面的方式来查看它的安装目录:

1 2 [email protected]:~$ whereis apache2 apache2: /usr/local/apache2

    另外,上面在执行./configure时添加了-enable-module=shared参数,即通过把模块编译成动态共享对象,让Apache启动时动态加载,这样以后需要加载新模块时,只需在配置文件中设置即可。当然,为了这样的便捷性而损失一定的性能是否值得,个人衡量。所以这个参数你不加也是没有问题的。

c.无法启动的解决方案

    安装完成后,就可以启动了,因为采用的是编译安装,所以需要用下面的方式启动:

1 2 [email protected]:~$ sudo /usr/local/apache2/bin/apachectl start /usr/local/apache2/bin/httpd: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

    但是你会发现又报错了,而且报的错为:无法加元libpcre.so.1库函数。

    libpcre.so.1,很熟悉的名字,前面不是已经安装了?确实是安装的,只是Apache没有找到它而已,查看一下:

1 2 3 4 5 6 7 8 9 10 11 [email protected]:~$ ldd /usr/local/apache2/bin/httpd      linux-vdso.so.1 =>  (0x00007ffdf9fe6000)     libpcre.so.1 => not found     libaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0x00007f8192a47000)     libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0x00007f8192813000)     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81925f5000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f819222b000)     libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0x00007f8192002000)     libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8191dca000)     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8191bc6000)     /lib64/ld-linux-x86-64.so.2 (0x00005637a587b000)

    这时我们把pcre对应的该库函数软件链接到/lib目录就可以了:

1 [email protected]:~$ sudo ln -s /usr/local/lib/libpcre.so.1 /lib

    下面再启动试试:

1 2 [email protected]:~$ sudo /usr/local/apache2/bin/apachectl start AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

    OK,这时再打开浏览器,经典的"It works"显示出来了:

图片 1

    这样的话,Apache的安装也算是完成了,下面就说说CGI的配置。


2.CGI配置

    Apache支持CGI配置,下面就来详细说明配置的过程。

    找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改,如下面的说明:

(1)加载cgi模块
    大概在httpd.conf的137行:

1 #LoadModule cgid_module modules/mod_cgid.so

    去掉注释:

1 LoadModule cgid_module modules/mod_cgid.so

(2)设置cgi脚本文件路径
    大概在httpd.conf的329行:

1 ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

    可以看到apache将"/usr/local/apache2/cgi-bin/"映射为/cgi-bin/,即当你通过浏览器访问/cgi-bin/目录时,实际上就是访问"/usr/local/apache2/cgi-bin/"目录,为了方便,我将其设置为如下:

1 ScriptAlias /cgi-bin/ /home/xpleaf/Source_Code/cgi_for_py/

    注意这里路径末尾一定要加/,否则apache是无法打到该路径下的文件的。

(3)设置cgi路径的访问权限
    大概在httpd.conf195行:

1 2 3 4 <Directory />     AllowOverride none     Require all denied </Directory>

    将上面的内容全部修改为下面的内容:

1 2 3 4 5 6 <Directory "/home/xpleaf/Source_Code/cgi_for_py/">    AllowOverride None    Options  ExecCGI    Order allow,deny    Allow from all </Directory>

    注意这里的目录是修改为前面我们改的:/home/xpleaf/Source_Code/cgi_for_py/

    这样的修改是有原因的,如果没有在这里设置权限,当你在浏览器中访问你的cgi脚本文件时,得到的可能是这样的提示:

Forbidden
You don't have permission to access /cgi-bin/hello.py on this server.

(4)设置apache可解释python的cgi脚本文件
    大概在httpd.conf的386行:

1 #AddHandler cgi-script .cgi

    去掉注释,将其修改为:

1 AddHandler cgi-script .cgi .py

    加上.py后,就可以解释python的脚本文件了,如果你需要解释shell的脚本文件,可以添加.pl,其它的类似。

    OK,完成上面的4步之后,CGI配置就算完成了。不过在配置完成之后,我们需要重启一下Apache服务:

1 2 [email protected]:/usr/local/apache2/confsudo /usr/local/apache2/bin/apachectl restart AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

3.添加CGI脚本文件

(1)创建cgi脚本文件

    在/home/xpleaf/Source_Code/cgi_for_py/目录下添加下面一个文件,并命名为hello.py:

1 2 3 4 5 6 7 8 9 10 11 12 13 #!/usr/bin/env python # -*- coding: UTF-8 -*-    print "Content-type:text/html" print print '<html>' print '<head>' print '<title>Hello</title>' print '</head>' print '<body>' print '<h2>Hello Word! This is my first CGI program</h2>' print '</body>' print '</html>'

    注意#!/usr/bin/env python一定要加上,否则会出现500错误提示。   

(2)设置cgi脚本文件的文件权限为755    

1 2 3 [email protected]:~/Source_Code/cgi_for_pychmod 755 hello.py [email protected]:~/Source_Code/cgi_for_pyls -l hello.py -rwxr-xr-x 1 xpleaf xpleaf 289  1月 31 16:02 hello.py

    此步非常非常重要,如果忘记这步,无论你怎么找配置文件也找不出错误,就算看代码也不会发现有错误,然后通过浏览器访问时会一直显示500错误,所以一定要记得该步操作!   


4.通过浏览器访问cgi脚本文件

   

    直接在浏览器中输入localhost/cgi-bin/hello.py或127.0.0.1/cgi-bin/hello.py就可以访问我们的cgi脚本文件了:

图片 2

    终于可以了!

    Ok,那么到这里就结束了,如果是完全按照上面的操作来进行的话,相信是不会有太大的问题的,只是要注意的细节问题比较多。当然肯定不会跟我这里的情况完全一样,因为这还取决于你所使用的环境,这里我的操作系统是:Ubuntu 15.10,所以还是仅提供参考。

    希望帮到有需要的朋友。

Ubuntu Server 14.04 安装Web服务器(Linux Apache MySQL PHP) 

Linux下安装配置PHP环境(Apache2) 

Ubuntu 13.04 安装 LAMPVsftpdWebminphpMyAdmin 服务及设置

CentOS 5.9下编译安装LAMP(Apache 2.2.44 MySQL 5.6.10 PHP 5.4.12)

RedHat 5.4下Web服务器架构之源码构建LAMP环境及应用PHPWind

Apache 的详细介绍:请点这里
Apache 的下载地址:请点这里

15.10下Python Apache CGI完全配置 操作系统环境:Ubuntu 15.10 0.需求原因 想在我的Linux上架设Apache来运行CGI程序,方便以后用Apache部署Python的...

Apache Httpd服务器之基础教程

Httpd服务器是Apache产品线下的一款web服务器,常与PHP或Python等CGI脚本一起配合使用,为用户提供动态Web服务。httpd,从名字就可以看出,它提供的主要是基于http协议的Web服务。本篇为介绍Httpd服务器的第一篇,主要介绍下Httpd服务器的安装,运行模式,容器配置,以及CGI的配置,目的是使大家能通过阅读此篇文章来从零建立起一个可运行的Web服务器。

Httpd从哪下载?请访问 Release版比较好。目前的稳定版本为2.4.10。

如果我们的操作系统是Linux,下载好httpd-2.4.10.tar.gz后,我们就可以通过tar zxvf httpd-2.4.10.tar.gz命令释出所有的源代码。但此时不见得能够成功的对源代码进行编译安装,因为要安装httpd服务器,首先得安装好几个其它的软件,他们分别是APR,APR-Util,PCRE,ZLIB。请确保APR,APR-Util,PCRE以及ZLIB都是最新的版本,尽量不要用yum库里的版本,因为如果你的操作系统不是最新的版本,比如你的操作系统为CentOS 5,那么当你使用yum安装APR时,就会安装到老版本的APR,从而导致2.4.10的httpd服务器编译失败(当然还是推荐使用新版本的操作系统,否则可能会出其它问题,如C编译器版本,autoconf版本问题等,会带来一些麻烦)。所以为了不区分与平台,我们还是麻烦下,通过官方发布的最新版本的源代码来编译安装这些前置软件。APR及APR-Util的下载地址在 1.5.1及APR-Util 1.5.4。PCRE下载地址在 8.36。ZLIB下载地址在 2.4.10是100%匹配的。

在安装httpd之前,我们应先安装好apr,apr-util,pcre及zlib。下面就给出安装它们的具体过程,值得注意的是apr应在apr-util之前安装好,因为apr-util依赖于apr。下面假如你所有的文件都在/usr/local下。

apr安装过程:

    cd /usr/local/apr-1.5.1
        ./configure —prefix=/usr/local/apr
        make && make install

        apr-util安装过程:

    cd /usr/local/apr-util-1.5.4
        ./configure —prefix=/usr/local/apr-util —with-apr=/usr/local/apr

        pcre安装过程:

    cd /usr/local/pcre-8.36
        ./configure —prefix=/usr/local/pcre
        make && make install

    zlib安装过程:

        cd /usr/local/zlib-1.2.8
        ./configure —prefix=/usr/local/zlib
        make && make install

    安装完以上三个前置软件,就可以安装apache httpd服务器了。
    httpd安装过程:

        cd /usr/local/httpd-2.4.10
        ./configure —prefix=/usr/local/httpd
        —with-apr=/usr/local/apr
        —with-apr-util=/usr/local/apr-util  
        —with-pcre=/usr/local/pcre  
        —with-z=/usr/local/zlib —with-mpm=worker
        —enable-modules=all —enable-so
        make && make install

    其中 —with-mpm为多路处理模块的设置,如设置为worker,则系统将以多进程多线程模型运行,这种设置适合于配合php-fpm管理php cgi进程,但不适合通过libphp.so模块进行php内容的解析。—enable-modules代表启动httpd内所有模块.—enable-so代表启动动态库加载功能(这个是默认就开启的)。前面的—with-xxx是所需要的前置软件的安装路径。
    这样,我们就完成了httpd的安装工作。在启动httpd前,我们应对httpd进行必要的配置。httpd的配置文件名为httpd.conf,位置在/usr/local/httpd/conf/httpd.conf。下面就简单的介绍下我们的httpd配置文件。
    httpd的配置文件分为全局和容器两个部分,在容器外的配置指令即为全局指令,在整个配置文件范围内均有效,而容器内的指令,则只在容器范围内有效。那么什么是容器呢?简单点说,大部分以尖括号<xxx>开头,以</xxx>结尾的就是容器。比如<Directory></Directory>,又比如<Location></Location>等。首先讨论下常用的全局指令,基础的常用的全局指令有ServerRoot,Listen,LoadModule,User,Group,ServerName,DocumentRoot等。因为此篇是基础,所以也就只简单介绍下比较基础的^_^。
    ServerRoot,为服务器所在根目录,一般为服务器的安装目录,配置文件里的相对路径一般以它作为参照。
    Listen,服务器的监听端口,可以以IP:端口的形式设置,也可以只设置端口。如果设置了IP,则服务器只会监听此IP对应的网络接口。
    LoadModule,加载动态库,比如你要开启代理功能,那么应该利用LoadModule加载proxy.so模块。
        User,服务器运行时使用的用户名,此用户为Linux系统用户。
    Group,服务器运行时使用的用户组,此用户组为Linux系统用户组。
    ServerName,服务器名可用你申请的域名或IP表示,不设置这个在启动时会有一个警告,但也不会报错。设不设置无所谓啦。
    DocumentRoot,服务器检索内容的根目录,比如用户在浏览器输入url为
    这些指令,一般默认的配置文件已经帮你设置好了,除非你的80端口被某项进程所占,否则服务器应该能正常启动。可以通过linux命令netstat -ant查看tcp端口的情况。如果在Local Address这一列没看到80端口被占用的话,恭喜你,启动服务器吧。否则,请更改Listen的值。
    如果你不需要建立虚拟主机,也许<Directory>容器会是你主要的设置点。Directory按字面意义就是设置目录,设置服务器检索内容的目录。如果你的DocumentRoot的值为/usr/local/httpd/htdocs。那么当用户的uri为index.html时,服务器将在/usr/local/httpd/htdocs下寻找index.html文件,当uri为test/index.php时,服务器将在/usr/local/httpd/htdocs/test下寻找index.php文件。那么如果我想在/usr/local/httpd/htdocs自定义一些设置,比如想显示目录下的文件列表,就应该利用<Directory>容器。下面是一段目录设置代码:

    <Directory “/usr/local/httpd/htdocs”>
        Options Indexes
        AllowOverride None
                Require all granted
    </Directory>

    这段代码很简单,主要达成三个目的。一是允许显示目录列表,二是禁止.htaccess文件覆盖配置,三是允许所有用户访问该目录,也就是说只要uri映射到此目录,则就可以将内容返回给用户。Options是目录的一些设置选项,如允许显示列表,允许目录内有软链接等。AllowOverride是是否允许其它的配置文件覆盖此配置。Require是授权。
   
    我们用/usr/local/httpd/bin/httpd -k start命令来启动服务器。如果没有任何回显,则表示服务器启动成功。进一步可以用ps aux | grep httpd来确定以下,如果有很多/usr/local/httpd/bin/httpd -k start进程,则表明服务器启动成功。利用浏览器访问下服务器,如服务器IP为192.168.1.6,则在浏览器内输入 works!”,则表示服务器一切OK。至此,服务器的安装到此结束,下面介绍以下服务器的运行模式。
    Httpd服务器的运行模式主要分为prefork和worker,它们属于多路处理模块MPM,由—with-mpm参数在./configure时设置。prefork为非线程型,预派生的多路处理模块,而worker属于线程型的。也就是说prefork使用进程处理请求,而worker可以使用线程处理请求。它们各有优缺点,对于非线程安全的脚本处理系统,适合与使用prefork模块,如php-cli。对于线程安全的脚本处理系统,如果你的机器是多核并且配置足够高,选择worker模块也许是更好的选择。
    prefork使用一个单独的控制进程负责产生子进程,这些子进程用于监听请求并给出应答。Apache总是试图保持一些备用的子进程用于迎接即将到来的请求,这样客户端就不用在得到服务前等待子进程的产生。配置mpm模块可以在配置文件的全局部分进行设置。当然,一般来说我们在设置mpm时会加上<IfModule></IfModule>先判断下该模式是否正应用在服务器中。如下是一段prefork的配置代码:
    <IfModule mpm_prefork_module> #这个判断可以不加,除非你非常确定自己启动了prefork的模式
        StartsServers    5    #服务器启动时创建的进程数
        MinSpareServers    5    #最小空闲进程数
        MaxSpareServers    10    #最大空闲进程数
        MaxRequestWorkers    250    #最高并发量
        MaxConnectionsPerChild    0    #单个进程能处理的连接数,如果设置为正整数值,则在超过此连接数后,
                                        该子进程会被Kill掉。当设置为0时,表示无限制                             
    </IfModule>

    worker为多线程多进程的服务器,可以处理海量请求,前提是你的服务器能抗的住。如下是一段worker的配置代码:

    <IfModule mpm_worker_module>
        StartServers    3                #同prefork下的StartServers指令
        MinSpareThreads    75            #最小空闲线程数
        MaxSpareThreads    250            #最大空闲线程数
        ThreadsPerChild    25            #每个子进程的线程数
        MaxRequestWorkers    400        #同prefork下的MaxRequestWorkers指令
        MaxConnectionsPerChild    0    #同prefork下的MaxConnectionsPerChild指令
    </IfModule>

   
    最后,我们来探讨下httpd如何与CGI脚本进行交互,实现动态内容。以普通的bash脚本为例。我们创建一个bash脚本如下:    

    #!/bin/bash
    echo Content-type: text/html
    echo Hello, World.

    脚本文件命名为hello.cgi。
   
    我们将此脚本放到/usr/local/httpd/cgi-bin目录中,目的是使用户在浏览器上访问, World.”。那么该如何设置呢?打开httpd.conf文件,参考如下配置代码:

    <IfModule alias_module>
        ScriptAlias /cgi-bin/ “/usr/local/httpd/cgi-bin/"
    </IfModule>
    <IfModule mime_module>
        AddHandler cgi-script .cgi
    </IfModule>
    <Directory “/usr/local/httpd/cgi-bin”>
        Options ExecCGI
        Require all granted
    </Directory>

    下面依次解释下以上指令的意义。大家可以看到命令分别包含在alias和mime的模块判断中,所以先在LoadModule中找到alias和mime两个模块并取消注释,同时确认你的/usr/local/httpd/modules中真有这两个模块(应该都有,这属于httpd的核心模块)。ScriptAlias的意义是将uri为/cgi-bin/的路径映射到物理目录/usr/local/httpd/cgi-bin中,也就是你放cgi脚本的那个目录。AddHandler命令表示添加一个cgi的脚本处理器,使httpd能处理cgi脚本,这个cgi脚本处理器名为cgi-script,它处理以.cgi后缀结尾的文件。Options下的ExecCGI选项表示,该目录下可以执行CGI脚本。配置完后重启服务器,然后就可以愉快的进行动态内容的访问了。
    此篇文章仅仅介绍了httpd服务器的9牛之1毛,使大家对httpd服务器有个基础的认识。当然httpd服务器还有很多功能,如日志、重写、认证、授权、与php模块进行结合使用、与php-fpm管理器进行结合使用。它是web服务架构中重要的一环,为web服务基础设施贡献了许多力量。

CentOS 6.5编译安装httpd-2.4.7

httpd中工作模型的比较 

源码编译安装httpd2.4及虚拟主机

编译安装最新版httpd-2.4

httpd2.4基本功能的实现...

本文永久更新链接地址:

Httpd服务器之基础教程 Httpd服务器是Apache产品线下的一款web服务器,常与PHP或Python等CGI脚本一起配合使用,为用户提供动态Web服务。...

本文由yzc216亚洲城发布于yzc216亚洲城,转载请注明出处:CGI完全配置,Httpd服务器之基础教程

关键词: yzc216亚洲城