Apache2 CGI 配置

Posted

技术标签:

【中文标题】Apache2 CGI 配置【英文标题】:Apache2 CGI configuration 【发布时间】:2013-10-03 00:22:13 【问题描述】:

我无法访问我在 python 中编写的一个非常简单的 cgi 脚本,并且在找到解决方案时遇到了太多麻烦。我觉得这将是一个很容易解决的问题,但我自己无法弄清楚。

url: localhost/cgi-bin/test.cgi(我也试过将它命名为 test.py) 我得到的错误是一个简单的 404,我认为下面的 ScriptAlias 会解决这个问题。此外,如果我尝试访问 localhost/cgi-bin/,我会得到 403:拒绝访问。我尝试将权限(我知道这很愚蠢)重置为 777,但没有更好的结果。

/etc/apache2/httpd.conf(对默认的/etc/apache2/apache2.conf没有特殊的编辑):

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

<Directory /usr/local/apache2/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi .py
</Directory>

/usr/local/apache2/cgi-bin:

.
└── test.cgi

test.cgi:

#!/usr/bin/python 
import cgi
#cgi.test()
print 'Content-type: text/html\n\n'
print 'test'

此外,在更改 httpd.conf 文件后,我还重新启动了 apache2。除了我已经看过的内容之外,我想不出任何其他内容: ScriptAlias configuration not working in apache2 但我不明白作者所引用的全局。我非常强烈地认为这是我的一个配置中的错误,但看起来代码非常简单。

如果有人能帮助我解决这个愚蠢的问题,我将不胜感激。

编辑:

错误日志:

--clip--
[Thu Sep 26 23:34:59 2013] [error] [client 127.0.0.1] script not found or unable to stat: /usr/lib/cgi-bin/test.cgi
[Thu Sep 26 23:42:08 2013] [error] [client 127.0.0.1] script not found or unable to stat: /usr/lib/cgi-bin/test.cgi

系统信息:

lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.2 LTS
Release:    12.04
Codename:   precise
uname -a
Linux #### 3.2.0-39-generic #62-Ubuntu SMP Thu Feb 28 00:28:53 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

我想我找到了罪魁祸首:

/etc/apache2/sites-enabled/000-default:

1    <VirtualHost *:80>
2     ServerAdmin webmaster@localhost
3 
4     DocumentRoot /var/www
5     <Directory />
6         Options FollowSymLinks
7         AllowOverride None
8     </Directory>
9     <Directory /var/www/>
10         Options Indexes FollowSymLinks MultiViews
11         AllowOverride None
12         Order allow,deny
13         allow from all
14     </Directory>
15 
16     ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
17     <Directory "/usr/lib/cgi-bin">
18         AllowOverride None
19         Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
20         Order allow,deny
21         Allow from all
22     </Directory>

特别是第 16 行。我从没想过要查看这个目录

【问题讨论】:

您的 apache 错误日志中有任何线索吗? cgi-bin目录应该不允许目录列表,如果直接访问cgi(localhost/cgi-bin/test.cgi)怎么办? 我已经包含了正在显示的错误示例。看起来它正在搜索正确的目录。 【参考方案1】:

根据您的错误日志,您没有编辑正确的配置或其他内容。 注意它说/usr/lib/cgi-bin? 只是为了好玩,如果您将脚本复制到/usr/lib/cgi-bin,然后尝试一下,它是否有效? 这个 apache 安装在什么操作系统上?

还有一件事,该配置文件中的某个地方是否还有另一个 ScriptAlias? 也许这会覆盖您的 /cgi-bin/ 映射?

【讨论】:

你是对的,我误读了错误日志。我将文件复制到提到的目录中,它像冠军一样执行。我想更大的问题是为什么那个目录? 有东西在配置中设置它。这就是为什么我问什么操作系统。您正在编辑的配置文件的位置是什么? /etc/apache2/httpd.conf 是我编辑的。我使用的是默认的/etc/apache2/apache2.conf,它似乎没有提到那个目录,也没有提到/etc/apache2/conf.d/中的任何文件 每个系统似乎都以不同的方式拆分 apache 配置。你在linux/unix上吗? find / -name httpd.conf -name apache2.conf -print 在 /etc/apache2/sites-enabled 中有一个文件,其中包含另一个 scriptAlias 指令到我的错误日志中的目录。感谢您的帮助,我已经解决了这个问题

以上是关于Apache2 CGI 配置的主要内容,如果未能解决你的问题,请参考以下文章

Apache2 下载我的 cgi 源

apache2执行cgi配置

apache2.4 fcgi 最小配置

linux下apache2的httpd.conf如何配置?

Apache2 发送两个带有映射“nph-”CGI 的 HTTP 标头

windows2008 apache2.4 tomcat-7多域名绑定环境配置