> 운영 및 유지보수 > 엔진스 > Nginx를 사용하여 요청을 처리하는 방법

Nginx를 사용하여 요청을 처리하는 방법

(*-*)浩
풀어 주다: 2019-11-27 15:22:41
원래의
2628명이 탐색했습니다.

Nginx를 사용하여 요청을 처리하는 방법

Nginx는 다중 프로세스 모델을 사용하여 마스터 프로세스와 다중 작업자 프로세스를 포함한 외부 서비스를 제공합니다. 마스터 프로세스는 Nginx 자체 및 기타 작업자 프로세스를 관리하는 역할을 담당합니다.

모든 실제 비즈니스 처리 로직은 작업자 프로세스에 있습니다. 작업자 프로세스에는 무한 루프를 실행하여 클라이언트로부터 받은 요청을 지속적으로 처리하고 Nginx 서비스 전체가 중지될 때까지 처리하는 기능이 있습니다. (추천 학습: nginx는 을 사용합니다)

작업자 프로세스에서 ngx_worker_process_cycle() 함수는 이 무한 루프에 대한 처리 함수입니다.

이 함수에서 요청의 간단한 처리 흐름은 다음과 같습니다.

운영 체제에서 제공하는 메커니즘(예: epoll , kqueue 등) 관련 이벤트가 생성됩니다.

이러한 이벤트를 수신하고 처리합니다. 데이터가 수신되면 상위 수준의 요청 개체가 생성됩니다.

요청의 헤더와 본문을 처리합니다.

응답을 생성하고 클라이언트에게 다시 보냅니다.

요청 처리를 완료합니다.

타이머 및 기타 이벤트를 다시 초기화합니다.

요청 처리 과정

Nginx의 요청 처리 과정을 모두가 더 잘 이해할 수 있도록 HTTP 요청을 예로 들어 자세히 설명합니다.

Nginx 내에서 HTTP 요청 처리에는 다음 단계가 포함됩니다.

HTTP 요청 초기화(클라이언트에서 데이터를 읽고 요청의 모든 정보가 포함된 HTTP 요청 개체 생성).

요청 헤더를 처리하는 중입니다.

요청 본문을 처리합니다.

이 요청과 관련된 핸들러(URL 또는 위치)가 있는 경우 이를 호출합니다.

처리를 위해 각 단계 핸들러를 차례로 호출합니다.

여기서 Phase Handler의 개념을 이해해야 합니다. 페이즈는 말 그대로 무대를 의미합니다. 따라서 단계 핸들러는 이해하기 쉽고 여러 처리 단계를 포함하는 핸들러입니다.

각 단계에는 여러 개의 핸들러가 있습니다. 처리가 특정 단계에 도달하면 해당 단계의 핸들러가 차례로 호출되어 HTTP 요청을 처리합니다.

일반적으로 단계 핸들러는 이 요청을 처리하고 일부 출력을 생성합니다. 일반적으로 단계 핸들러는 구성 파일에 정의된 위치와 연결됩니다.

단계 핸들러는 일반적으로 다음 작업을 수행합니다.

위치 구성 가져오기.

적절한 응답을 생성합니다.

응답 헤더를 보냅니다.

응답 본문을 보냅니다.

Nginx가 HTTP 요청의 헤더를 읽을 때 Nginx는 먼저 요청과 관련된 가상 호스트의 구성을 검색합니다. 이 가상 호스트의 구성이 발견되면 일반적으로 이 HTTP 요청은 다음 처리 단계(단계 핸들러)를 거칩니다.

NGX_HTTP_POST_READ_PHASE: 요청 콘텐츠 읽기 단계 #🎜🎜 #

NGX_HTTP_SERVER_REWRITE_PHASE: 서버 요청 주소 다시 쓰기 단계

NGX_HTTP_FIND_CONFIG_PHASE: 구성 조회 단계:

NGX_HTTP_REWRITE_PHASE: 위치 요청 주소 다시 쓰기 단계#🎜 🎜#

NGX_HTTP_POST_REWRITE_PHASE : 주소 재작성 요청 제출 단계

NGX_HTTP_PREACESS_PHASE: 접근 권한 확인 준비 단계

NGX_HTTP_ACCESS_PHASE: 접근 권한 확인 단계

NGX_HTTP_POST_ACCESS_PHASE : 접근 권한 확인 제출 단계

NGX_HTTP_TRY_FILES_PHASE: 구성 항목 try_files 처리 단계

NGX_HTTP_CONTENT_PHASE: 콘텐츠 생성 단계

NGX_HTTP_LOG_PHASE: 로그 모듈 처리 단계#🎜 🎜#

콘텐츠 생성 단계에서 요청에 대한 올바른 응답을 생성하려면 Nginx는 처리를 위해 요청을 적절한 콘텐츠 핸들러에 전달해야 합니다.

이 요청에 해당하는 위치가 구성 파일에 콘텐츠 핸들러로 명시적으로 지정되어 있으면 Nginx는 위치를 일치시켜 해당 핸들러를 직접 찾고 이 콘텐츠 핸들러에 요청을 전달하여 처리할 수 있습니다. 이러한 구성 지시문에는 perl, flv, Proxy_pass, mp4 등이 포함됩니다.

요청에 해당하는 위치에 직접 구성된 콘텐츠 핸들러가 없으면 Nginx는 순서대로 시도합니다.

위치가 random_index 구성이 켜져 있으면 무작위로 파일을 선택하여 클라이언트에 보냅니다.

어떤 위치에 index 지시문이 구성되어 있으면 index 지시문에 지정된 파일이 클라이언트로 전송됩니다.

위치가 자동 인덱스로 구성된 경우 요청 주소에 해당하는 서버 경로 아래의 파일 목록이 클라이언트로 전송됩니다.

이 요청에 해당하는 위치에 gzip_static on이 설정되어 있으면 해당 .gz 파일이 있는지 확인하세요. 그렇다면 이를 클라이언트에 보냅니다(클라이언트가 gzip을 지원하는 경우).

요청한 URI가 정적 파일에 해당하는 경우 정적 모듈은 정적 파일의 콘텐츠를 클라이언트에 보냅니다.

콘텐츠 생성 단계가 완료된 후 생성된 출력은 처리를 위해 필터 모듈로 전달됩니다.

필터 모듈은 위치와도 관련이 있습니다. 모든 피팅 모듈은 체인으로 구성됩니다. 출력은 필터 모듈의 반환 값이 처리가 완료되었음을 나타낼 때까지 모든 필터를 순차적으로 통과합니다.

다음과 같은 몇 가지 일반적인 필터 모듈이 있습니다.

서버 측 포함.

XSLT 필터링.

이미지 크기 조정 등.

gzip 압축.

모든 필터 중에는 주의가 필요한 필터 모듈이 여러 개 있습니다. 호출 순서에 따라 지침은 다음과 같습니다.

write: 클라이언트에 출력을 씁니다. 실제로 연결에 해당하는 소켓에 기록됩니다.

postpone: 이 필터는 하위 요청, 즉 하위 요청을 담당합니다.

복사: 복사해야 할 일부 buf(파일 또는 메모리)를 복사한 다음 처리를 위해 나머지 바디 필터에 넘겨줍니다.

위 내용은 Nginx를 사용하여 요청을 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿