配置 Apache 2.4 以允许 Debian Jessie 上的 CGI

Mik*_*iLL 3 debian cgi apache-httpd

我是 Sysadmin 和 Apache 配置的新手。试图让 AWStats 运行,但在故障排除时已经尝试在端口 8888 上运行一个简单的 Hello World(html 输出)脚本,并且遇到了 403 Forbidden 的问题。

这不是脚本:

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

目录和文件权限为 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
Run Code Online (Sandbox Code Playgroud)

我不知道它是否是使用共享模块支持构建的。用 apt-get 安装。在配置文件中找不到 LoadModule 行。如果我将上面一行添加到apache2.conf,Apache 将不会重新启动。

ScriptAlias 2. 配置文件中有一个 ScriptAlias,由 AWStats 放置。添加此指令ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/似乎没有做任何事情。我什至尝试将我的 hello(或者我应该说 hellp)脚本移动到/usr/local/apache2/cgi-bin/静止的 403 中。

显式使用选项 甚至尝试添加

Options +ExecCGI
AddHandler cgi-script .cgi
Run Code Online (Sandbox Code Playgroud)

<Directory /var/www/>指令。

一切都无济于事。下一步有什么想法吗?

Wou*_*lst 5

[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
Run Code Online (Sandbox Code Playgroud)

这意味着您尚未为您的网络服务器配置授权。

你想要做的是确保你有类似的东西

<Directory /usr/local/apache2/cgi-bin>
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

请注意,在 Debian 中,有一个高级配置系统可以为您完成所有这些工作,如果您会使用它的话 ;-)

为此,首先删除(或注释掉)您已添加的内容。然后:

a2enmod cgi
service apache2 restart
Run Code Online (Sandbox Code Playgroud)