Warum FastCGI und C in Nginx statt PHP?

Warum FastCGI und C in Nginx statt PHP?

Ich möchte jedes Mal, wenn Nginx eine Anfrage für eine URL erhält, ein (kompiliertes) C-Programm ausführen, sagen wirhttps://myserver.com/programs/my-C-file.

Genauer gesagt, wenn ein PR in GitHub zusammengeführt wird, möchte ich einen Hook, um einen benutzerdefinierten Build- und Release-Prozess zu initiieren, der in C geschrieben ist. (Ich möchte C verwenden, weil der Build-Prozess komplex ist. Er umfasst viele Schritte und es ist einfacher, stdout in C zu analysieren als in Bash oder PHP.)

Aber gibt es einen Grund, warum ich FastCGI verwenden sollte, um die C-Binärdatei direkt auszulösen, anstatt eine PHP-Datei und exec('my C program')?

Ich bekomme offensichtlich nicht mehr als ein paar davon alle paar Tage, also mache ich mir keine Sorgen um die Skalierung, und es scheint, dass FastCGI eine Menge zusätzlicher Konfiguration erfordert, während ich PHP sofort verwenden kann. Erstellen Sie einfach eine PHP-Datei, führen Sie sie aus exec()und erstellen Sie einen Block in Nginx.

Oder vielleicht verstehe ich den gesamten Vorgang falsch und es gibt einen einfacheren Weg.

Antwort1

Ja, es ist möglich, nginx und FastCGI zu verwenden, um Ihre C-Binärdatei auszuführen. Hier ist ein grober Überblick über die notwendigen Schritte:

  • Installieren Sie nginx
  • Installieren Sie spawn-fcgi
  • Fastcgi-Datenbank installieren (optional)
  • Erstellen Sie eine Nginx-Vhost-Konfiguration mit einem Server, der auf Ihrer IP/Domäne lauscht, und einem Standort, der ein FCGI-Upstream an den lokalen Host/Port sendet.
  • Kompilieren Sie Ihr C-Programm (Ihr Programm sollte enthalten while (FCGI_Accept() >= 0) { })
  • Starten Sie den Spawn-FCGI-Prozess, um auf dem lokalen Host/Port als Wrapper für Ihr Programm zu lauschen.

Mehr zum Thema:

Ausführen eines C FastCGI-Skripts mit NGINX

[Einführungsartikel] Nginx + FastCGI-Programm (C/C++) Demo und Bereitstellung zum Erstellen

Antwort2

Zwei mögliche Lösungen:

  1. Verwenden Sie den CGIHTTPServer von Python. Keine Konfiguration, legen Sie einfach Ihr kompiliertes Programm in ein cgi-binVerzeichnis und starten Sie es python -m CGIHTTPServerim übergeordneten Verzeichnis. Sie können Ihr Programm über den Pfad aufrufen /cgi-bin/yourprogramname. Dies ist bereits ein funktionierender HTTP-Server. Wenn Sie noch Nginx davor haben möchten, konfigurieren Sie es für einen einfachen Reverse-Proxy (proxy_pass sollte ausreichen).

  2. Nutzen Sie die native CGI-Unterstützung von Apache. Ich verweise Sie aufApache-DokumentationFür die Konfiguration entspricht die Verzeichnisstruktur der ersten Option.

Sie könnten die Anzahl der beweglichen Teile auch reduzieren, indem Sie nicht C, sondern eine Sprache wie Go verwenden, da Sie in Go in etwa 10 Zeilen einen HTTP-Server schreiben können, der eine Funktion aufrufen kann, um den eigentlichen Build-Prozess auszuführen.

verwandte Informationen