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

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

WBOY
WBOYオリジナル
2016-06-23 14:28:451132ブラウズ

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
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。