访问 Apache 2.2.22 上的服务器状态时出现禁止访问(403)的情况

访问 Apache 2.2.22 上的服务器状态时出现禁止访问(403)的情况

尝试访问 www.website.com/server-status 时出现禁止错误

mod_status 已启用

虚拟主机:

<VirtualHost *:8080>
   ServerName  website.com
   ServerAlias www.website.com
   DocumentRoot /var/www/wordpress/
   DirectoryIndex index.php
   <Directory /var/www/wordpress/>
      AllowOverride All
      Order Deny,Allow
      Allow from all
      Options +Indexes
   </Directory>

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .website.com
</Location>

   ErrorLog /var/www/wordpress/logs/error.log
   CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>

我尝试将“允许”从 .website.com 更改为网站 IP,但出现同样的问题。当我尝试将其更改为“允许”时,我收到 404。

我做的另一次尝试是从 127.0.0.1 设置允许并从服务器内部通过 lynx 访问,问题几乎相同。

以下是 error.log 中收到的错误:

[error] [client 127.0.0.1] client denied by server configuration: /var/www/wordpress/server-status

此外,我已禁用 status.conf 位置覆盖,以确保唯一的服务器状态定义位于 VirtualHost 中。在 apache.conf 中设置服务器状态位置可提供相同的结果。

知道我遗漏了什么吗?

我尝试过以下资源,但都没有提供解决方案:

  1. Apache 模块 mod_status
  2. Apache 服务器状态 403 非标准端口
  3. Apachelounge 帖子

谢谢

答案1

允许来自行与您的网站无关。Allow from允许具有指定 IP 地址(或解析为 IP 的域名)的人们访问您的网站。

因此,如果你家的 IP 地址是 2.2.2.2,你可以allow from 2.2.2.2输入不是 allow from yourownwebsite.com

这应该可以修复您的 403(禁止访问),尽管我知道您说您尝试将其更改为 127.0.0.1,并直接从服务器访问它。您是否尝试过将 127.0.0.1 更改为localhost

现在,关于 404。这是完全不同的问题。这是“未找到”错误,而不是“禁止”错误。

默认情况下,VirtualHost 容器实际上并不适合与 mod_status 一起使用。它根本不起作用。根据本网站,您有 2 个选择:

  1. 让服务器监听其他端口(比如 8080)
  2. 将 <VirtualHost *:80> 中的星号更改为你的服务器的公共 IP 地址 - 然后,你就可以访问服务器状态仅有的来自本地主机/127.0.0.1

答案2

检查您是否具有正确的 VirtualHost 配置。您可以尝试为 创建 VirtualHost 配置127.0.0.1,如下所示:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName 127.0.0.1
    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>
    <Directory /var/www>
      Options +FollowSymLinks
      AllowOverride None
      order allow,deny
      allow from all

    </Directory>

</VirtualHost>

找到了这里

答案3

我对 WordPress 不太了解,但如果它是 Laravel、Magento 或任何其他在 Apache 上运行的 Web 软件,那么.htaccess位于根目录中的文件,一个简单的例子来自https://codex.wordpress.org/htaccess就在这里:

 # BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我敢打赌,如果你改变

AllowOverrides All

AllowOverrides None

该页面出现了,然而对我来说.htaccess 文件和 httpd.conf 的混合,以及 Apache 的所有配置文件的混乱,我选择以不同的方式来处理这个问题。

我选择将 .htaccess 文件从上面显示的内容更改为:

 # BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} /server-status
    RewriteRule ".?" "-" [S=1]
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

这将导致 RewriteCond 匹配端点 uri,然后让 RewriteRule 跳过将所有端点重写为 index.php 的控制规则,以便 wordpress 引擎可以使用动态 url。

可能有更简单的方法,但我的 http.conf 如下:

<VirtualHost *:8080>
    ServerName  website.com
    ServerAlias www.website.com
    DocumentRoot /var/www/wordpress/
    DirectoryIndex index.php
    <Directory /var/www/wordpress/>
        AllowOverride All
        Order Deny,Allow
        Allow from all
        Options +Indexes
    </Directory>
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 10.0.0.0/24
    </Location>
    ErrorLog /var/www/wordpress/logs/error.log
    CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>

一些后续阅读?

https://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html

https://httpd.apache.org/docs/2.2/howto/htaccess.html

相关内容