>  기사  >  백엔드 개발  >  nginx와 php-fpm 간에 통신하려면 unix 소켓을 사용합니까, 아니면 TCP를 사용합니까?

nginx와 php-fpm 간에 통신하려면 unix 소켓을 사용합니까, 아니면 TCP를 사용합니까?

藏色散人
藏色散人앞으로
2019-12-31 13:28:344660검색

머리말

nginx와 fastcgi 사이에는 두 가지 통신 방식이 있는데, 하나는 TCP 방식이고 다른 하나는 Unix 소켓 방식입니다. 두 가지 방법 모두 장점과 단점이 있습니다. 먼저 두 가지 구성 방법을 설명한 다음 성능, 보안 등을 요약합니다.

TCP는 TCP 포트를 사용하여 127.0.0.1:9000을 연결합니다.

Socket은 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;
 }

두 번째 단계, php-fpm 구성 파일을 편집합니다. /etc/php5/fpm/pool.d/www.conf

다음과 같이 수신 대기 매개변수를 127.0.0.1:9000으로 변경합니다.

listen=127.0.0.1:9000

3단계, php-fpm을 다시 시작하고 nginx

2를 다시 시작합니다. 구성 방법

unix 소켓은 실제로 엄밀한 의미에서는 unix 도메인 소켓이라고 불러야 합니다. 이는 *nix 시스템에서 널리 사용되는 프로세스 간 통신(IPC) 방법입니다. 소켓의 식별자(설명자), 통신이 필요한 두 프로세스는 동일한 소켓 설명자 파일을 참조하여 통신용 채널을 설정할 수 있습니다.

Unix 도메인 소켓 또는 IPC 소켓은 동일한 운영 체제에서 둘 이상의 프로세스 간의 데이터 통신을 가능하게 하는 터미널입니다. 파이프와 달리 Unix 도메인 소켓은 바이트 스트림과 데이터 큐를 모두 사용할 수 있는 반면 파이프 통신은 바이트 스트림을 통해서만 가능합니다. Unix 도메인 소켓의 인터페이스는 인터넷 소켓과 매우 유사하지만 통신을 위해 기본 네트워크 프로토콜을 사용하지 않습니다. Unix 도메인 소켓의 기능은 POSIX 운영 체제의 구성 요소입니다. Unix 도메인 소켓은 시스템 파일의 주소를 ID로 사용합니다. 시스템 프로세스에서 참조할 수 있습니다. 따라서 두 프로세스가 동시에 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

두 번째 단계는 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

세 번째 단계는 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;
}

Sec 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가 로드 밸런싱을 하려는 경우 유닉스 소켓 방식을 전혀 고려할 필요가 없으며 TCP 방식만 사용할 수 있습니다.

PHP 관련 지식을 더 보려면 PHP 튜토리얼을 방문하세요!

위 내용은 nginx와 php-fpm 간에 통신하려면 unix 소켓을 사용합니까, 아니면 TCP를 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lukachen.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:PHP 학습 요약 기능다음 기사:PHP 학습 요약 기능