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

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

Jun 23, 2016 pm 02:28 PM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles