NGINX設定 · 1 min read · Jan 23, 2026

Fedora 18でNginxを使用してCGIスクリプトを提供する - ページ 2

3 Fcgiwrapの使用

Fcgiwrapは、各vhostが独自のcgi-binディレクトリを使用できるため、共有ホスティング環境で使用できるCGIラッパーです。

Fedora用のfcgiwrapパッケージがないため、私たちは自分でビルドする必要があります。まず、いくつかの前提条件をインストールします:

yum groupinstall 'Development Tools'
yum install fcgi-devel

次に、以下のようにfcgiwrapをビルドできます:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

これにより、fcgiwrapが/usr/local/sbin/fcgiwrapにインストールされます。

次に、fcgiwrapをデーモンとして実行できるspawn-fcgiパッケージをインストールします:

yum install spawn-fcgi

/etc/sysconfig/spawn-fcgiを開きます…

vi /etc/sysconfig/spawn-fcgi

… そして、ファイルを以下のように修正します:

| # "spawn-fcgi"サービスが動作する前に、いくつかの作業オプションを設定する必要があります。 # SOCKETがファイルを指している場合、このファイルはinitスクリプトによってクリーンアップされます。 # # すべての可能なオプションについては、spawn-fcgi(1)を参照してください。 # # 例 : #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=nginx FCGI_GROUP=nginx FCGI_EXTRA_OPTIONS="-M 0700" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM" |

spawn-fcgiのシステム起動リンクを作成します…

systemctl enable spawn-fcgi.service

… そして、以下のように開始します:

systemctl start spawn-fcgi.service

これで、nginxユーザーとグループが所有する/var/run/fcgiwrap.socketにfcgiwrapソケットが見つかるはずです。

次に、vhost設定ファイルを開きます…

vi /etc/nginx/conf.d/www.example.com.vhost

… そして、server {}コンテナにlocation /cgi-bin {}セクションを追加します:

| server { [...] location /cgi-bin/ { # gzipを無効にします(スクリプトが完了するまでgzipされないため、スクリプトが遅く感じられます) gzip off; # ルートを/usr/libに設定します(このlocation内では、/usr/lib/cgi-binの下のファイルへのアクセスを提供しています) root /var/www/www.example.com; # Fastcgiソケット fastcgi_pass unix:/var/run/fcgiwrap.socket; # Fastcgiパラメータ、標準のものを含めます include /etc/nginx/fastcgi_params; # 非標準パラメータを調整します(SCRIPT_FILENAME) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } [...] } |

nginxをリロードします:

systemctl reload nginx.service

次に、cgi-binディレクトリを作成します - /var/www/www.example.com/cgi-bin、これはlocation /cgi-bin {}コンテナ内でroot /var/www/www.example.com;を定義したためです:

mkdir /var/www/www.example.com/cgi-bin

今、CGIスクリプトをそこに置き、実行可能にします。テスト目的で、小さなHello World Perlスクリプトを作成します(hello_world.cgiの代わりに拡張子.plを使用してhello_world.plを使用することもできます):

vi /var/www/www.example.com/cgi-bin/hello_world.cgi

| #!/usr/bin/perl -w # perlにhtmlヘッダーを送信するように指示します。 # これにより、ブラウザは出力を受け取ります # ではなく、(コマンドライン # サーバー上)を受け取ります。 print "Content-type: text/html\n\n"; # 基本的なhtmlタグを印刷します。 # そしてその内容を印刷します。 print "Hello World!! \n"; print "

Hello world

\n"; |

chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgi

ブラウザを開いてスクリプトをテストします:

http://www.example.com/cgi-bin/hello_world.cgi

すべてがうまくいけば、次の出力が得られるはずです:

4 リンク

著者について

ファルコ・ティメは、Timme Hosting(超高速nginxウェブホスティング)のオーナーです。彼はHowtoForgeのリードメンテイナー(2005年から)であり、ISPConfigのコア開発者の一人(2000年から)でもあります。彼はまた、O’Reillyの書籍「Linux System Administration」にも貢献しています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。