0%

Apache2 开启Perl cgi的支持

系统:Ubuntu20.04

前提:由于最近得一个项目需要使用Perl来解析网站里的一些cgi文件。所以需要开启Apache2对Perl的引用

  1. 修改/etc/apache2/sites-available/000-default.conf,删掉cgi的注释#

    1
    Include conf-available/serve-cgi-bin.conf
  2. 修改网站的配置文件 xx.conf 在VirtualHost下添加以下内容

    1
    2
    3
    4
    5
    6
    7
    ScriptAlias /cgi-bin/ /var/www/xxx/         #这里是重点
    <Directory "/var/www/xxx">
    Options Indexes FollowSymLinks Includes ExecCGI #这里是重点
    AllowOverride All
    AddType text/html .shtml .html .htm
    AddOutputFilter INCLUDES .shtml .html .htm
    </Directory>
  3. 修改/etc/apache2/conf-available/serve-cgi-bin.conf

    1
    2
    3
    4
    5
    6
    7
    8
    <IfDefine ENABLE_USR_LIB_CGI_BIN>
    ScriptAlias /cgi-bin/ /var/www/xxx/ #这里是重点,修改自己的项目目录
    <Directory "/var/www/cfc_old">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require all granted #这里是重点
    </Directory>
    </IfDefine>
  4. 链接/etc/apache2/mods-available/cgi.load到 mods-enabled

    1
    ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load
  5. 修改/etc/apache2/mods-available/mime.conf,添加

    1
    AddHandler cgi-script .cgi .pl .sh .py .php

重启Apache服务,即可。

提供一个测试代码

1
2
3
4
#!/usr/bin/perl

print "Content-Type: text/html\n\n";
print "It works ok!";

多数CGI的错误不外乎

  1. 使用了windows的换行,文件却在linux下执行,解决方法,就是直接将文件转成LF格式即可。编辑器都有
  2. cgi代码太老。 解决方法,去/var/log/apache2/error.log中去查找错误信息。
  3. defined(%hash),由于不使用了,直接删掉!!