无法运行cgi,只显示纯文本(Ubuntu 13.10 Apache 2.4)

时间:2013-11-24 08:18:34

标签: perl apache ubuntu cgi

我只是安装Ubuntu 13.10而我正在尝试安装Apache。但是当我尝试在cgi-bin中运行perl文件时,浏览器只显示纯文本。

Apache的default.conf如下:

    AddHandler cgi-script .cgi .pl
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +Indexes +ExecCGI +MultiViews +SymLinksIfOwnerMatch
            #Order allow,deny
            Require all granted
            Allow from all
    </Directory>

这是我的perl cgi文件:

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<title> PERL CGI</title>\n";
    print "<body>";
    print "hello perl-cgi!!!!!!!";
    print "</body>";
    print "</html>\n";

我在mime.conf中打开了Handler文件在/ usr / lib / cgi-bin中,我将其作为http而不是file:///运行。我还安装了mod_perl。 我是Apache新手。我搜索了几个小时,尝试无限的Apache配置,阅读Apache文档,但仍然无法解决它。是因为&#34; + ExecCGI&#34;代码有问题吗?我看到另一个人在将Ubuntu 12.04更新到13.10之后也遇到了类似的问题。也许Ubuntu是问题? 请帮忙。 Apache配置和Ubuntu权限几乎让我很生气。

6 个答案:

答案 0 :(得分:45)

尝试使用此命令:

sudo a2enmod cgi

然后重启apache!

答案 1 :(得分:7)

我在Ubuntu 14.04尝试设置bugzilla时遇到了这个问题@ Andrew的答案很有帮助,@ Kevin的链接也是如此...所以除了启用cgi之外,请确保perl的模块for apache2已安装。您可以通过以下方式执行此操作:

sudo apt-get install libapache2-mod-perl2

这将自动启用模块以及重启apache服务器。如果不是手动执行此操作。

没有足够的代表来支持你们两个人,谢谢。

答案 2 :(得分:6)

从@tops扩展answer

尝试sudo a2enmod cgi,如果您已经尝试过一些教程,例如Apache Tutorial: Dynamic Content with CGIUbuntu HTTDPHow to Install Apache2 webserver with PHP, CGI, and Perl Support in Ubuntu Server,但仍然无法弄清楚它们缺少什么。

然后重启apache!

可以通过以下方式完成:

sudo /etc/init.d/apache2 restart
sudo apache2ctl restart
sudo service apache2 restart&lt; - 先尝试一下

这对我在Ubuntu 13.10上有用。


来自基于RedHad的发行版的用户的新命令:

  • 模块
    • a2enmod
    • a2dismod
  • 配置
    • a2enconf
    • a2disconf
  • 虚拟网站
    • a2ensite
    • a2dissite

请记住,默认情况下,主配置文件为/etc/apache2/apache2.conf,模块和网站的各个配置组件位于不同的文件中。


编辑:详细介绍了为什么来this page的人可能难以在Ubuntu上启用Apache CGI。

答案 3 :(得分:0)

在Ubuntu 13.10上安装Apache的步骤:

  • sudo apt-get install apache2
  • sudo service apache2 start

在Ubuntu 13.10上测试Apache的步骤:

在Ubuntu 13.10上使用Apache下的CGI程序的步骤:

  • 无。 CGI是开箱即用的配置。

在Ubuntu 13.10上测试Apache下的CGI程序的步骤:

  • /usr/lib/cgi-bin/(例如/usr/lib/cgi-bin/test
  • 中修改文件
  • 添加一些Perl代码(例如上面的代码)
  • sudo chmod +x /usr/lib/cgi-bin/test
  • 访问http://your-host-here.com/cgi-bin/test

注意:“your-host-here.com”可能是“localhost”,但是我不会让我在网址中使用它: - /

答案 4 :(得分:0)

确保启用apache cgi模式

sudo a2enmod cgi   //will enable the cgi mode
sudo a2dismod cgi  //Will disable the cgi mode

将所有文件保存在webroot“cgi-bin”文件夹下

sudo mkdir /home/www/cgi-bin

确保.cgi文件的文件权限正常

sudo chmod 755 yourFile.cgi

尝试通过终端

执行
perl /Path_To_The_File/fileName.cgi

确保您的fileName.cgi在文件顶部包含以下代码

#!/usr/bin/perl -w

print "Content-type: text/html\n\n";

如果以上所有步骤都运行良好,那么

在apache中为perl项目创建虚拟主机

cp /etc/apache2/sites-available/000-default.conf ./your_project.conf
sudo nano /etc/apache2/sites-available/your_project.conf

在your_project.conf文件中,替换这些行

<VirtualHost *:80>
    ServerAdmin xyz@gmail.com
    DocumentRoot /var/www/html/cgi-bin          //Define where your project is
    ServerName your_project.com                 //URL through which you want to access
    ServerAlias your_project.com


    ErrorLog ${APACHE_LOG_DIR}/error.log        //Error for the project will store in this file
    CustomLog ${APACHE_LOG_DIR}/access.log combined


    ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/"  //particular directory is set aside for CGI programs

    <Directory /var/www/html/cgi-bin/>
    ##TO consider the files as cgi which has .cgi and .pl extension
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl

    ##To consider all files as cgi file  (if want to use remove # from last two line add in above 2 line)
    #Options ExecCGI
    #SetHandler cgi-script
    </Directory>

</VirtualHost>

运行这些命令

sudo a2ensite your_project.conf      //Will enable your configuration file
sudo service apache2 restart         //Restarting apache2

添加您的主机

sudo nano /etc/hosts
//add this line
127.0.0.1   your_project.com

现在运行执行你的cgi文件

your_project.com/cgi-bin/fileName.cgi

答案 5 :(得分:-1)

我试图重现这个问题,这就是我所学到的: 在/ etc / apache2 / sites-available中,您可以设置多个站点,也可以使用默认站点。 无论哪种方式都有....显示我的DocuumentRoot的路径(其中我的.html文件存在)。第二个....显示我的.cgi,.pl,.perl文件的路径:

<VirtualHost *:8080>
    ServerName casey.local
    **DocumentRoot /home/casey/work/htdocs/casey.local**
    <Directory />
      Options FollowSymlinks
      AllowOverride All
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    **<Directory "/usr/lib/cgi-bin">**
      AllowOverride None
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Order allow,deny
      Allow from all
    </Directory>