nginx と FastCGI に問題があります。私は Windows 7 で作業しており、次の項目を正常にコンパイル/インストール/セットアップしました:
- nginx サーバー
- FastCGI ライブラリ
- spawn-fcgi-win32.exe
メッセージを Web サーバーに送り返すだけの単純な FastCGI アプリケーションを作成しました。これは、コードの簡略化されたバージョンです。
while(FCGI_Accept()) {
hello();
}
を使用していくつかのプロセスを生成し、spawn-fcgi-win32.exe
すべてが正常に機能しました。Web ブラウザーからアプリにアクセスすると、「hello」メッセージが返されました。
ただし、同時実行性を確認するために、アプリケーションを次のように変更しました。
while(FCGI_Accept()) {
sleep10(); //sleep 10 seconds
hello();
}
次に、ブラウザで 2 つの別々のタブを開き、アプリにアクセスしました。両方のタブが 10 秒後に「hello」メッセージを返すと予想していましたが、そのタイムアウト後に最初のタブだけがそれを返しました。2 番目のタブは 20 秒後にそれを実行しました。これはnginxのアクセスログです:
127.0.0.1 - クラウディ [2015 年 2 月 25 日: 17:45:16 +0100] "GET /foo.php HTTP/1.1" 200 3664 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"
127.0.0.1 - クラウディ [2015 年 2 月 25 日: 17:45:26 +0100] "GET /foo.php HTTP/1.1" 200 3664 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"
ほぼ同時にリクエストを送信しましたが、nginx は 10 秒後に 2 番目のリクエストを「認識」したことに注意してください。私の nginx 構成ファイルは、ワーカーごとに 4 つのワーカーと 1024 の接続を設定します。nginx がリクエストごとに 1 つずつ、2 つの同時ワーカーを生成しないのはなぜですか?
ところで、両方の FastCGI プロセスが動作していることは、プロセス ID と hello メッセージを一緒にダンプすることで確認済みです。
ありがとう