PHP ではなく Nginx で FastCGI と C を使用するのはなぜですか?

PHP ではなく Nginx で FastCGI と C を使用するのはなぜですか?

NginxがURLのリクエストを受け取るたびに、(コンパイルされた)Cプログラムを実行したいとします。https://myserver.com/programs/my-C-file

具体的には、GitHub の PR がマージされたときに、C で記述されたカスタム ビルドおよびリリース プロセスを開始するフックが必要です (ビルド プロセスが複雑なため、C を使用したいと思います。ステップ数が多く、Bash や PHP よりも C で stdout を解析する方が簡単です)。

しかし、PHP ファイルではなく FastCGI を使用して C バイナリを直接トリガーする必要がある理由はあるのでしょうかexec('my C program')?

明らかに、数日おきに数回以上このようなエラーが発生することはないので、スケールアップについて心配していません。また、FastCGI には多くの追加設定が必要ですが、PHP はそのまま使用できるようです。PHP ファイルを作成し、実行してexec()、Nginx でブロックを作成するだけです。

あるいは、私がこのプロセス全体について間違って考えていて、もっと簡単な方法があるのか​​もしれません。

答え1

はい、nginx と FastCGI を使用して C バイナリを実行することは可能です。必要な手順の概要は次のとおりです。

  • nginxをインストールする
  • spawn-fcgiをインストールする
  • fastcgi データベースをインストールする (オプション)
  • IP/ドメインをリッスンするサーバーと、FCGI アップストリームを localhost/port に送信する場所を指定して、nginx vhost 構成を作成します。
  • Cプログラムをコンパイルします(プログラムには以下が含まれている必要がありますwhile (FCGI_Accept() >= 0) { }
  • プログラムのラッパーとして、ローカルホスト/ポートをリッスンする spawn-fcgi プロセスを開始します。

さらに読む:

NGINX を使用した C FastCGI スクリプトの実行

【紹介記事】Nginx + FastCGIプログラム(C/C++)のデモとビルドへのデプロイ

答え2

考えられる解決策は 2 つあります。

  1. Python の CGIHTTPServer を使用します。設定は不要で、コンパイルしたプログラムをcgi-binディレクトリに配置し、python -m CGIHTTPServer親ディレクトリで起動するだけです。プログラムは path で呼び出すことができます/cgi-bin/yourprogramname。これはすでに動作している HTTP サーバーですが、その前に Nginx を配置したい場合は、単純なリバース プロキシ (proxy_pass で十分なはずです) に設定してください。

  2. ApacheのネイティブCGIサポートを使用します。Apacheのドキュメント構成の場合、ディレクトリ構造は最初のオプションと同等になります。

また、C ではなく Go のような言語を使用することで、実際のビルド プロセスを実行する関数を呼び出すことができる HTTP サーバーを 10 行程度で Go で記述できるため、移動する部分の量を減らすこともできます。

関連情報