ホームページ > バックエンド開発 > PHPチュートリアル > Debian 6 上の Nginx と PHP-FastCGI (Squeeze)

Debian 6 上の Nginx と PHP-FastCGI (Squeeze)

WBOY
リリース: 2016-06-23 14:28:45
オリジナル
1135 人が閲覧しました

Debian 6 上の Nginx と PHP-FastCGI (Squeeze)

公開日: 2011 年 5 月 9 日月曜日、Phil Paradis による

nginx Web サーバーは、低トラフィック Web サイトと高トラフィック Web サイトの両方のニーズを効率的に処理するように設計された高速で軽量のサーバーです。一般的には静的コンテンツを提供するために使用されますが、動的ページも処理することができます。このガイドは、Debian 6 (Squeeze) Linux VPS 上で FastCGI 経由で PHP を使用して nginx を起動して実行するのに役立ちます。

スタート ガイドに記載されている手順にすでに従っていることを前提としています。これらの手順は、SSH 経由で Linode VPS に root ログインして実行する必要があります。

目次

ホスト名の設定 必要なパッケージのインストール 仮想ホスティングの構成 FastCGI を使用した PHP のテスト ディレクトリの作成 UNIX ソケットの構成例 TCP ソケットの構成例 セキュリティに関する重要な考慮事項 サービスの有効化と開始詳細

ホスト名を設定する

このガイドで説明されているコンポーネントのインストールと構成を開始する前に、ホスト名の設定手順に従っていることを確認してください。次のコマンドを発行して、正しく設定されていることを確認します。

hostname
ログイン後にコピー
hostname -f 
ログイン後にコピー

最初のコマンドでは短いホスト名が表示され、2 番目のコマンドでは完全修飾ドメイン名 (FQDN) が表示されます。

必要なパッケージをインストールする

次のコマンドを発行しますシステムを更新し、nginx Web サーバー、PHP、およびコンパイラ ツールをインストールするには:

apt-get update
ログイン後にコピー
apt-get upgrade
ログイン後にコピー
apt-get install nginx php5-cli php5-cgi spawn-fcgi 
ログイン後にコピー

仮想ホスティングを構成する

ディレクトリを作成する

このガイドでは、ドメイン "example.com" がサンプル サイトとして使用されます。次の構成手順では、独自のドメイン名を置き換える必要があります。まず、コンテンツとログ ファイルを保持するディレクトリを作成します。

mkdir -p /srv/www/www.example.com/public_html
ログイン後にコピー
mkdir /srv/www/www.example.com/logs
ログイン後にコピー
chown -R www-data:www-data /srv/www/www.example.com 
ログイン後にコピー

UNIX ソケットの構成例

次に、サイトの仮想ホスト ファイルを定義する必要があります。この例では、UNIX ソケットを使用して fcgiwrap に接続します。 「example.com」のすべてのインスタンスを必ずドメイン名に変更してください。

ファイル:/etc/nginx/sites-available/www.example.com

server {
ログイン後にコピー
ログイン後にコピー
  server_name www.example.comexample.com; 
ログイン後にコピー
  access_log /srv/www/www.example.com/logs/access.log; 
ログイン後にコピー
  error_log /srv/www/www.example.com/logs/error.log;
ログイン後にコピー
ログイン後にコピー
  root /srv/www/www.example.com/public_html;
ログイン後にコピー
ログイン後にコピー
  location / {
ログイン後にコピー
ログイン後にコピー
    index index.htmlindex.htm;
ログイン後にコピー
  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  location ~ \.php$ {
ログイン後にコピー
ログイン後にコピー
    include /etc/nginx/fastcgi_params;
ログイン後にコピー
ログイン後にコピー
    fastcgi_passunix:/var/run/php-fastcgi/php-fastcgi.socket;
ログイン後にコピー
    fastcgi_index index.php;
ログイン後にコピー
ログイン後にコピー
    fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
ログイン後にコピー
ログイン後にコピー
  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
} 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次の内容を含む /usr/bin/php-fastcgi という名前のファイルを作成します:

File:/usr/bin/php-fastcgi

#!/bin/bash
ログイン後にコピー
ログイン後にコピー
FASTCGI_USER=www-data
ログイン後にコピー
ログイン後にコピー
FASTCGI_GROUP=www-data
ログイン後にコピー
ログイン後にコピー
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
ログイン後にコピー
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
ログイン後にコピー
CHILDREN=6 PHP5=/usr/bin/php5-cgi
ログイン後にコピー
/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
ログイン後にコピー

次のコマンド:

chmod +x /usr/bin/php-fastcgi 
ログイン後にコピー
ログイン後にコピー

TCP ソケットの設定例

あるいは、代わりに TCP ソケットを使用することもできます。その場合は、nginx 仮想ホスト構成ファイルを次の例のように変更します。繰り返しますが、「example.com」のすべてのインスタンスをドメイン名に置き換えてください。

File:/etc/nginx/sites-available/www.example.com

server {
ログイン後にコピー
ログイン後にコピー
  server_name www.example.com example.com; 
ログイン後にコピー
  access_log /srv/www/www.example.com/logs/access.log;
ログイン後にコピー
  error_log /srv/www/www.example.com/logs/error.log;
ログイン後にコピー
ログイン後にコピー
  root /srv/www/www.example.com/public_html;
ログイン後にコピー
ログイン後にコピー
  location / {
ログイン後にコピー
ログイン後にコピー
    index  index.html index.htm;
ログイン後にコピー
  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  location ~ \.php$ {
ログイン後にコピー
ログイン後にコピー
    include /etc/nginx/fastcgi_params;
ログイン後にコピー
ログイン後にコピー
    fastcgi_pass 127.0.0.1:9000;
ログイン後にコピー
    fastcgi_index index.php;
ログイン後にコピー
ログイン後にコピー
    fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
ログイン後にコピー
ログイン後にコピー
  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
} 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次の内容を含む /usr/bin/php-fastcgi という名前のファイルを作成します:

File:/usr/bin/php-fastcgi

#!/bin/bash 
ログイン後にコピー
FASTCGI_USER=www-data 
ログイン後にコピー
FASTCGI_GROUP=www-data 
ログイン後にコピー
ADDRESS=127.0.0.1 PORT=9000 
ログイン後にコピー
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid 
ログイン後にコピー
CHILDREN=6 
ログイン後にコピー
PHP5=/usr/bin/php5-cgi  
ログイン後にコピー
/usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5 
ログイン後にコピー

実行可能にする次のコマンドを発行して、次のコマンドを実行します。

chmod +x /usr/bin/php-fastcgi 
ログイン後にコピー
ログイン後にコピー

セキュリティに関する重要な考慮事項

ファイルのアップロード (画像など) をサポートするアプリケーションを実行する予定がある場合、上記の構成では任意のコードの実行が許可され、セキュリティ リスクにさらされる可能性があります。この動作を簡単に説明すると、「.php」で終わる適切に作成された URI と、実際に有効な PHP を含む悪意のある画像ファイルの組み合わせにより、画像が PHP として処理される可能性があるということです。

この問題を軽減するには、 try_files ディレクティブを含めるように構成を変更することもできます。この修正では、nginx と php-fcgi ワーカーが同じサーバー上に存在する必要があることに注意してください。

location ~ \.php$ {
ログイン後にコピー
ログイン後にコピー
  try_files $uri =404;
ログイン後にコピー
  include /etc/nginx/fastcgi_params;
ログイン後にコピー
ログイン後にコピー
  fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
ログイン後にコピー
  fastcgi_index index.php;
ログイン後にコピー
ログイン後にコピー
  fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
ログイン後にコピー
ログイン後にコピー
} 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

さらに、アプリケーションが使用するアップロード ディレクトリを保護することをお勧めします。次の構成の抜粋は、「/images」ディレクトリの保護を示しています。

location ~ \.php$ {
ログイン後にコピー
ログイン後にコピー
  include /etc/nginx/fastcgi_params;
ログイン後にコピー
ログイン後にコピー
  if ($uri !~ "^/images/") {
ログイン後にコピー
    fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
ログイン後にコピー
  }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  fastcgi_index index.php;
ログイン後にコピー
ログイン後にコピー
  fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
ログイン後にコピー
ログイン後にコピー
} 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

サービスを有効にして開始する

次のコマンドを発行してサイトを有効にします:

cd /etc/nginx/sites-enabled/
ログイン後にコピー
ln -s /etc/nginx/sites-available/www.example.com 
ログイン後にコピー

Create a file named /etc/init.d/php-fastcgi with the following contents:

File:/etc/init.d/php-fastcgi

#!/bin/bash
ログイン後にコピー
ログイン後にコピー
PHP_SCRIPT=/usr/bin/php-fastcgi
ログイン後にコピー
FASTCGI_USER=www-data
ログイン後にコピー
ログイン後にコピー
FASTCGI_GROUP=www-data
ログイン後にコピー
ログイン後にコピー
PID_DIR=/var/run/php-fastcgi
ログイン後にコピー
PID_FILE=/var/run/php-fastcgi/php-fastcgi.pid
ログイン後にコピー
RET_VAL=0
ログイン後にコピー
case "$1" in
ログイン後にコピー
  start)
ログイン後にコピー
    if [[ ! -d $PID_DIR ]]
ログイン後にコピー
    then
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      mkdir $PID_DIR
ログイン後にコピー
      chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
ログイン後にコピー
      chmod 0770 $PID_DIR
ログイン後にコピー
    fi
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    if [[ -r $PID_FILE ]]
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    then
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      echo "php-fastcgi already running with PID `cat $PID_FILE`"
ログイン後にコピー
      RET_VAL=1
ログイン後にコピー
ログイン後にコピー
    else
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      $PHP_SCRIPT
ログイン後にコピー
      RET_VAL=$?
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    fi
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  ;;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  stop)
ログイン後にコピー
    if [[ -r $PID_FILE ]]
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    then
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      kill `cat $PID_FILE`
ログイン後にコピー
      rm $PID_FILE
ログイン後にコピー
ログイン後にコピー
      RET_VAL=$?
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      else  echo "Could not find PID file $PID_FILE"
ログイン後にコピー
      RET_VAL=1
ログイン後にコピー
ログイン後にコピー
    fi
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  ;;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  restart)
ログイン後にコピー
    if [[ -r $PID_FILE ]]
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    then  kill `cat $PID_FILE`
ログイン後にコピー
      rm $PID_FILE
ログイン後にコピー
ログイン後にコピー
      RET_VAL=$?
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    else
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      echo "Could not find PID file $PID_FILE"
ログイン後にコピー
    fi
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    $PHP_SCRIPT
ログイン後にコピー
    RET_VAL=$?
ログイン後にコピー
  ;;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  status)
ログイン後にコピー
    if [[ -r $PID_FILE ]]
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    then
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      echo "php-fastcgi running with PID `cat $PID_FILE`"
ログイン後にコピー
      RET_VAL=$?
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    else
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
      echo "Could not find PID file $PID_FILE, php-fastcgi does not appear to be running"
ログイン後にコピー
    fi
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  ;;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  *)
ログイン後にコピー
    echo "Usage: php-fastcgi {start|stop|restart|status}"
ログイン後にコピー
    RET_VAL=1
ログイン後にコピー
  ;;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
esac
ログイン後にコピー
exit $RET_VAL 
ログイン後にコピー

Start php-fastcgi and nginx by issuing the following commands:

chmod +x /etc/init.d/php-fastcgi
ログイン後にコピー
update-rc.d php-fastcgi defaults
ログイン後にコピー
/etc/init.d/php-fastcgi start
ログイン後にコピー
/etc/init.d/nginx start 
ログイン後にコピー

Test PHP with FastCGI

Create a file called "test.php" in your site's "public_html" directory with the following contents:

File:/srv/www/example.com/public_html/test.php

<?php phpinfo(); ?> 
ログイン後にコピー

When you visit http://www.example.com/test.php in your browser, the standard "PHP info" output is shown. Congratulations, you've configured the nginx web server to use PHP-FastCGI for dynamic content!

More Information

You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

 

The nginx Homepage FastCGI Project Homepage PHP Documentation Basic Ngnix Configuration
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート