如何在Apache服务器上运行CGI脚本

4
这是我的程序:
[root@localhost cgi-bin]# locate first.pl 
/home/Ram/Desktop/work/first.pl
/usr/local/apache2/cgi-bin/first.pl
[root@localhost cgi-bin]# cd /usr/local/apache2/cgi-bin/
[root@localhost cgi-bin]# vi first.pl 
#!/usr/bin/perl -w
use warnings;
use warnings;
use CGI;
print "content-type: text/html\n\n";
print "<h2>Hello, World!</h2>\n";

我是这样从浏览器中调用脚本的:

http:// localhost / usr / local / apache2 / cgi-bin / first.pl

我没有得到输出,但是我遇到了一个错误:

没有找到

在此服务器上未找到请求的URL“/usr/local/apache2/cgi-bin/first.pl”。

Apache/2.2.15(CentOS)服务器位于localhost端口80

我通过以下方式在Web浏览器中检查Apache Web服务器是否工作:

https:// localhost

它显示了欢迎页面。

我该如何解决此错误?


你能添加你的虚拟主机配置吗? - Saddam Abu Ghaida
请仅包含虚拟主机的单独配置文件,如果有,请勿包含httpd.conf。 - Saddam Abu Ghaida
尝试运行命令 "chmod 755 /usr/local/apache2/cgi-bin/first.pl"。 - Mark Setchell
你能告诉我如何查看httpd.conf文件吗? - Ram
@Mark Setchell 在浏览器中??? - Ram
`<VirtualHost *:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /www/docs/dummy-host.example.com

ServerName dummy-host.example.com

ErrorLog logs/dummy-host.example.com-error_log

CustomLog logs/dummy-host.example.com-access_log common

#</VirtualHost> `
- Ram
3个回答

6

在Linux安装apache2后,您基本上需要更改两个文件。

打开终端并设置以下配置:

  1. sudo vim /etc/apache2/sites-enabled/000-default.conf and add the follwing:

    <Files ~ "\.(pl|cgi)$">
        SetHandler perl-script
        PerlResponseHandler ModPerl::PerlRun
        Options +ExecCGI
        PerlSendHeader On
    </Files>
    
  2. sudo vim /etc/apache2/apache2.conf and add the following:

    <Directory /var/www/cgi-bin/> AddHandler cgi-script .cgi .pl Options FollowSymLinks ExecCGI AllowOverride None </Directory>

在添加这两个配置更改后,编写一个perl脚本,将其放置在cgi-bin目录中,然后为其授予足够的权限(sudo chmod 755 <filename>)。
最后,重新启动apache2:sudo apache2ctl restart 截图: default.conf apache2.conf

5

是的,上面的过程可行,但更简单的方法是:

  1. 启用CGI- sudo a2enmod cgi
  2. 重新启动Apache,它就会工作 - service apache2 restart
  3. 运行cgi文件 http://localhost/cgi-bin/1.sh

祝你好运!


0
在您的Web配置文件(httpd.conf或虚拟主机配置文件)中,应该包含以下片段:
ScriptAlias /cgi-bin/ /etc/local/apache2/cgi-bin/
<Directory "/etc/local/apache2/cgi-bin">
   Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>

重新启动服务器,别忘了执行 chmod +x /usr/local/apache2/cgi-bin/first.pl 然后加载 http://localhost/cgi-bin/first.pl

这假设您的配置中没有虚拟主机,或者您配置的虚拟主机是默认的。如有需要,请参阅 Apache 文档。


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

如果您已配置,则应将“/var/www/cgi-bin”更改为存在ScriptAliased CGI目录。

<Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>这只是一部分。
- Ram
这些/usr/local/apache2/conf/httpd.conf/usr/local/apache2/conf/original/httpd.conf 只存在于机器中。 - Ram
请问要检查哪个 httpd.conf 文件?请告知。 - Ram
1
我认为应该是/usr/local/apache2/conf/httpd.conf,但无论如何,为什么不先尝试一个,如果不行再尝试另一个呢? - mirod
`/usr/local/apache2/conf/httpd.conf
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule> <Directory "/usr/local/apache2/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>/usr/local/apache2/conf/original/httpd.conf ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule><Directory "/usr/local/apache2/cgi-bin"> AllowOverride None Options None Require all granted </Directory>`
- Ram
1
你之前的评论里有隐藏的问题吗? ;--) - mirod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接