nginx
nginx는 고성능 HTTP 및 역방향 프록시 서버이자 IMAP/POP3/SMTP 서버입니다.
최대 50,000개 이상의 동시 연결에 대한 응답을 지원할 수 있는 nginx는 네트워크 IO 모델로 epoll/kqueue를 선택했습니다.
nginx는 로드 밸런싱 서버로도 사용할 수 있습니다. nginx는 C 언어로 작성되었습니다.
nginx는 기본 프로세스이자 여러 작업자 프로세스이며 작업자 프로세스는 단일 스레드입니다. 각 작업자 프로세스는 비동기식, 비차단 방식으로 클라이언트 요청을 처리할 수 있습니다.
[확장 학습 비동기 비차단 및 epoll select poll kqueue]
nginx의 PHP는 fastcgi 방식을 사용하여 nginx와 결합됩니다.
클라이언트는 nginx 서버에 요청을 보내고, nginx 서버는 fastcgi를 통해 처리하기 위해 해당 요청을 php로 전달합니다. php 처리 결과는 fastcgi를 통해 nginx 서버로 반환됩니다. nginx 서버는 결과를 클라이언트에 반환합니다.
Fastcgi 지식
CGI는 외부 애플리케이션과 웹 서버 간의 인터페이스 표준이며, 외부 애플리케이션과 웹 서버 간에 정보를 전송하는 절차입니다.
cgi 사양을 사용하면 웹 서버가 외부 프로그램을 실행하고 그 출력을 웹 브라우저로 보낼 수 있습니다.
fastcgi는 CGI를 개선한 것입니다.
Fastcgi는 메모리 상주 CGI와 같습니다. 요청이 도착하면 CGI는 먼저 요청을 처리하기 위한 프로세스를 분기합니다.
그러나 fastcgi가 로드를 시작하면 여러 CGI 인터프리터가 시작되고 웹 서버 연결을 기다립니다. .
클라이언트 요청이 웹 서버에 도달하면 fastcgi 프로세스 관리자는 요청을 처리할 cgi 해석기를 선택합니다.
장점은 cgi 인터프리터가 메모리에 로드되어 필요할 때마다 메모리에서 읽을 필요가 없다는 점입니다. 이는 사이트 성능을 크게 향상시킵니다.
fastcgi의 문제점은 다음과 같습니다. PHP 구성을 수정하면 즉시 적용되지 않습니다. 다시 로드해야 합니다.
차단
클라이언트의 요청이 들어오고 웹 서버가 요청을 받습니다.
IO 작업은 10초가 소요되며 그 동안 웹 서버는 10초 동안 대기합니다. 이 10초 동안 웹 서버는 다른 클라이언트 요청을 거부합니다.
Non-blocking
클라이언트 요청이 오고 웹 서버가 요청을 받습니다. 이 요청에는 io 작업이 필요하며 io는 10초가 걸립니다.
웹 서버는 10초 동안 계속 작동할 수 있습니다. io 작업. 다른 클라이언트로부터 요청을 받은 후 웹 서버는 이러한 요청의 파일 설명자를 대기열에 넣고 io 작업이 준비되면 클라이언트에 데이터를 보냅니다
.
비동기 비차단 io 모델
하나의 마스터 스레드와 여러 작업자 스레드로 여러 요청을 처리할 수 있습니다. 요청된 이벤트가 제대로 처리되지 않으면 이벤트 파일 설명자가 대기열에 배치됩니다.
이벤트가 처리된 후 요청에 의해 반환된 결과를 읽으므로 많은 수의 동시 요청을 처리할 수 있습니다. 물론 여기서 동시성은 작업자가 스레드이므로
가능합니다. 동시에 처리할 수 있는 요청은 하나만 필요합니다.
요청 간의 지속적인 전환일 뿐이며, 비동기 이벤트가 준비되지 않았기 때문에 전환도 사전에 이루어집니다.
여기서 전환하는 데에는 비용이 들지 않습니다. 실제로는 준비된 여러 이벤트를 루프 처리하는 것으로 이해할 수 있습니다.
멀티스레딩에 비해 이 이벤트 처리 방법은 스레드를 생성할 필요가 없고, 각 요청이 매우 적은 메모리를 차지하며, 컨텍스트 전환이 없다는 장점이 있습니다. 동시성이 아무리 많아도 불필요한 리소스 낭비가 발생하지 않습니다(컨텍스트 전환).
위 내용은 nginx 콘텐츠를 포함하여 nginx 학습 및 구성에 대해 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.