如果在 conf.d 中定义了路径,那么 Apache 2 中是否需要 ScriptAlias?

如果在 conf.d 中定义了路径,那么 Apache 2 中是否需要 ScriptAlias?

我已经在运行 Apache/2.4.6(CentOS)的 CentOS 7 的全新安装中安装了 apcupsd。

我安装了 apcupsd 的 CGI 状态,但是当我尝试从另一个工作站访问该页面时仍然收到错误消息:

Forbidden

You don't have permission to access /apcupsd/upsstats.cgi on this server.

它在 LAN 上的 URL 如下所示:

http://mysite/apcupsd/upsstats.cgi?host=127.0.0.1&temp=F

如果我在服务器上的 Web 浏览器上运行此 URL,它可以正常工作。

所以我认为 Apache 不知道 apcupsd 位于 /var/www/apcupsd,所以我最好去告诉它。

但是,当我查看 /etc/httpd/conf.d 时,我看到有一个 apcupsd.conf,如下所示:

#
# apcupsd configuration file for Apache Web server
#

# files are off the documentroot of Web server
Alias /apcupsd /var/www/apcupsd
<Directory /var/www/apcupsd>
 AddHandler cgi-script cgi pl
 Options ExecCGI
</Directory>

#
# Allow only local access at default
# Change the ".example.com" to match your domain or modify
# access rights to your needs to enable remote access also.
#
<Directory "/var/www/apcupsd">
    DirectoryIndex upsstats.cgi
    AllowOverride None
    Options ExecCGI Indexes
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require local
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>

所以我看到那里已经有脚本告诉它 /apcupsd 是 /var/www/apcupsd。

但它不适用于 CGI,因为我收到上述错误消息。

我是否需要执行其他操作才能加载/执行 conf.d 中的此文件?是否需要编辑 /etc/httpd/conf/httpd.conf,如果需要,请说明原因和编辑内容,因为我看到 conf.d 中为 apcupsd.conf 执行了“别名”。看来一切都已准备就绪,应该可以正常工作。

我忽略了什么?

答案1

在大多数情况下,为同一个目录设置两个Directory部分是个坏主意,因此将它们合并在一起。例如,两个部分都有选项,因此其中一个将始终覆盖另一个,因为它们都以绝对方式设置选项。

检查错误日志。Apache总是当生成 403 Forbidden 消息时,会记录一些内容。如果日志中没有任何内容,则要么您查看了错误的日志,要么您的 CGI 本身生成了 403(实际上还有另一种可能性,但如果您有一个带有RewriteRule“F”标志的日志,则这是一种极端情况)。

另一条评论,该指令Require local对我来说看起来无效,那么您真的在使用 Apache v2.4 吗?

相关内容