nginx: Kann ich die Ausgabe eines Shell-Befehls für eine bestimmte URL anzeigen?

7

Ich bin nicht sicher, ob dies überhaupt möglich ist, aber kann ich die Standardausgabe eines Linux-Befehls über den Webserver anzeigen?

Der Befehl, den ich ausführen möchte, echo 'status' | nc localhost 4730gibt eine Zeichenfolge mit dem Status des Gearman-Jobservers zurück.

$echo 'status' | nc localhost 4730
function1      0       0       0
function2      0       0       1

Auf meinem Server läuft Nginx. Ich möchte eine URL wie http: //domain.tld/gearman-status öffnen und sie sollte den aktuellen Status zurückgeben, indem dieser Befehl ausgeführt wird.

Was soll ich dazu in den Standortblock von nginx setzen?

location /gearman-status {
  ?
}

Vielen Dank

Mridul Kashatria
quelle

Antworten:

4

nginxEs fehlt die CGI-Unterstützung, sodass keine Skripte direkt ausgeführt werden können. Sie müssen den FastCGI-Server einrichten und ihn nginxmithilfe fastcgi_passIhrer locationAnweisung aufrufen . Es gibt ein Beispiel für einen solchen FastCGI-Wrapper im Nginx-Wiki - siehe diesen Link .

AlexD
quelle
Danke Alex. FastCGI scheint ein Overkill für diese einfache Anforderung zu sein, aber da das Perl-Skript für diesen Fall im Wiki angegeben ist, würde ich mich dafür entscheiden.
Mridul Kashatria
Link funktioniert nicht mehr (404)
Anneb
1

Sie können einfach eine kleine PHP- oder Perl-Datei schreiben und in den gewünschten Pfad einfügen. Diese kleine Datei führt das gewünschte Skript oder die gewünschten Befehle aus und druckt die Ausgabe. Sie können dazu den Befehl backquotes `` verwenden.

Khaled
quelle