ソケットベースのnginxと組み合わせてphp-cgiを設定する

みなさんこんにちは。



内部には、unix:ソケットに基づいてphp-cgiを構成する方法の例があります。

この例は、UbuntuおよびDebianディストリビューション向けに設計されています。





はじめに



個人的に、私はこの方法が本当に好きなので、私はそれをよく知らない一般の人と共有することにしました。



まあ、まず、それは非常に単純だからです。

第二に、ソケットのおかげで柔軟

第三に、高速です。

さて、権利を含むその他の機会)



設置



その後、特別な標準アクションはありません:

nginx


sudo apt-get update

sudo apt-get install nginx



php


sudo apt-get php5-cgiをインストール



PHPとnginxをバインドする



リンクするには、1人の良い人Till Klampaeckelのスクリプトを使用します。

そして、 / etc / init.d /ディレクトリにphp-fcgidファイルを作成します

以下を記述します:

 #!/ bin / sh
 #
 #著者:Till Klampaeckel <till@php.net>
 #クレジット
 #*オリジナルスクリプト:http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-09/msg00468.html
 #*改善:http://till.klampaeckel.de/blog/archives/30-PHP-performance-III-Running-nginx.html
 #* CouchDBの起動スクリプトに触発されたすべてのLinux起動スクリプトfu(by Noah Slater)

 SCRIPT_OK = 0
 SCRIPT_ERROR = 1

 DESCRIPTION = "php-fcgi super-duper-control thing"
 NAME = php-fgcid
 SCRIPT_NAME = $(ベース名$ 0)

 WWW_GROUP = www-data
 PHP_CGI = / usr / bin / php-cgi

 phpfcgid_users = "user1 user2"
 phpfcgid_children = "2"
 phpfcgid_tmpdir = "/ tmp"
 phpfcgid_requests = "100"

 log_daemon_msg(){
    エコー$ @
 }

 log_end_msg(){
     #LSBライブラリに置き換えられるダミー関数。

     if "$ 1"!= "0"; それから
         echo "$ DESCRIPTIONのエラー:$ NAME"
     fi
     1ドルを返します
 }

 phpfcgid_start(){
     echo "$ NAMEを$ phpfcgid_childrenの子で開始(req:$ phpfcgid_requests)。"

    エクスポートPHP_FCGI_CHILDREN = $ phpfcgid_children
     export PHP_FCGI_MAX_REQUESTS = $ phpfcgid_requests

     $ {phpfcgid_users}のユーザー向け。 する
         socketdir = "$ {phpfcgid_tmpdir} /。fastcgi。$ {user}"
         mkdir -p $ {socketdir}
         chown $ {user}:$ {WWW_GROUP} $ {socketdir}
         chmod 0750 $ {socketdir}
         su -m $ {user} -c "$ {PHP_CGI} -b $ {socketdir} / socket&"
    やった
 }

 phpfcgid_stop(){
     echo "$ NAMEを停止しています。"
     pids = `pgrep php-cgi`
     pkill php-cgi
 }

 phpfcgid_status(){
     log_daemon_msg「実装予定:ステータス」
     log_end_msg $ SCRIPT_ERROR
 }


 parse_script_option_list(){

    ケース「$ 1」
        開始)
             log_daemon_msg "開始$説明" $ NAME
             if phpfcgid_start; それから
                 log_end_msg $ SCRIPT_OK
            他に
                 log_end_msg $ SCRIPT_ERROR
             fi
             ;;
        停止)
             log_daemon_msg "$説明の停止" $ NAME
             if phpfcgid_stop; それから
                 log_end_msg $ SCRIPT_OK
            他に
                 log_end_msg $ SCRIPT_ERROR
             fi
             ;;
        再起動|強制リロード)
             log_daemon_msg "$ DESCRIPTIONの再起動" $ NAME
             if phpfcgid_stop; それから
                 if phpfcgid_start; それから
                     log_end_msg $ SCRIPT_OK
                他に
                     log_end_msg $ SCRIPT_ERROR
                 fi
            他に
                 log_end_msg $ SCRIPT_ERROR
             fi
             ;;
        ステータス)
             phpfcgid_status
             ;;
         *)
            猫<< EOF>&2
使用法:$ SCRIPT_NAME {start | stop | restart | force-reload | status}
 Eof
             exit $ SCRIPT_ERROR
             ;;
    エサック
 }

 parse_script_option_list $ @




カスタマイズする



nginx設定では、fastcgi_passを使用してユーザーコンプライアンスを設定します。

設定例:

サーバー{
	 80を聞きます。
	 server_name myhost.com;

	 access_log /var/log/nginx/myhost.com.access.log;

	場所/ {
		自動索引オン。
		ルート/var/www/myhost.com;
		 index index.php index.html index.htm;
	 }

	ロケーション〜.php {
		 fastcgi_paramsを含めます。

		 fastcgi_pass unix:/tmp/.fastcgi.www-data/socket;
		 fastcgi_index index.php;

		 fastcgi_param SCRIPT_FILENAME /var/www/myhost.com/$fastcgi_script_name;
	 }
 }




スクリプトの最初の実行:

sudo bash /etc/init.d/php-fcgid



変更後、nginxを再起動して、どのようにするかを考えます。



実際にはそれだけです。

お楽しみください!



All Articles