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 プロセスを開始します。
さらに読む:
答え2
考えられる解決策は 2 つあります。
Python の CGIHTTPServer を使用します。設定は不要で、コンパイルしたプログラムを
cgi-bin
ディレクトリに配置し、python -m CGIHTTPServer
親ディレクトリで起動するだけです。プログラムは path で呼び出すことができます/cgi-bin/yourprogramname
。これはすでに動作している HTTP サーバーですが、その前に Nginx を配置したい場合は、単純なリバース プロキシ (proxy_pass で十分なはずです) に設定してください。ApacheのネイティブCGIサポートを使用します。Apacheのドキュメント構成の場合、ディレクトリ構造は最初のオプションと同等になります。
また、C ではなく Go のような言語を使用することで、実際のビルド プロセスを実行する関数を呼び出すことができる HTTP サーバーを 10 行程度で Go で記述できるため、移動する部分の量を減らすこともできます。