Nginx + PHP FPM의 작동 방식
Nginx의 기본 지식
Nginx란?
· 단일 스레드, 비동기, 이벤트 기반 웹 서버
・스레드는 프로세스로서 독립적이며 멀티 프로세스로 동작 가능
・경량적인 실장
・로드 밸런싱, 캐시 등 프록시로서의 이용도 가능
Nginx의 라이프 사이클
· 마스터 프로세스가 구성을 읽고 포트를 바인딩합니다.
· 마스터 프로세스가 작업자 프로세스를 시작합니다.
· 작업자가 청취를 시작하고 요청을 처리합니다.
· config가 다시로드되면 새로운 작업자를 만들고 이전 작업자로 바꿉니다.
· 마스터 프로세스가 떨어지고 처리가 종료됩니다.
Nginx worker
· 웹 서버로서의 모든 처리를 담당합니다.
・worker는 싱글스레드로 동작한다
・IO 이벤트의 시스템 콜로서
epoll
, kqueue
등을 이용한다events {
use epoll;
}
프록시로 Nginx
클라이언트 요청을 upstream으로 릴레이
・Reverse Proxy(Ruby on Rails 등)
· FastCGI Proxy (PHP FPM 등)
Nginx의 FastCGI Proxing
PHP FPM의 기본 지식
PHP FPM이란?
· PHP FastCGI Proccess Manager
· FastCGI 인터페이스가있는 PHP 실행 환경
· Nginx에서 본 PHP 실행 서버
Nginx와 PHP FPM 연결
Nginx 설정
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
}
정적 파일 검색 흐름
PHP 파일 검색 흐름
자세히 보기 Nginx 오류
"Primary script unknown" while reading response header from upstream
· PHP FPM이 지정된 PHP 파일을 찾을 수 없음
-> 존재하지 않는 경로가 지정되지 않았는지 확인
client intended to send too large body
· 클라이언트에서 POST 된 데이터가 너무 큽니다.
-> Nginx upload_max_filesize 조정
-> php.ini의 post_max_size 조정
-> php.ini의 upload_max_filesize 조정
-> Nginx의 client_body_buffer_size는 중요하지 않습니다.
-> Nginx의 fastcgi_buffer_size는 중요하지 않습니다.
a client request body is buffered to a temporary file
· 클라이언트의 요청 본문이 메모리 버퍼의 용량을 초과했기 때문에 임시 파일에 씁니다.
-> 상황은 "client intended to send too large body"와 비슷하고 클라이언트에서 보낸 데이터 크기 문제
-> Nginx의 client_body_buffer_size 조정
upstream sent too big header while reading response header from upstream
· PHP FPM 응답 헤더가 너무 큽니다.
-> Nginx의 fastcgi_buffer_size 조정
-> PHP 앱이 큰 응답 헤더 (쿠키 등)를 반환하지 않는지 확인
upstream timed out
· PHP FPM에서 회신이 반환되지 않습니다.
<?php
sleep(100000000000000);
?>
-> Nginx의 fastcgi_read_timeout 조정
-> AWS의 ELB를 사용하는 경우는 ELB의 Idle Timeout도 확인하는 것이 좋을지도
-> php.ini의 max_execution_time은 중요하지 않습니다.
* 위와 관련된 오류는 "Fatal error: Maximum execution time of 60 seconds exceeded"
참고
· Inside NGINX: How We Designed for Performance & Scale
· The Architecture of Open Source Applications (Volume 2): nginx
· Understanding and Implementing FastCGI Proxying in Nginx
· PHP와 SAPI와 ZendEngine3 - SlideShare
· nginx로 역방향 프록시 할 때 HTTP 응답 헤더의 크기에주의
· nginx 요청 본문 버퍼링 문제와 개선 방법
· PHP 스크립트 실행 시간 제어 (max_execution_time) - hogehoge foobar Blog Style5
· PHP로 파일을 업로드 할 때 설정 | maidsphere
Reference
이 문제에 관하여(Nginx + PHP FPM의 작동 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taichitk/items/5cf2e6778f1209620e72텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)