萌えハッカーニュースリーダー

2025/08/29 23:40 Nginx-CGI brings support for CGI to Nginx and angie

出典: https://github.com/pjincz/nginx-cgi
hakase
博士

ロボ子、nginxとAngieにCGIサポートを追加するプラグインが出たみたいじゃぞ!

roboko
ロボ子

CGIですか、博士。少し古い技術というイメージがありますが、まだ使われているのですね。

hakase
博士

そうなんじゃ。記事によると、低頻度アプリケーションやリソース制限のあるシステム、低予算プロジェクト、プロトタイピングには推奨されるみたいじゃな。逆に、高QPS、高トラフィック、高並行性には向かないらしいぞ。

roboko
ロボ子

なるほど。適材適所ということですね。対応OSも色々あるみたいですね。Linuxだけでなく、MacOSやFreeBSDまで。

hakase
博士

そうじゃな。インストール方法も簡単そうじゃぞ。DebianやUbuntuなら、リポジトリをクローンして、パッケージをビルドしてインストールするだけみたいじゃ。

roboko
ロボ子

nginxの設定ファイルにCGIの設定を追加する必要があるのですね。`location /cgi-bin`で指定するのですね。

hakase
博士

その通り!CGIスクリプトは任意の言語で書けるみたいじゃ。shebang (`#!`) を忘れずに、じゃな。

roboko
ロボ子

出力はヘッダーとボディに分かれるのですね。`Status`ヘッダーでレスポンスステータスを指定できるのは便利ですね。

hakase
博士

`cgi_strict on` を推奨って書いてあるな。セキュリティのためにも、strictモードは有効にしておいた方が良さそうじゃ。

roboko
ロボ子

リクエストヘッダーは環境変数に変換されてCGIスクリプトに渡されるのですね。`QUERY_STRING`や`HTTP_ACCEPT`など、よく使うものが揃っていますね。

hakase
博士

リクエストボディは標準入力 (stdin) 経由で渡されるんじゃな。ストリーミングもサポートされているのは嬉しいポイントじゃ。

roboko
ロボ子

長時間実行プロセスについては注意が必要ですね。`stdout`, `stdin`, `stderr` を継承しないようにする必要があるのですね。

hakase
博士

動的なコンテンツ生成には `cgi pass` を使うんじゃな。ステータスコードの変更やリダイレクトもCGIスクリプト内で設定できるみたいじゃ。

roboko
ロボ子

ファイル送信については、小さいファイルはstdoutに直接書き込み、大きいファイルは302リダイレクトを使うのですね。使い分けが重要なのですね。

hakase
博士

Python, Ruby, Perl, C, C++ など、色々な言語が使えるのは魅力的じゃな。ロボ子はどの言語でCGIスクリプトを書いてみたい?

roboko
ロボ子

私はやはりPythonでしょうか。豊富なライブラリが使えますし、記述も比較的簡単ですから。

hakase
博士

なるほどな。オプションも色々あるぞ。`cgi <on|off>` でモジュールの有効/無効を切り替えたり、`cgi_interpreter` でインタープリターを指定したり。

roboko
ロボ子

`cgi_strict <on|off>` はセキュリティに関わる重要なオプションですね。標準環境変数もRFC3875に準拠しているのは安心です。

hakase
博士

既知の問題として、`PATH_TRANSLATED` の実装がRFC3875に正確に準拠していない点と、RDNSの実装が `/etc/hosts` を参照しない点があるみたいじゃな。注意が必要じゃ。

roboko
ロボ子

CGIは確かに古い技術ですが、このプラグインを使えば、特定の状況下ではまだまだ活躍できそうですね。勉強になりました、博士。

hakase
博士

そうじゃな!最後に一つ、CGIスクリプトで「Hello World」を表示する時、ロボットはなんて言うと思う?

roboko
ロボ子

えっと…「01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100」でしょうか?

hakase
博士

ブー!残念!正解は「Hello, humans!」じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search