Apache Server-Status nicht gefunden. Überprüfen Sie, ob mod_status aktiviert ist

8

Ich habe die apache_Plugins auf einem Munin-Knoten aktiviert:
ln -sv /usr/share/munin/plugins/apache_* /etc/munin/plugins/

Nach dem Neustart des Knotens mit service munin-node restarthier sind die Fehler, die ich bekomme:

$ munin-node-configure --suggest 2>/dev/null | grep "apache\|Plugin\|------"
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
apache_accesses            | yes  | no [apache server-status not found. check if mod_status is enabled]
apache_processes           | yes  | no [apache server-status not found. check if mod_status is enabled]
apache_volume              | yes  | no [apache server-status not found. check if mod_status is enabled]

Ist mod_statusjedoch bereits aktiviert:

$ a2enmod status
Module status already enabled

Und ein Neustart von Apache macht keinen Unterschied.

Wenn ich versuche, die Plugins manuell auszuführen, bekomme ich Folgendes (ich habe gelesen, dass das Erhalten eines U eine schlechte Nachricht ist, also ist das zumindest konsistent).

$ munin-run apache_accesses --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_accesses'
accesses80.value U

$ munin-run apache_processes --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_processes'
busy80.value U
idle80.value U
free80.value U

$ munin-run apache_volume --debug
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Set /rgid/ruid/egid/euid/ to /110/65534/110 110 /65534/
# Setting up environment
# About to run '/etc/munin/plugins/apache_volume'
volume80.value U

Weiß jemand, warum ich die server-status not foundNachricht immer noch bekomme und wie ich sie loswerden kann?

Aktualisierte Antwort 1

Der Vorschlag von Shane war richtig, einen Anforderungshandler mithilfe Locationund SetHandlerauf der Apache-Site festzulegen. Weitere Informationen zu finden mod_statusSie auf dieser Seite

Ich konnte überprüfen, ob munindie entsprechenden Anfragen tatsächlich gestellt wurden, indem ich mir ansah, /var/log/apache2/access.logwoher ich diese hatte:

127.0.0.1 - - [10/Nov/2011:07:24:15 +0000] "GET /server-status?auto HTTP/1.1" 404 7774 "-" "libwww-perl/5.834

In meinem Fall Locationreichte die Einstellung nicht aus, da ich eine DrupalSite betreibe und die Anforderungen .htaccesszusammen mit neu geschrieben mod_rewritewurden. Um das Problem zu beheben, musste ich die folgende Zeile zu meiner hinzufügen.htaccess

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteCond %{REQUEST_URI} !=/server-status  # <= added this line
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Bitte beachten Sie, dass dies stellt kein Sicherheitsproblem , da der Zugang zu /server-statusauf das beschränkt ist 127.0.0.1in der Apache - Website.

Aktualisierte Antwort 2

Es scheint, dass das Hinzufügen der Locationzur Apache-Site schließlich nicht erforderlich war, da dies bereits in definiert ist /etc/apache2/mods-enabled/status.conf. Übrigens, wenn Sie die ExtendedStatus OnDirektive hinzufügen möchten, sollten Sie dies in dieser Datei tun.

Max
quelle

Antworten:

5

Es scheint, als würde versucht, tatsächlich Anforderungen an das Statusmodul zu stellen. Haben Sie eine richtige Konfiguration für den Statusort in Ihrem VirtualHost? Etwas wie das:

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>
Shane Madden
quelle
Ein gültiger Punkt, obwohl ich in meinem Fall auch etwas mod_rewritearbeiten musste (siehe aktualisierte Frage mit Antwort)
Max
3

Ich fand heraus, dass ich rennen konnte

$ wget http://localhost/server-status?auto

aber nicht

$ wget http://127.0.0.1/server-status?auto

Der erste trifft den Standardserver, der zweite einen virtuellen Server.

Also habe ich explizit einen Apache-Abschnitt hinzugefügt /etc/munin/plugin-conf.d/munin-node

[apache_*]
env.url   http://localhost:%d/server-status?auto
env.ports 80

und bekam meine Munin Apache Graphen.

Marji
quelle
2

Ich habe auf dieser Seite eine Lösung von Many Ayromlou gefunden :

Das Problem ist, dass diese .htaccess-Regeln in WordPress Server-Informationen und Server-Status-URLs übernehmen, die in der Apache-Konfiguration aktiviert wurden, und einen Fehler zurückgeben, der nicht gefunden wurde. Ich bin auf zahlreiche Websites gestoßen, die vorgeschlagen haben, eine Regel hinzuzufügen wie:

  RewriteCond %{REQUEST_URI} !=/server-status

Das hat bei mir nicht funktioniert. Ich bin nicht sicher, ob die Multisite-Version von WordPress (die ich verwende) dies verursacht. Die Regel, die wunderbar funktioniert hat, lautet wie folgt:

  RewriteRule ^(server-info|server-status) - [L]

Diese Regel stoppt die Rewrite-Engine, wenn Serverinformationen oder Serverstatus als Teil der URL analysiert werden.

Janfai
quelle
1

mod_status ist in den Apache-Webserver integriert, um den Serverstatus von einem Webbrowser abzurufen. Mit diesem Modul können wir leicht herausfinden, wie gut der Server arbeitet. Alle Berichte werden im HTML-Format erstellt.

Schritt 1. Überprüfen Sie, ob das Statusmodul aktiviert ist oder nicht apache2ctl -M oder ls / etc / apache2 / sites-enabled

Schritt 2. Wenn nicht aktiviert, aktivieren Sie es mit dem Befehl,

sudo a2enmod status

Schritt 3. Zugriff konfigurieren,

Öffnen Sie /etc/apache2/mods-enabled/status.conf und kommentieren Sie die Zeilen.

        #<Location /server-status>
        #    SetHandler server-status
        #    Require local
        #Require ip 192.0.2.0/24
        #</Location>

Und fügen Sie die folgende Zeile hinzu:

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

Wir können den Zugriff auf den Serverstatus für bestimmte IP-Adressen in dieser Konfiguration einschränken, indem wir die Option Von unserer_ öffentlichen_Adresse zulassen anstelle von Von allen zulassen bearbeiten

Speichern Sie die Datei status.conf.

Schritt 4. Starten Sie Apache mit dem Befehl neu.

/etc/init.d/apache2 Neustart

Schritt 5. Überprüfen Sie die Serverstatusseite im Browser

http: // server-ip / server-status

Hoffe das wäre hilfreich.

Amol
quelle
0

Ich hatte das gleiche Problem. Hier sind einige weitere Diagnoseschritte. Versuchen Sie es

munin-run apache_processes autoconf

Dies ist eine direktere Methode, um den gleichen Fehler " Nein (kein Apache-Server-Status an den Ports 80) " anzuzeigen.

Versuchen Sie es jetzt

wget http://127.0.0.1/server-status?auto

Für mich bedeutet das 403 Verboten .

In meinem Haupt-Apache-Fehlerprotokoll wurde außerdem "Client durch Serverkonfiguration verweigert: / var / www / server-status" angezeigt

Bekommst du das gleiche?

Für mich hat Shane Maddens Antwort das Problem gelöst.

Harry Wood
quelle
Hallo Harry, wenn du das gleiche Problem hast, stimme bitte die Frage ab, da dies die Wahrscheinlichkeit erhöht, Antworten zu erhalten.
Max
Wird es tun, sobald ich genug Ruf habe, um abzustimmen :-)
Harry Wood
0

Wenn / server-status nur ab 127.0.0.1 verboten ist, können Sie eine VirtualHost-Konfiguration für 127.0.0.1 mit folgendem Inhalt erstellen:

<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>

Hier finden Sie eine ausführlichere Erklärung

druss
quelle