繁体   English   中英

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

[英]Cannot run cgi, show plain text only (Ubuntu 13.10 Apache 2.4)

我只是安装了 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 文档,但仍然无法解决。 是不是因为“+ExecCGI”代码有问题? 我看到另一个人在将 Ubuntu 12.04 更新到 13.10 后也遇到了类似的问题。 也许 Ubuntu 是问题所在? 请帮忙。 Apache 配置和 Ubuntu 权限几乎让我发疯。

试试这个命令:

sudo a2enmod cgi

然后重启apache!

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

sudo apt-get install libapache2-mod-perl2

这将自动启用该模块并重新启动 apache 服务器。 如果没有,请手动执行。

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

扩展来自@tops 的答案

尝试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 <- 先试试这个

这在 Ubuntu 13.10 上对我有用。


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

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

请记住,主配置文件默认为/etc/apache2/apache2.conf ,模块和网站的各个配置组件在单独的文件中。


编辑:详细说明为什么访问此页面的人可能在 Ubuntu 上启用 Apache CGI 时遇到困难。

在 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”,但 SO 不会让我在 URL 中使用它:-/

确保启用 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

撤回我以前的答案,从评论中我了解到重新启动 apache 是答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM