在 Centos 上启用 /server-status 时出现错误消息,Apache 版本为 httpd-2.2.3-31

在 Centos 上启用 /server-status 时出现错误消息,Apache 版本为 httpd-2.2.3-31

我在 httpd.conf 上启用了以下内容:

扩展状态开启

加载模块 status_module 模块/mod_status.so

并且:


名称虚拟主机 *:80

<VirtualHost *:80>
  ServerName myserver.com
  ServerAlias myserver.com 

  DocumentRoot /prod/html

  RewriteEngine on
  RewriteCond %{HTTP_HOST} .*myserver.com$
  RewriteRule /(.*) http://myserver.com/$1 [R,L]





**<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost
</Location>**

</VirtualHost>

跑步时lynx http://localhost/server-status 收到以下消息: 您无权访问此服务器上的 /server-status。

我在 /etc/httpd 文件夹中看不到任何与 /server-status 相关的内容,这些是我在 /etc/httpd 下的文件夹:

**conf
conf.d
logs -> ../../var/log/httpd
modules -> ../../usr/lib/httpd/modules
run -> ../../var/run**

知道为什么我会得到“没有权限”错误?我需要安装另一个包才能获取它吗?谢谢!!Dotan。

答案1

尝试使用 IP 而不是主机名,这是我的主机名(::1 在那里,因为服务器也启用了 IPv6)

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 ::1
</Location>

使用

lynx http://localhost/server-status 

可能与虚拟主机“myserver.com”不匹配,因此您可以尝试将 Location /server-status 放在 http.conf 中的 VirtualHost 之外

答案2

万一这对某人有帮助:

在较新版本的 Apache 中,有一个默认的服务器状态配置设置conf/extra/httpd-info.conf这将覆盖任何服务器状态设置 httpd配置文件

conf/extra/httpd-info.conf 中的默认配置设置为“允许来自 .example.com”,并将消除你在 httpd.conf 中所做的所有花哨的服务器状态更改

因此,如果您遇到权限问题,请确保您正在编辑正确的文件!

答案3

你可能想看看你的/etc/hosts

127.0.0.1 localhost

答案4

当我尝试启用在 Kubernetes 中运行的 Apache Web 服务器的状态页面时,我遇到了类似的问题。

这是我一直在处理的图像:registry.k8s.io/hpa-example,配备有Apache/2.4.10 (Debian) PHP/5.6.14

解决方案

我只是创建了一个自定义配置文件(/etc/apache2/conf-enabled/my-custom-config.conf),其中包含以下内容

<Location "/server-status">
  SetHandler server-status
  Require all granted
</Location>

并将其作为 Volume 传递给 Pod。笔记:此配置不适用于生产环境,因为 Apache 将允许任何调用者查看状态页面。这对于我的测试目的来说没问题。


这是我最终使用的部署 yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: apache-config
data:
  my-custom-config.conf: |
    <Location "/server-status">
      SetHandler server-status
      Require all granted
    </Location>

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: registry.k8s.io/hpa-example
        volumeMounts:
        - name: apache-config
          mountPath: /etc/apache2/conf-enabled/
        ports:
        - containerPort: 80
      volumes:
      - name: apache-config
        configMap:
          name: apache-config

---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

这就是我运行服务器的方式:

kubectl apply -f <path_to_the_deployment_yaml>

这是我测试状态页面的方式:

kubectl run -i --tty test-pod --rm --image=busybox:1.28 \
  --restart=Never -- /bin/sh -c "wget -O- http://php-apache/server-status"

相关内容