ホームページ バックエンド開発 PHPチュートリアル php-fpm をインストールして構成し、Nginx+PHP 運用環境を構築する

php-fpm をインストールして構成し、Nginx+PHP 運用環境を構築する

Jun 02, 2018 am 10:19 AM
php php-fpm

この記事では、主に Nginx+PHP 運用環境を構築するための php-fpm のインストールと設定方法を紹介します。php-fpm の機能は、PHP パッケージに FastCGI プロセス管理を統合することです。

nginx PHP 自体はそれを処理できません。PHP は単なる Web サーバーです。リクエストが受信されると、それが PHP リクエストの場合は、処理のために PHP インタープリターに送信され、結果がクライアントに返されます。

nginxは通常、fastcgi管理プロセスにリクエストを送信して処理し、fascgi管理プロセスが結果を処理するcgiサブプロセスを選択してnginxに返します

この記事ではphp-fpmを例に作り方を紹介します。 nginx サポート PHP

1. php-fpm をコンパイルしてインストールします

PHP-FPM とは

PHP-FPM は、PHP でのみ使用される PHP FastCGI マネージャーであり、http://php- fpm.org/download.

PHP-FPM は実際には、FastCGI プロセス管理を PHP パッケージに統合するように設計された PHP ソース コードへのパッチです。 PHP ソース コードにパッチを適用する必要があり、PHP をコンパイルしてインストールした後に使用できるようになります。

PHP の新しいバージョンには php-fpm が統合されており、サードパーティのパッケージではなくなりました。 PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。そのため、spawn-fcgi よりも多くの利点があるため、PHP に正式に組み込まれています。 ./configure の –enable-fpm パラメータを使用して PHP-FPM をオンにできます。その他のパラメータは php 用に設定されます。オプションの具体的な意味については、こちらをご覧ください。

インストール前の準備
centos下で実行

yum -y install gcc automake autoconf libtool make

yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel
ログイン後にコピー

libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel 
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel 
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel 
krb5 krb5-devel libidn libidn-devel openssl openssl-devel
ログイン後にコピー

新バージョンのphp-fpmインストール(推奨インストール方法)

wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt
ログイン後にコピー

--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath 
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets 
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex 
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli 
--with-gd --with-jpeg-dir
ログイン後にコピー

りー

上記2つ php-fpmは任意の方法でインストールできます。 インストール後、コンテンツは/usr/local/phpディレクトリに配置されます

201615100155789.png (300×41)

以上でphp-fpmのインストールは完了です。

以下はphp-fpm実行ユーザーを設定するものです

make all install
ログイン後にコピー

Modify

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf
ログイン後にコピー

www-dataユーザーが存在しない場合は、最初にwww-dataユーザーを追加します

user = www-data
group = www-data
ログイン後にコピー

2. nginx をコンパイルしてインストールします

3. php-fpm をサポートするように nginx 設定ファイルを変更します

nginx のインストールが完了したら、nginx 設定ファイルを nginx.conf

に変更します。次の設定をサーバーセクションに追加します。赤色のコンテンツ設定に注意してください。そうでない場合は、「入力ファイルが指定されていません」というエラーが表示されます

IV. テスト php ファイルを作成します

/usr/local/nginx/html にindex.phpファイルを作成し、以下の内容を入力します

groupadd www-data
useradd -g www-data www-data
ログイン後にコピー

5.サービスを開始します

php-fpmとnginxを開始します

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
ログイン後にコピー

php-fpm 閉じて再起動します。記事の最後を参照してください

6. ブラウザーにアクセスします

http://サーバー ip/index.php にアクセスすると、php 情報が表示されます。


201615100326710.png (300×120)

7. エラー解決

Nginx を使用すると、502 Bad Gateway エラーと 504 Gateway Time-out エラーが頻繁に発生します。これらの 2 つの一般的なエラーを分析してみましょう。エラーの解決策。


1.502 Bad Gateway error

php.ini と php-fpm.conf には、それぞれ max_execution_time と request_terminate_timeout という 2 つの設定項目があります。 これら 2 つの項目は、PHP スクリプトの最大実行時間を設定するために使用されます。この時間を超えると、PHP-FPM はスクリプトの実行を終了するだけでなく、スクリプトを実行するワーカー プロセスも終了します。したがって、Nginx はそれ自体と通信するための接続が切断されたことを検出し、クライアントに 502 エラーを返します。

PHP-FPM の request_terminate_timeout=30 秒を例にとると、502 Bad Gateway エラーの具体的な情報は次のとおりです:

1) Nginx エラー アクセス ログ:

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


2) PHP-FPM エラー ログ:

/usr/local/php/sbin/php-fpm 
#手动打补丁的启动方式/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx
ログイン後にコピー


したがって、実行時間が長いために PHP スクリプトが終了するのを防ぐには、これら 2 つの項目の値を増やすだけです。 request_terminate_timeout は max_execution_time をオーバーライドできます。

したがって、グローバル php.ini を変更したくない場合は、PHP-FPM の設定を変更するだけです。

さらに、Nginx の上流モジュールの max_fail 項目とfail_timeout 項目に注意してください。 Nginx とアップストリーム サーバー (Tomcat、FastCGI など) の間の通信は、偶発的に中断されることがあります。しかし、max_fail が比較的小さい値に設定されている場合、次の failed_timeout 時間に、Nginx はアップストリーム サーバーがダウンしていると判断します。 502 エラーが返されます。

したがって、max_fail を増やし、fail_timeout を減らすことができます。


2.504 ゲートウェイタイムアウトエラー


PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置factcgi_connect/read/send_timeout。

以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

   2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: Connection timed out) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"
ログイン後にコピー

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。

配置举例:

location ~ \.php$ {
        root          /home/cdai/test.com;
        include         fastcgi_params;
        fastcgi_connect_timeout   180;
        fastcgi_read_timeout      600;
        fastcgi_send_timeout      600;
        fastcgi_pass      unix:/dev/shm/php-fcgi.sock;
        fastcgi_index      index.php;
        fastcgi_param     SCRIPT_FILENAME /home/cdai/test.com$fastcgi_script_name;
   }
ログイン後にコピー

以上がphp-fpm をインストールして構成し、Nginx+PHP 運用環境を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles