개요
오늘은 Ubuntu에서 LNMP 환경을 구축하고 싶어서 이 글을 썼습니다. Nginx는 PHP-FPM을 사용하므로 웹 서버와 PHP 인터프리터 간의 상호 작용을 정리했습니다.
우리 모두 알고 있듯이 PHP는 크로스 플랫폼 및 크로스 서버 언어이므로 인기가 높습니다. 그러나 PHP 인터프리터가 웹 서버에서 다양한 방식으로 실행될 수 있다는 사실을 아는 사람은 많지 않습니다. PHP에 가장 일반적으로 사용되는 방법은 Apache에서 모듈(mod_php)로 실행하는 것입니다. 이는 Apache가 PHP를 실행하는 기본 방법이기도 합니다. 그러나 Nginx에서는 Nginx가 PHP-FPM을 사용합니다.
이 기사에서는 이러한 개념을 소개합니다. 잘못된 점이 있으면 비판하고 조언해 주세요.
PHP 핸들러란 무엇입니까?
가장 먼저 기억해야 할 점은 모든 종류의 웹 서버(Apache, Nginx 등)는 HTML 및 그림과 같은 정적 리소스를 사용자에게 보내도록 설계되었다는 것입니다. 웹 서버 자체는 동적 스크립트(PHP, Python)를 해석할 수 없습니다. 등) 잠깐만요). PHP 프로세서는 웹 애플리케이션의 PHP 코드를 해석하고 이를 HTML이나 기타 정적 리소스로 해석한 다음 구문 분석된 결과를 웹 서버에 전달하고 마지막으로 웹 서버가 이를 사용자에게 보내는 데 사용됩니다. 대부분의 웹 서버는 PHP 코드를 구문 분석할 수 없으므로 PHP 코드를 구문 분석할 수 있는 프로그램이 필요합니다. 이것이 바로 PHP 프로세서입니다.
mod_php
먼저 PHP를 Apache 모듈로 실행하는 방법을 살펴보겠습니다. mod_php는 이제 모든 Linux 버전의 소프트웨어 저장소에서 사용할 수 있으므로 설치가 쉽습니다.
PHP가 Apache에서 모듈로 실행될 때 PHP 인터프리터는 Apache 프로세스에 "내장"됩니다. Apache는 외부 PHP 프로세스를 호출하지 않으므로 이 방법을 사용하면 Apache와 PHP가 더 잘 통신할 수 있습니다. 그러나 이런 방식으로 PHP를 실행하면 Apache가 정적 리소스(예: HTML)만 제공하더라도 Apache의 각 하위 프로세스는 mod_php를 로드하므로 평소보다 더 많은 메모리 오버헤드가 발생합니다.
이 방식 실행의 또 다른 단점은 Apache에서만 작동한다는 것입니다. 또한 이 방법은 소규모 VPS 및 대규모 웹사이트에는 적합하지 않습니다. 왜냐하면 대규모 웹사이트에는 많은 정적 리소스가 있을 수 있고 이러한 정적 리소스는 PHP 프로그램에서 해석할 필요가 없기 때문입니다.
장점:
1. 간편한 설치 및 업데이트
2. 용량 구성
단점:
1. Apache에서만 작동합니다
2. Apache 하위 프로세스의 메모리 오버헤드 증가
3. php.ini 파일을 변경한 후 Apache를 다시 시작해야 합니다
빠른CGI
FastCGI는 대화형 프로그램과 웹 서버 간의 공통 프로토콜 인터페이스로, 초기 CGI(Common Gateway Interface)의 변형입니다. CGI와 비교하여 FastCGI는 웹 서버와의 상호 작용 비용을 줄이고 한 번에 더 많은 요청을 처리할 수 있습니다.
Apache는 mod_fcgid 형식으로 FastCGI를 사용할 수 있습니다. lighttpd, nginx, Cherokee, 심지어 Microsoft의 IIS와 같은 다른 웹 서버도 FastCGI를 사용할 수 있습니다. FastCGI를 사용하면 여러 버전의 PHP를 동시에 설정할 수 있으며 이는 특정 상황에서 매우 유용할 수 있습니다.
FastCGI는 또한 suexec를 사용하여 자신만의 PHP 인스턴스로 다양한 사용자를 지원합니다. 이 기능은 공유 환경의 보안을 향상시키는 데 특히 중요합니다. FastCGI는 성능을 보장할 뿐만 아니라 웹 서버의 메모리 오버헤드도 줄여줍니다.
장점:
1. 대부분의 웹서버와 호환됩니다
2. mod_php보다 메모리를 적게 차지합니다
3. 다중 버전 PHP 및 suexec를 포함한 추가 구성 항목
단점
1. 복잡한 구성
2. 모두에게 잘 알려지지 않음
PHP-FPM(FastCGI 프로세스 관리자)
PHP-FPM은 웹 서버가 PHP를 사용하는 최신 방법이자 PHP FastCGI의 또 다른 구현이기도 합니다. PHP-FPM은 소규모 VPS 및 여러 서버에서 실행되는 웹 애플리케이션에 매우 유용합니다. 동시에 FastCGI와 호환되는 모든 웹 서버에서도 사용할 수 있습니다.
PHP-FPM을 사용하면 관리자는 쿼리 손실 없이 PHP 작업자 프로세스를 정상적으로 중지하고 시작할 수 있습니다. 이를 통해 쿼리 손실 없이 구성과 바이너리를 점진적으로 업데이트할 수 있습니다. 또한 예상치 못한 손상이 발생할 경우 프로세스를 긴급하게 다시 시작할 수도 있습니다.
장점:
1. 대부분의 웹서버와 호환
2. mod_php보다 메모리를 적게 차지합니다
3. 다중 버전 PHP 및 suexec를 포함한 추가 구성 항목
단점
1. 복잡한 구성
2. 모두에게 잘 알려지지 않음
보충: Apache가 PHP를 실행하는 네 가지 방법
mod_php(DSO, 동적 공유 객체)
CGI
suPHP
빠른CGI
요약
내용이 비교적 추상적이라 잘 이해가 안가서 나중에 참고할 수 있게 녹음하겠습니다~:)