ホームページ  >  記事  >  バックエンド開発  >  PHP7 の php.ini、php-fpm、www.conf 設定の詳細な説明

PHP7 の php.ini、php-fpm、www.conf 設定の詳細な説明

coldplay.xixi
coldplay.xixi転載
2020-06-18 17:00:294126ブラウズ

PHP7 の php.ini、php-fpm、www.conf 設定の詳細な説明

#php.ini は、PHP を実行するためのコア構成ファイルです。一般的な構成の一部を次に示します。

extension_dir=""

    PHP 拡張ライブラリのパスを設定します

expose_php = Off

    PHP 情報が http ヘッダーで公開されるのを回避します

display_errors = Off

    PHP が mysql を呼び出すときにエラー メッセージを公開しないようにします
##log_errors = On

display_errors をオフにした後に PHP エラー ログを有効にする (パスは php-fpm.conf で構成されます)
zend_extension=opcache.so extension=mysqli.so extension= pdo_mysql.so

PHP の opcache と mysql ダイナミック ライブラリを設定します
date.timezone = PRC

# # PHP タイムゾーンを設定します
opcache.enable=1

opcache を開きます
open_basedir = / usr/share/nginx/html;

PHP スクリプトがアクセスできるディレクトリを設定します (実際の状況に応じて設定する必要があります)
  • php-fpm.conf は php -fpm プロセス サービスの構成ファイルです。以下は一般的な構成の一部です

error_log = /usr/local/php/logs/php-fpm.log

エラー ログのパスを設定します。
include=/usr/local/php7/etc/php-fpm.d/*.conf

はじめに www.conf ファイルの設定 (デフォルトで設定)
  • php-fpm.conf と www.conf の主な設定情報

pid = run/php-fpm .pid

pid 設定、デフォルトはインストール ディレクトリの var/run/php-fpm.pid です。
error_log = log /php-fpm.log

エラー ログを有効にするには、デフォルトは var/log/php-fpm.log です。
log_level = Notice

エラー レベル。利用可能なレベルは次のとおりです: アラート (直ちに処理する必要があります)、エラー (エラー状況)、警告 (警告状況)、通知 (一般的な重要情報)、デバッグ (デバッグ情報) ) デフォルト: Notice.
emergency_restart_threshold = 60

emergency_restart_interval = 60s

の意味は、Emergency_restart_interval で設定された値内の SIGSEGV または SIGBUS エラーのある php-cgi プロセスの数が、Emergency_restart_threshold を超えた場合、php-fpm は正常に再起動します。これら 2 つのオプションは通常、デフォルト値のままです。
process_control_timeout = 0

メイン プロセスの再利用シグナルを受け入れるための子プロセスのタイムアウトを設定します。使用可能な単位: s (秒)、 m(分)、h(時間)、または d(日) デフォルトの単位: s (秒) デフォルト値: 0.
daemonize = yes

fpm をバックグラウンドで実行します。デフォルト値は [yes] ですが、デバッグのために [no] に変更できます。 FPM では、複数のプロセス プールを異なる設定で実行できます。これらの設定は、プロセス プールごとに個別に設定できます。
listen = 127.0.0.1:9000

リスニング ポート。nginx の PHP によって処理されるアドレスです。通常はデフォルト値で十分です。 。使用可能な形式は次のとおりです: 'ip:port'、'port'、'/path/to/unix/socket' 各プロセス プールを設定する必要があります。
listen.backlog = - 1

バックログの数 -1 は、オペレーティング システムによって決定される制限がないことを意味します。この行をコメントアウトするだけです。
listen.allowed_clients = 127.0.0.1

FastCGI プロセスの IP へのアクセスを許可します。IP を制限しない場合は any を設定します。他のホストを設定したい場合は、nginx もこの FPM プロセスにアクセスできるため、リッスンの場所をローカルのアクセス可能な IP に設定する必要があります。デフォルト値は任意です。各アドレスはカンマで区切られます。設定されていないか空の場合、どのサーバーでも接続をリクエストできます
listen.owner = www listen.group = www listen.mode = 0666

Unix ソケット設定オプション。TCP を使用してアクセスする場合は、ここにコメントしてください。
user = www group = www

プロセスを開始したアカウントとグループ
php- fpm プロセス プールの最適化メソッド

pm = Dynamic

専用サーバーの場合、pm を static に設定できます。 子プロセスを制御する方法には、静的オプションと動的オプションがあります。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメータによって決定されます:
pm.max_children

静的で開始された php-fpm プロセスの数動的モードでは、php-fpm のプロセスの最大数を制限します (ここで、pm.max_spare_servers の値は pm.max_children 以下のみであることに注意してください)
pm.start_servers

動的モードでの初期 php-fpm プロセスの数。
pm.min_spare_servers

アイドル プロセスの最小数を保証します。アイドル プロセスがこの値より少ない場合は、新しい子プロセスを作成します
pm.max_spare_servers

<ul> <li> アイドル プロセスの最大数を確認します。アイドル プロセスがこの値より大きい場合、クリーンアップされます。</li> <li>dm が static に設定されている場合、pm.max_children パラメーターのみが削除されます。有効になります。システムはパラメータで設定された数の php-fpm プロセスを開きます。 php-fpm プロセスはおそらく 20m ~ 40m のメモリを占有するため、その数値サイズ設定は物理メモリのサイズに応じて設定する必要があります。また、データベースやシステム プロセスなどの他のメモリ占有にも注意を払う必要があります。 、上記4つのパラメータの設定値を決定します! </li> <li>dm が動的に設定されている場合、4 つのパラメータすべてが有効になります。 php-fpm の実行が開始されると、システムは pm.start_servers php-fpm プロセスを開始し、システムのニーズに応じて pm.min_spare_servers と pm.max_spare_servers の間で php-fpm プロセスの数を動的に調整します。このパラメーターでは、pm.start_servers の値が pm.min_spare_servers と pm.max_spare_servers の間にある必要があります。 </li> </ul> <p><code>pm.max_requests = 1000

  • 各子プロセスが再起動される前に処理されるリクエストの数を設定します。
  • 最大数処理されたリクエストの数 これは、多数のリクエストを処理した後に php-fpm ワーカー プロセスが終了し、マスター プロセスが新しいプロセスを再起動することを意味します。 この構成の主な目的は、プログラムが参照する PHP インタープリターまたはサードパーティ ライブラリによって引き起こされるメモリ リークを回避することです。
  • #これは、メモリ リークがある可能性のあるサードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に受け入れられます。PHP_FCGI_MAX_REQUESTS 環境変数と同等です。デフォルト値: 0.

pm.status_path = /status

    #FPM ステータス ページの URL。設定されていない場合、ステータス ページにアクセスできません。デフォルト値: なしmunin 監視によって使用されます

ping.path = /ping

    FPM 監視ページの ping URL。設定されている場合、ping ページにアクセスできません。このページは、FPM が有効かどうか、および要求に応答できるかどうかを外部的にチェックします。スラッシュ (/) で始まる必要があることに注意してください。

ping.response = pong

    # は、ping リクエストの戻り応答を定義するために使用されます。戻り値は HTTP 200 text/plain です。フォーマットテキスト。デフォルト値: pong.

request_terminate_timeout = 0

    単一リクエストのタイムアウト中止時間を設定します。このオプションは、 php.ini 設定の「max_execution_time」は、特別な理由で中止されないスクリプトには役に立ちません。「0」に設定すると、「オフ」を意味します。502 エラーが頻繁に発生する場合は、このオプションを変更してみてください。
#request_slowlog_timeout = 10s

#リクエストでタイムアウト期間が設定されると、対応する PHP コール スタック情報が低速で完全に書き込まれます。 「オフ」を意味する場合は「0」に設定します。
slowlog = log/$pool.log.slow

遅いリクエスト ログを記録しますそして、 request_slowlog_timeout
rlimit_files = 1024

を使用して、ファイル オープン記述子の rlimit 制限を設定します。デフォルト値: システム定義の値は次のとおりです。デフォルトで使用されます。開いているハンドルは 1024 で、ulimit -n を使用して表示でき、ulimit -n 2048 で変更できます。
rlimit_core = 0

コアの最大 rlimit 制限値を設定します。使用可能な値: 'unlimited'、0 または正の整数。デフォルト値: system 値を定義します。
chroot =

起動時の Chroot ディレクトリ。定義されたディレクトリは絶対パスである必要があります。設定されていない場合は、chroot使用されません。
chdir =

起動ディレクトリを設定します。起動時に自動的に Chdired されます。定義されたディレクトリは絶対ディレクトリである必要があります。パス。デフォルト値: 現在のディレクトリ、または / ディレクトリ (chroot の場合)
catch_workers_output = yes

stdout と stderr をメイン エラーにリダイレクトします。ログ ファイル。設定されていない場合、stdout と stderr は FastCGI のルールに従って /dev/null にリダイレクトされます。デフォルト値: 空。`
clear_env = no

##一般的なエラーと解決策

リクエストのタイムアウト中止時間が設定されていません
  • #request_terminate_timeout の値が 0 に設定されているか長すぎる場合、PHP スクリプトが続行される可能性があります。実行します。このように、すべての php-cgi プロセスが file_get_contents() 関数でスタックすると、Nginx PHP Web サーバーは新しい PHP リクエストを処理できなくなり、Nginx はユーザーに「502 Bad Gateway」を返します。を設定します ただし、根本原因ではなく症状を治療するには、PHP スクリプトの実行時間を最大にする必要があります。たとえば、これを 30 秒に変更すると、file_get_contents() が Web ページのコンテンツを取得するのが遅い場合、これは 150 の php-cgi プロセスが 1 秒あたり 5 つのリクエストしか処理できないことを意味し、Web サーバーが「502 Bad」を回避することも困難になります。ゲートウェイ"。解決策は、request_terminate_timeout を 10 秒または適切な値に設定するか、file_get_contents にタイムアウト パラメーターを追加することです。

max_requests パラメータの不適切な設定

max_requests パラメータの不適切な設定により、断続的な 502 エラーが発生する可能性があります:

pm.max_requests = 1000

  • 各子プロセスが再生成される前に処理されるリクエストの数を設定します。これは、メモリ リークが発生する可能性のあるサードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に受け入れられます。 PHP_FCGI_MAX_REQUESTS 環境変数と同等、デフォルト値: 0。 この設定の意味は、PHP-CGI プロセスによって処理されるリクエストの数が 500 に累積すると、プロセスが自動的に再起動されることです。

  • しかし、なぜプロセスを再起動するのでしょうか?

  • 一般に、プロジェクトでは、多かれ少なかれ、PHP のサードパーティ ライブラリを使用します。これらのサードパーティ ライブラリには、メモリ リークの問題がよく発生します。PHP-CGI プロセスが定期的に再起動されない場合は、 , メモリ使用量が増加し続ける原因となるのは間違いありません。そこで、PHP-FPMは、PHP-CGIの管理者として、指定回数リクエストを行ったPHP-CGIプロセスを再起動し、メモリ使用量が増加しないように監視する機能を提供します。

  • php-fpm のスロー ログ、デバッグ、例外のトラブルシューティング アーティファクト

    • request_slowlog_timeout はタイムアウト パラメーターを設定し、slowlog はスロー ログの保存場所を設定します。 , tail -f /var/log/www.slow.log では、実行が遅すぎる php プロセスを確認できます。 過剰なネットワーク読み取りと遅い Mysql クエリという一般的な問題が表示され、プロンプト情報に従って問題をトラブルシューティングすると、明確な方向性が得られます。

      推奨チュートリアル: 「php チュートリアル

    以上がPHP7 の php.ini、php-fpm、www.conf 設定の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。