GNU/Linux >> Linux の 問題 >  >> Ubuntu

UNIXまたはTCP/IPソケットを使用してNGINXをPHP-FPMに接続する方法

NGINX Webサーバー(リバースプロキシとして)は、 FastCGIを介してPHPアプリケーションを提供します プロトコル(バックエンドアプリケーションサーバーとして)。 NGINX PHP-FPMを採用 (FastCGI Process Manager)、代替の PHP FastCGI CGI をリッスンし、デーモンとしてバックグラウンドで実行される実装 リクエスト。負荷の高いWebサイトやWebアプリケーションに電力を供給するために設計された追加機能が付属していますが、あらゆるサイズのサイトに使用できます。

PHP-FPMだけではありません FastCGIの構成をサポートする リソースプールがありますが、 FastCGIの多くも改善されます 内部で、エラー報告、スクリプトの終了などが増加します。 PHPデーモン化、プロセス管理、リクエストの送信元となる動的なプロセス数、エラーヘッダー、高速アップロードサポートなどを備えています。

FastCGIを受け入れるには NGINXからのリクエスト 、 PHP-FPM TCP / IPでリッスンできます ソケットまたはUNIXドメインソケット。どちらのアドレスを使用する場合でも、 NGINX PHP-FPM への接続(プロキシリクエスト)に使用します 、fastcgi_passを使用 ディレクティブ。

このガイドでは、 NGINXを構成する方法について説明します PHP-FPMを使用してPHPアプリケーションをサーバー化する 。 TCP / IPをいつ使用するかについて説明します NGINXに接続するためのソケットまたはUNIXドメインソケット PHP-FPM とその理由。

このガイドは、 NGINXを使用していることを前提としています およびPHP-FPM Linuxシステムにインストールされている場合、それ以外の場合は、以下を参照してください:

  • CentOS8にLEMPサーバーをインストールする方法
  • Ubuntu20.04サーバーにLEMPスタックPhpMyAdminをインストールする方法
  • RHEL 8にNGINX、MySQL / MariaDB、PHPをインストールする方法
  • Debian10サーバーにLEMPをインストールする方法

何を使用する必要がありますか:UNIXドメインソケットまたはTCP / IPソケット?

UNIX ドメイン(または IPC )ソケットは、プロセス間通信(IPC)の手段であり、 TCP / IP で、同じオペレーティングシステムで実行されているプロセス間で効率的なデータ交換を可能にします。 (またはインターネットドメイン )ソケットにより、プロセスはネットワークを介して通信できます。

TCP / IPとは異なり IPアドレスとポートでサーバーを識別するソケット(例: 127.0.0.1:9000 )、ファイルパス名(例: /run/php-fpm/www.sock )を使用してサーバーをUNIXドメインソケットにバインドできます )、これはファイルシステムに表示されます。

UNIXドメインソケットは特殊なタイプのファイルです。ファイルとディレクトリのアクセス許可が適用され(他のタイプのUNIXファイルの場合と同様)、ホスト上のどのプロセスがファイルの読み取りと書き込みを実行できるかを制限するために使用できます。 (したがって、バックエンドサーバーと通信します。)

このように、UNIXドメインソケットはローカルホスト上のプロセスのみが使用できるため、安全です。 TCP / IP ファイアウォールなどの追加のセキュリティ対策が実装されていない限り、ソケットはインターネットにさらされてセキュリティリスクを引き起こす可能性があります。

重要なのは、 UNIXを使用することです。 ドメインソケットは、 TCP / IPを使用する場合と同じではありません パフォーマンスに関するソケット、いくつかのテストとベンチマークにより、UNIXドメインソケットの方が高速であることが証明されています。 UNIXドメインソケットの主な欠点は、スケーラブル性が低く、同じオペレーティングシステム(OS)内のプロセス間通信のみをサポートすることです。

PHP-FPMリッスンアドレスはどこで設定できますか?

アドレスを構成できますPHP-FPM リソースプール構成ファイルでリッスンします。 PHP-FPMでは注意してください 、異なる設定でプロセスの複数のプールを実行できます。デフォルトのプールはwwwと呼ばれます 。

リソースプール構成ファイルの場所は、 PHPの方法によって異なります。 およびPHP-FPM Linuxシステムにインストールされている(デフォルト/単一バージョンまたは複数バージョンの同時)

たとえば、 CentOS 8 、単一バージョンでは、すべてのPHP構成ファイルは/etcにあります。 ディレクトリとデフォルトのPHP-FPM プール(www) 構成ファイルは/etc/php-fpm.d/www.conf

すべてのPHP構成ファイルを一覧表示するには、次のlsコマンドを使用します。

# ls /etc/php*

すべてのPHP構成ファイルを一覧表示する

Ubuntu 20.04 、PHP構成ファイルは/etc/php/<php-version>/にあります ディレクトリとデフォルトのPHP-FPM プール(www) 構成ファイルは/etc/php/<php-version>/fpm/pool.d/www.confです。 :

$ ls /etc/php/7.4/

Ubuntu上のすべてのPHP構成ファイルを一覧表示する

UNIXドメインソケットでリッスンするようにPHP-FPMを構成する

PHP-FPMを構成するには UNIXドメインソケットでリッスンするには、デフォルトの PHP-FPMを開きます お気に入りのテキストエディタを使用したプール構成ファイル。

# vim /etc/php-fpm.d/www.conf			#Ubuntu/Debian
OR
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#CentOS/RHEL/Fedora

次に、listenディレクティブを探し、次のようにUNIXドメインソケットのファイルパス名に設定します。ほとんどのインストールでは、デフォルトでUNIXドメインソケットが使用されることに注意してください。

listen = /run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
listen = /run/php-fpm/www.sock		#CentOS/RHEL/Fedora

UNIXドメインソケットを使用する場合は、NGINX Webサーバーからの接続を許可するために、ファイルに適切な読み取り/書き込み権限も設定する必要があります。デフォルトでは、NGINXはユーザーおよびグループ nginxとして実行されます CentOS / RHEL / Fedora およびwww-data Ubuntu およびDebian

したがって、listen.ownerを見つけます およびlisten.group パラメータを設定し、それに応じて設定します。また、モードを 0660に設定します listen.modeを使用する パラメータ。

------------- On Debian and Ubuntu -------------
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

------------- On CentOS/RHEL and Fedora  -------------
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

UNIXドメインソケットファイルの権限が正しく設定されていない場合、NGINXは不正なゲートウェイエラーを返す可能性があることに注意してください。

PHP-FPM構成

TCP/IPソケットでリッスンするようにPHP-FPMを構成する

UNIXドメインソケットはTCP/IPソケットよりも高速ですが、前者は同じOSでのプロセス間通信しかサポートできないため、スケーラブルではありません。 NGINXの場合 およびバックエンドアプリケーションサーバー( PHP-FPM )異なるシステムで実行されている場合は、 PHP-FPMを構成する必要があります TCP/IPソケットで接続をリッスンします。

PHP-FPM プール構成ファイル、listenを設定します 次のようにアドレスします。選択したポートが同じシステム上の別のプロセスまたはサービスによって使用されていないことを確認してください。

listen = 127.0.0.1:3000

TCPソケットのPHP-FPM構成

PHP-FPMアプリケーションサーバーと連携するようにNGINXを構成する

アドレスを設定したらPHP-FPM リッスンします。NGINXを構成する必要があります fastcgi_passを使用して、そのアドレスを介してリクエストをプロキシします 仮想サーバーブロック構成ファイル内の構成パラメーター。

たとえば、Webサイトの構成ファイルが /etc/nginx/conf.d/example.com.confの場合 、編集用に開きます。

# vim /etc/nginx/conf.d/example.com.conf 

locationを探します .phpを処理するためのブロック ファイルを作成し、fastcgi_passを設定します UNIXドメインソケットでリッスンするようにPHP-FPMを構成した場合は、次のようにパラメータを設定します。

fastcgi_pass unix:/run/php/php7.4-fpm.sock	#Ubuntu/Debian
OR
fastcgi_pass unix:/run/php-fpm/www.sock		#CentOS/RHEL/Fedora

Unixソケットを使用してNginxをPHP-FPMに接続する

または、 TCP / IPを使用します PHP-FPMを構成した場合のアドレス TCP / IPでリッスンする ソケット。バックエンドアプリケーションサーバーの場合( PHP-FPM )は別のサーバーで実行されています( 10.42.0.10を置き換えます PHP-FPMFastCGIサーバーが実行されているマシンのIPアドレスを使用します。

fastcgi_pass  10.42.0.10:3000;

TCPSocketを使用してNginxをPHP-FPMに接続する

<強い色:赤;">重要 : CentOS 8 PHP-FPM /etc/nginx/conf.d/php-fpm.confでアップストリームサーバーとして定義されています php-fpmという名前のアップストリームブロック内のファイル 。

ここで、アドレス PHP-FPMに応じて変更を加えることができます。 プール構成ファイルで、リッスンするように構成されています。デフォルトの構成はUNIXドメインソケットを指しています。

upstream php-fpm {
        server unix:/run/php-fpm/www.sock;
}

NginxでPHPアップストリームサーバーを構成する

サイトのサーバーブロックファイルで、fastcgi_passを設定するだけです。 示されているパラメータ。

fastcgi_pass php-fpm;

NginxをPHP-FPMアップストリームサーバーに構成する

PHP-FPMに変更を加えた後 およびNGINX 構成については、次のように構成構文が正しいかどうかを確認してください。

------------- On Debian and Ubuntu -------------
$ sudo php-fpm -t
$ sudo nginx -t

------------- On CentOS/RHEL and Fedora  -------------
# php-fpm -t
# nginx -t

コマンド出力にはメインの構成ファイルのみが表示されますが、他のすべての構成ファイルも含まれ、チェックされます。

NginxとPHP-FPMの構成を確認する

次に、systemctlコマンドを使用して、2つのサービスを再起動し、変更を適用する必要があります。

------------- On Debian and Ubuntu -------------
$ sudo systemctl restart nginx
$ sudo systemctl restart php7.4-fpm

------------- On CentOS/RHEL and Fedora  -------------
# systemctl restart nginx
# systemctl restart php-fpm

エラーが発生した場合は、 NGINXを確認できます およびPHP-FPM catコマンドを使用してファイルをログに記録します。

------------- On Debian and Ubuntu -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php7.4-fpm.log

------------- On CentOS/RHEL and Fedora  -------------
$ cat /var/log/nginx/error.log
$ cat /var/log/php-fpm/www-error.log

それが私たちがあなたのために持っていたすべてです。以下のコメントセクションは、質問をするために使用できます。詳細については、NGINXのドキュメントとPHP-FPMのドキュメントを参照してください。

共有は思いやりがあります…
Facebookで共有するTwitterで共有するLinkedinで共有するRedditで共有する
Ubuntu
  1. Ubuntu18.04でNginxを使用してWordPressをインストールする方法

  2. Ssh – Sshを使用して別のPCを介してPCに接続する方法は?

  3. PleskでPHP-FPMを使用してNginxを有効にする方法

  1. Nginxを使用してURLをリダイレクトする方法

  2. PHP-FPM を使用して PHP を実行するように Nginx を構成する方法

  3. Unix ソケットと TCP/IP ホスト:ポート

  1. PHPを使用してMySQLに接続する方法

  2. Ubuntu16.04でNetdataを使用してNginxを監視する方法

  3. Ubuntu 15.10にNginx、PHP-FPM、SSLを使用してDrupal8をインストールする方法