728x90
FastCGI는 웹 서버와 애플리케이션 서버(예: PHP, Python, Ruby 등으로 작성된 백엔드 프로그램) 사이의 고속 통신을 위한 인터페이스입니다.
🔧 FastCGI의 주요 역할
- 웹 서버와 애플리케이션 간의 중개자 역할
- 웹 서버(Apache, Nginx 등)는 정적인 파일은 직접 처리하고, 동적인 요청은 FastCGI를 통해 백엔드 프로그램에게 전달합니다.
- FastCGI는 이 요청을 처리하고, 결과(HTML 등)를 웹 서버에 돌려줍니다.
- 프로세스 재사용으로 성능 향상
- CGI(Common Gateway Interface) 방식은 요청마다 프로세스를 새로 생성하지만,
- FastCGI는 애플리케이션을 데몬처럼 계속 실행된 상태로 유지해서 반복되는 요청에 빠르게 응답합니다.
- 로드 밸런싱 및 보안 분리 가능
- 웹 서버와 애플리케이션 서버를 분리할 수 있기 때문에, 여러 서버에 요청을 분산하거나 보안적으로 격리하는 것도 용이합니다.
- PHP를 실행할 때, Nginx는 PHP 스크립트를 직접 실행하지 않고, FastCGI를 통해 PHP-FPM(PHP FastCGI Process Manager) 에게 전달합니다.
PHP-FPM이란?
PHP-FPM (FastCGI Process Manager) 는 PHP를 FastCGI 방식으로 실행하기 위한 고성능 프로세스 관리 도구입니다.
기존의 PHP CGI 방식보다 훨씬 효율적이고 유연한 방식으로, 대규모 트래픽 처리나 다양한 설정이 필요한 환경에서 특히 강력함.
주요 기능 및 특징
프로세스 관리 | 요청마다 새 프로세스를 만드는 대신, 풀(pool) 방식으로 PHP 프로세스를 미리 만들어 놓고 재사용 |
성능 향상 | CGI는 요청마다 PHP를 실행 → 느림 / FPM은 프로세스를 유지하므로 훨씬 빠름 |
풀 설정 가능 | 여러 웹사이트에 대해 각각 별도의 풀을 설정 가능 (사용자별 리소스 제한 등) |
모니터링 및 로깅 | 상태 페이지, 슬로우 로그 등을 통해 성능 분석 가능 |
보안 분리 | 각 풀을 서로 다른 사용자 권한으로 실행할 수 있어, 보안 격리 가능 |
예시: Nginx + PHP-FPM 설정 (nginx.conf 또는 사이트 설정 파일)
server {
listen 80; server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
} # PHP 파일을 FastCGI를 통해 처리
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP-FPM 소켓 경로
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
항목별 설명
fastcgi_pass | PHP-FPM이 사용하는 소켓 또는 IP:포트 (127.0.0.1:9000 같은 경우도 있음) |
fastcgi_param SCRIPT_FILENAME | PHP 스크립트의 실제 경로를 PHP-FPM에 전달 |
include fastcgi_params | FastCGI 동작에 필요한 기본 환경 변수들 포함 |
location ~ \.php$ | .php로 끝나는 URL 요청을 처리하는 블록 |
FastCGI + PHP-FPM 내부 동작 흐름
1. 클라이언트가 PHP 페이지 요청
GET /index.php HTTP/1.1 Host: example.com
2. Nginx가 정적 파일 아닌 걸 감지 → FastCGI로 전달
- Nginx는 .php 확장자를 보고 동적 파일임을 인식
- FastCGI 프로토콜을 사용해 PHP-FPM으로 전달
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
}
3. PHP-FPM이 처리
PHP-FPM은 PHP 스크립트를 빠르게 처리하기 위해 아래와 같은 구조로 작동함:

- 요청이 들어오면, 대기 중인 워커 프로세스가 PHP 코드를 실행
- 이 워커는 매번 새로 생성되지 않음 → 빠름
- 실행된 결과(HTML, JSON 등)를 FastCGI 포맷으로 다시 웹 서버에 전달
4. Nginx가 결과 받아 클라이언트에게 응답
- FastCGI 응답을 받아 HTTP 응답으로 클라이언트에게 전달
HTTP/1.1 200 OK Content-Type: text/html <html>...</html>
PHP-FPM 설정 예시 (/etc/php/8.1/fpm/pool.d/www.conf)
listen = /run/php/php8.1-fpm.sock
pm = dynamic pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
항목별 설명
listen | Nginx와 통신할 소켓 경로 또는 포트 |
pm | 프로세스 관리 방식 (static, dynamic, ondemand) |
pm.max_children | 최대 동시 처리 가능 요청 수 |
pm.start_servers | 시작 시 실행되는 워커 수 |
요약
- FastCGI는 Nginx와 PHP-FPM 사이의 메신저
- PHP-FPM은 PHP 스크립트를 처리하는 백엔드 워커
- 둘이 합쳐지면 CGI보다 훨씬 빠르고 효율적인 PHP 실행 구조가 완성됨
728x90
'nginx' 카테고리의 다른 글
[nginx] image-filter 사용법 (반응형 이미지) (0) | 2025.05.09 |
---|---|
리버스 프록시 서버? (0) | 2024.11.09 |
[nginx] error 로그 유형 및 대응방안 (1) | 2024.11.07 |
[nginx] nginx 서버 config 분석 -1 (1) | 2024.09.30 |
[Nginx] SSL 인증서 갱신 (0) | 2024.09.02 |