我是 Sysadmin 和 Apache 配置的新手。试图让 AWStats 运行,但在故障排除中,我们不得不尝试在端口 8888 上运行一个简单的 Hello World(html 输出)脚本,并且遇到了 403 禁止的墙。
这不是脚本:
mikekilmer@glitchbox:/var/www/html$ perl /usr/lib/cgi-bin/hello.pl
Content-type: text/html
<HTML>
<HEAD>
<TITLE>Hello, world!</TITLE>
</HEAD>
<BODY>
<H1>Hello, world!</H1>
</BODY>
</HTML>
Shebang 匹配 perl 的路径:#!/usr/bin/perl
这些是主要的配置设置:
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
目录和文件权限为 755 和 644,所有权为 root:root(在 cgi-bin 和 perl 文件上)。
Apache 的 html/index.html 显示: http://www.infiniteglitch.net:8888/manual.html/howto/cgi.html
错误日志是这样说的:
[Sat Jun 06 05:53:24.412867 2015] [authz_core:error] [pid 28374:tid 140381836453632] [client 108.205.62.183:55886] AH01630: client denied by server configuration: /usr/local/apache2
我想也许我遗漏了配置 Apache 以允许 CGI 的一些内容。
模块 1. 注意:如果 Apache 已经构建了共享模块支持,则需要确保该模块已加载;在 apache2.conf 中,您需要确保 LoadModule 指令未被注释掉。正确配置的指令可能如下所示:
LoadModule cgi_module modules/mod_cgi.so
我不知道它是否是使用共享模块支持构建的。使用 apt-get 安装。在配置文件中找不到 LoadModule 行。如果我将上面的行添加到apache2.conf
,Apache 将不会重新启动。
脚本别名
2. 配置文件中有一个ScriptAlias,由AWStats 放置在那里。添加这个指令ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
似乎没有做任何事情。我什至尝试将我的 hello(或者我应该说 hellp)脚本移到/usr/local/apache2/cgi-bin/
still 403 中。
显式使用选项 甚至尝试添加
Options +ExecCGI
AddHandler cgi-script .cgi
到<Directory /var/www/>
指令。
一切都无济于事。下一步有什么想法吗?
答案1
[Sat Jun 06 05:53:24.412867 2015] [authz_core:error] [pid 28374:tid 140381836453632] [client 108.205.62.183:55886] AH01630: client denied by server configuration: /usr/local/apache2
这意味着您尚未为网络服务器配置授权。
你想要做的是确保你有类似的东西
<Directory /usr/local/apache2/cgi-bin>
Require all granted
</Directory>
请注意,在 Debian 中,有一个高级配置系统,如果您愿意使用的话,它可以为您完成所有这些工作;-)
为此,请首先删除(或注释掉)您已添加的内容。然后:
a2enmod cgi
service apache2 restart