웹사이트 검색

UNIX 또는 TCP/IP 소켓을 사용하여 NGINX를 PHP-FPM에 연결하는 방법


NGINX 웹 서버(역방향 프록시)는 FastCGI 프로토콜(백엔드 애플리케이션 서버)을 통해 PHP 애플리케이션을 제공합니다. NGINX는 백그라운드에서 데몬으로 실행되는 대체 PHP FastCGI 구현인 PHP-FPM(FastCGI 프로세스 관리자)을 사용하여 을 수신합니다. >CGI 요청. 로드가 많은 웹사이트나 웹 애플리케이션을 지원하도록 설계된 추가 기능이 함께 제공되지만 모든 규모의 사이트에 사용할 수 있습니다.

PHP-FPMFastCGI 리소스 풀 구성을 지원할 뿐만 아니라 많은 FastCGI 내부 기능을 개선하고 오류 보고, 스크립트를 향상시킵니다. 종료, 그리고 훨씬 더. 이는 PHP 악마화, 프로세스 관리, 요청이 들어올 수 있는 동적 프로세스 수, 오류 헤더, 가속화된 업로드 지원 등을 제공합니다.

NGINXFastCGI 요청을 수락하기 위해 PHP-FPMTCP/IP 소켓이나 UNIX 도메인에서 수신 대기할 수 있습니다. 소켓. 어떤 주소를 사용하든 NGINXfastcgi_pass 지시문을 사용하여 PHP-FPM에 연결(프록시 요청)하는 데 사용됩니다.

이 가이드에서는 PHP-FPM을 사용하여 서버 PHP 애플리케이션에 NGINX를 구성하는 방법을 설명합니다. NGINXPHP-FPM에 연결하기 위해 TCP/IP 소켓 또는 UNIX 도메인 소켓을 사용해야 하는 시기와 그 이유를 설명합니다.

이 가이드에서는 Linux 시스템에 NGINXPHP-FPM이 설치되어 있다고 가정합니다. 그렇지 않은 경우 다음을 참조하세요.

  • CentOS 8에 LEMP 서버를 설치하는 방법
  • Ubuntu 20.04 서버에 LEMP 스택 PhpMyAdmin을 설치하는 방법
  • RHEL 8에 NGINX, MySQL/MariaDB 및 PHP를 설치하는 방법
  • Debian 10 서버에 LEMP를 설치하는 방법

UNIX 도메인 소켓 또는 TCP/IP 소켓 중 무엇을 사용해야 합니까?

UNIX 도메인(또는 IPC) 소켓은 TCP를 수행하는 동안 동일한 운영 체제에서 실행되는 프로세스 간에 효율적인 데이터 교환을 허용하는 IPC(프로세스 간 통신) 수단입니다. /IP(또는 인터넷 도메인) 소켓을 사용하면 프로세스가 네트워크를 통해 통신할 수 있습니다.

IP 주소와 포트(예: 127.0.0.1:9000)로 서버를 식별하는 TCP/IP 소켓과 달리 다음을 사용하여 서버를 UNIX 도메인 소켓에 바인딩할 수 있습니다. 파일 시스템에 표시되는 파일 경로 이름(예: /run/php-fpm/www.sock).

UNIX 도메인 소켓은 특수한 유형의 파일입니다. 파일 및 디렉터리 권한이 여기에 적용되며(다른 유형의 UNIX 파일의 경우와 마찬가지로) 호스트에서 파일을 읽고 쓸 수 있는 프로세스를 제한하는 데 사용할 수 있습니다. (따라서 백엔드 서버와 통신합니다)

이런 방식으로 UNIX 도메인 소켓은 로컬 호스트의 프로세스만 사용할 수 있으므로 안전합니다. 방화벽과 같은 추가 보안 조치를 구현하지 않으면 TCP/IP 소켓이 인터넷에 노출되어 보안 위험을 초래할 수 있습니다.

중요한 점은 UNIX 도메인 소켓을 사용하는 것이 성능 측면에서 TCP/IP 소켓을 사용하는 것과 같지 않다는 점입니다. 여러 테스트와 벤치마크를 통해 UNIX 도메인 소켓이 더 빠른 것으로 입증되었습니다. UNIX 도메인 소켓의 가장 큰 단점은 확장성이 낮다는 점이며, 동일한 운영 체제(OS) 내에서 프로세스 간 통신만 지원한다는 것입니다.

PHP-FPM 수신 주소를 어디에서 구성할 수 있나요?

리소스 풀 구성 파일에서 PHP-FPM이 수신 대기하는 주소를 구성할 수 있습니다. PHP-FPM을 사용하면 다양한 설정으로 여러 프로세스 풀을 실행할 수 있습니다. 기본 풀은 www입니다.

리소스 풀 구성 파일의 위치는 PHPPHP-FPM이 Linux 시스템에 설치되는 방식(기본/단일 버전인지 또는 동시에 여러 버전인지 여부)에 따라 다릅니다. .

예를 들어 단일 버전의 CentOS 8에서는 모든 PHP 구성 파일이 /etc 디렉터리에 있고 기본 PHP-FPM(www) 구성 파일은 /etc/php-fpm.d/www.conf입니다.

모든 PHP 구성 파일을 나열하려면 다음 ls 명령을 사용하십시오.

ls /etc/php*

Ubuntu 20.04에서 PHP 구성 파일은 /etc/php// 디렉토리에 있으며 기본 PHP-FPM(www) 구성 파일은 /etc/php//fpm/pool.d/www.conf입니다.

ls /etc/php/7.4/

UNIX 도메인 소켓에서 수신 대기하도록 PHP-FPM 구성

UNIX 도메인 소켓을 수신하도록 PHP-FPM을 구성하려면 즐겨 사용하는 텍스트 편집기를 사용하여 기본 PHP-FPM 풀 구성 파일을 엽니다.

sudo vim /etc/php/7.4/fpm/pool.d/www.conf	#Ubuntu/Debian
OR
vim /etc/php-fpm.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 웹 서버로부터의 연결을 허용하려면 파일에 대한 적절한 읽기/쓰기 권한도 설정해야 합니다. 기본적으로 NGINX는 CentOS/RHEL/Fedora에서는 사용자 및 그룹 nginx로 실행되고 Ubuntu에서는 www-data로 실행됩니다. 및 데비안.

따라서 listen.ownerlisten.group 매개변수를 찾아서 적절하게 설정하세요. 또한 listen.mode 매개변수를 사용하여 모드를 0660으로 설정하세요.

------------- 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가 잘못된 게이트웨이 오류를 반환할 수 있습니다.

TCP/IP 소켓에서 수신 대기하도록 PHP-FPM 구성

UNIX 도메인 소켓은 TCP/IP 소켓보다 빠르지만 전자는 동일한 OS에서 프로세스 간 통신만 지원할 수 있기 때문에 확장성이 떨어집니다. NGINX와 백엔드 애플리케이션 서버(PHP-FPM)가 서로 다른 시스템에서 실행 중인 경우 PHP-FPM이 수신 대기하도록 구성해야 합니다. 연결을 위한 TCP/IP 소켓.

PHP-FPM 풀 구성 파일에서 listen 주소를 다음과 같이 설정합니다. 선택한 포트가 동일한 시스템의 다른 프로세스나 서비스에서 사용되고 있지 않은지 확인하십시오.

listen = 127.0.0.1:3000

PHP-FPM 애플리케이션 서버와 작동하도록 NGINX 구성

PHP-FPM이 수신 대기하는 주소를 구성한 후에는 fastcgi_pass를 사용하여 해당 주소를 통해 요청을 프록시하도록 NGINX를 구성해야 합니다. 가상 서버 블록 구성 파일의 구성 매개변수.

예를 들어 웹사이트의 구성 파일이 /etc/nginx/conf.d/example.com.conf인 경우 해당 파일을 열어서 편집하세요.

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

UNIX에서 수신하도록 PHP-FPM을 구성한 경우 .php 파일을 처리하기 위한 location 블록을 찾고 fastcgi_pass 매개변수를 다음과 같이 설정합니다. 도메인 소켓.

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

또는 TCP/IP 소켓에서 수신하도록 PHP-FPM을 구성한 경우 TCP/IP 주소를 사용하세요. 백엔드 애플리케이션 서버(PHP-FPM)가 별도의 서버에서 실행 중인 경우(10.42.0.10을 PHP-FPM FastCGI 서버가 있는 시스템의 IP 주소로 대체) 실행 중입니다).

fastcgi_pass  10.42.0.10:3000;

중요: 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;
}

사이트의 서버 블록 파일에서 fastcgi_pass 매개변수를 표시된 대로 설정하기만 하면 됩니다.

fastcgi_pass php-fpm;

PHP-FPMNGINX 구성을 변경한 후 다음과 같이 구성 구문이 올바른지 확인하세요.

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

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

명령 출력에는 기본 구성 파일만 표시되지만 다른 모든 구성 파일도 포함되어 검사됩니다.

다음으로 변경 사항을 적용하려면 systemctl 명령을 사용하여 두 서비스를 다시 시작해야 합니다.

------------- 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

오류가 발생하면 cat 명령을 사용하여 NGINXPHP-FPM 로그 파일을 확인할 수 있습니다.

------------- 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 설명서를 참조하세요.