ホームページ  >  記事  >  バックエンド開発  >  nginx と php-fpm の間で通信するには、unix ソケットまたは TCP を使用する必要がありますか?

nginx と php-fpm の間で通信するには、unix ソケットまたは TCP を使用する必要がありますか?

藏色散人
藏色散人転載
2019-12-31 13:28:344660ブラウズ

はじめに

nginx と fastcgi 間の通信方式は 2 つあり、1 つは TCP 方式、もう 1 つは Unix ソケット方式です。どちらの方法にもそれぞれ長所と短所がありますので、最初に 2 つの設定方法を説明し、次にパフォーマンスやセキュリティなどについてまとめます。

TCP は TCP ポートを使用して 127.0.0.1:9000 に接続します

ソケットは UNIX ドメイン ソケットを使用してソケット /dev/shm/PHP-cgi.sock に接続します (多くのチュートリアルではパスを使用します) /tmp 、パス /dev/shm は tmpfs であり、ディスクよりもはるかに高速です)サーバーの圧力が高くない場合、tcp とソケットの間に大きな違いはありませんが、圧力が比較的高い場合、ソケットはこの方法には実際の効果があります。

設定ガイド

1. TCP 設定方法

TCP 通信設定は非常に簡単で、3 つのステップで実行できます。

最初のステップは、/etc/nginx/conf.d/サイト構成ファイルを編集することです (デフォルトの構成ファイルを使用している場合は、/etc/nginx/sites-available/default を変更します)

fastcgi_pass パラメータを次のように 127.0.0.1:9000 に変更します:

location ~ \.php$ {
      index index.php index.html index.htm;
      include /etc/nginx/fastcgi_params;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi_params;
 }

2 番目のステップは、php-fpm 設定ファイル /etc/php5/fpm/pool.d/www.conf## を編集することです。

#listen パラメータを次のように 127.0.0.1:9000 に変更します:

listen=127.0.0.1:9000

3 番目のステップ、php-fpm を再起動し、nginx

2 を再起動します。 Method

Unix ソケットは、実際には、厳密な意味では Unix ドメイン ソケットと呼ばれる必要があります。これは、*nix システムのプロセス間通信 (IPC) の方法として広く使用されています。ファイル (通常は .sock)唯一のソケット識別子 (記述子) として使用されるため、通信する必要がある 2 つのプロセスは、同じソケット記述子ファイルを参照することで通信用のチャネルを確立できます。

Unix ドメイン ソケットまたは IPC ソケットは、同じオペレーティング システム上の 2 つ以上のプロセスがデータを通信できるようにする端末です。パイプとは対照的に、Unix ドメイン ソケットはバイト ストリームとデータ キューの両方を使用できますが、パイプ通信はバイト ストリーム経由でのみ可能です。 Unix ドメイン ソケットのインターフェイスはインターネット ソケットに非常に似ていますが、通信に基礎となるネットワーク プロトコルを使用しません。 Unix ドメイン ソケットの機能は、POSIX オペレーティング システムのコンポーネントです。 Unix ドメイン ソケットは、システム ファイルのアドレスを ID として使用します。システムプロセスから参照できます。したがって、2 つのプロセスは同時に Unix ドメイン ソケットを開いて通信できます。ただし、この通信方法はシステム カーネル内で発生し、ネットワーク内に伝播しません。

設定には 5 つの手順が必要です

最初の手順は、ソケット記述子ファイルの保存場所を決定することです。

はシステム内のどこにでも配置できます。通信速度を速くしたい場合は、/dev/shm 配下に配置してください。このディレクトリはいわゆる tmpfs で、直接使用できる領域です。 RAMですので、読み出しの書き込み速度が非常に速くなります。

ファイルの場所を決定したら、ファイルのアクセス許可を変更する必要があります。nginx と php-fpm にファイルに対する読み取りおよび書き込みアクセス許可を与えます。これを行うことができます:

sudo touch /dev/shm/fpm-cgi.sock
sudo chown www-data:www-data /dev/shm/fpm-cgi.sock
sudo chmod 666 /dev/shm/fpm-cgi.sock

2 番目ステップは、php-fpm 設定ファイル/etc/php5/fpm/pool.d/www.conf

listen パラメータを /dev/shm/fpm-cgi.sock に変更することです。

listen=/dev/shm/fpm-cgi.sock

listen.backlog パラメータを -1 に変更します。メモリ バックログは無限です。デフォルトは 128 です。同時実行性が高い場合、エラーが報告されます。

 ; Set listen(2) backlog. A value of '-1' means unlimited.
 ; Default Value: 128 (-1 on FreeBSD and OpenBSD)
 listen.backlog = -1

3 番目のステップは次のとおりです。 nginx サイト構成ファイルを変更します。

fastcgi_pass パラメーターを次のように unix:/dev/shm/fpm-cgi.sock に変更します:

location~\.php${
      indexindex.phpindex.htmlindex.htm;
      include/etc/nginx/fastcgi_params;
      fastcgi_passunix:/dev/shm/fpm-cgi.sock;
      fastcgi_indexindex.php;
      includefastcgi_params;
}

4 番目のステップは、/etc を変更することです。 /sysctl.conf ファイルを使用して、カーネル レベルでの同時接続数を増やします。

sudo echo'net.core.somaxconn = 2048'>>/etc/sysctl.conf
sudo sysctl-p

5 番目のステップでは、nginx および php-fpm サービスを再起動します (最初に php-fpm を再起動し、次に nginx を再起動することをお勧めします)

ps: nginx が負荷分散を行う場合は、unix ソケットをまったく考慮しないでください。唯一の方法は TCP を使用することです。

PHP 関連の知識について詳しくは、

PHP チュートリアル をご覧ください。

以上がnginx と php-fpm の間で通信するには、unix ソケットまたは TCP を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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