기술나눔

Nginx 7계층(애플리케이션 계층) 역방향 프록시: SCGI 프록시 scgi_pass

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Nginx 7계층(애플리케이션 계층) 리버스 프록시
SCGI 에이전트 scgi_pass

- 기사 정보 -
작가: 리 준차이 (jcLee95)
CSDN에서 저를 방문하세요: https://jclee95.blog.csdn.net
나의 웹 사이트http://thispage.tech/
이메일: [email protected].
심천 중국
이 기사의 주소:https://blog.csdn.net/qq_28550263/article/details/140253307
화웨이:https://bbs.huaweicloud.com/blogs/XXXXXXXXXX

[소개]: Nginx는 Proxy_pass, uwsgi_pass, fastcgi_pass 및 scgi_pass 등을 포함한 다양한 애플리케이션 계층 역방향 프록시 지원을 제공합니다. 그 중, Proxy_pass 지시문은 HTTP/HTTPS 프로토콜에 대한 역방향 프록시를 구현하기 위해 URL 매개변수를 허용할 수 있습니다. uwsgi_pass는 uWSGI 응용 프로그램 서버에 대한 프록시에 사용되고 scgi_pass는 프록시에 사용됩니다. SCGI(Simple Common Gateway Interface) 애플리케이션에 적용됩니다. 이러한 지시문을 통해 Nginx는 다양한 유형의 백엔드 서비스 및 애플리케이션을 유연하게 처리할 수 있습니다. 이 기사의 초점은 scgi_pass입니다.


관련 기사:
Nginx 7계층 역방향 프록시: HTTP 역방향 프록시 Proxy_pass

Nginx 7계층 역방향 프록시: UWSGI 프록시 uwsgi_pass
Nginx 7계층 역방향 프록시: SCGI 프록시 scgi_pass
Nginx 7계층 역방향 프록시: FastCGI 프록시 fastcgi_pass

여기에 이미지 설명을 삽입하세요.


1. 개요

1.1 SCGI란 무엇인가

한국어:(간단한 공통 게이트웨이 인터페이스) 프록시는엔진엑스 지원되는 중요한 역방향 프록시 방법 중 하나입니다. 안에,한국어:단순화된 버전입니다컴퓨터 지아이(Common Gateway Interface) 프로토콜은 보다 효율적인 연결 방법을 제공하도록 설계되었습니다.편물 서버 및 애플리케이션.전통적으로컴퓨터 지아이에 비해,한국어:지속적인 연결과 단순화된 프로토콜 형식을 사용하여 요청당 오버헤드가 크게 줄어듭니다.

한국어:프로토콜은 표준화된 방법을 정의합니다.편물 요청 정보를 전달하고 서버와 애플리케이션 간에 응답을 받습니다. 간단한 텍스트 형식을 사용하여 요청 헤더 정보와 요청 본문(있는 경우)을 전송합니다.이 디자인은한국어:구현하기 쉽고 좋은 성능을 제공합니다.

1.2 SCGI의 적용 시나리오

존재하다편물애플리케이션 아키텍처에서는한국어:역할을 한편물서버(예:엔진엑스 ) 및 백엔드 애플리케이션.언제엔진엑스클라이언트로부터 받은HTTP요청 시 이러한 요청을 다음으로 변환할 수 있습니다.한국어:포맷 후 통과한국어:프로토콜은 백엔드 애플리케이션 서버로 전송됩니다.

이 접근 방식은 기본적으로 다음을 지원하는 사용자에게 특히 적합합니다.한국어:다음과 같은 프로토콜 프로그래밍 언어 및 프레임워크파이썬일부편물프레임(예:플럽)또는루비일부 애플리케이션 서버(예:일각수 ).사용하여한국어:, 이러한 응용 프로그램은 피할 수 있습니다HTTP파싱의 오버헤드, 직접 처리편물서버에 요청하여 전반적인 성능을 향상시킵니다.

실제 적용에서는,한국어:사용 시나리오에는 다음이 포함되지만 이에 국한되지는 않습니다.

  1. 고성능편물애플리케이션: 다수의 동시 요청을 처리해야 하는 애플리케이션의 경우한국어:기존보다 더 나은 서비스를 제공할 수 있음컴퓨터 지아이더 나은 성능.

  2. 장기 실행 프로세스: 상태를 유지해야 하거나 장기 실행되는 특정 애플리케이션은한국어:그리고편물서버는 지속적인 연결을 유지합니다.

  3. 언어별 최적화: 특정 프로그래밍 언어 또는 프레임워크가 사용 중일 수 있습니다.한국어:더 나은 성능이나 더 간단한 구현을 보여줍니다.

에 의해엔진엑스에 사용scgi_pass명령을 사용하면 관리자가 쉽게 배치할 수 있습니다.HTTP지원 요청 전달한국어: 백엔드 애플리케이션 서버.이는 구성 프로세스를 단순화할 뿐만 아니라 최적화 기회도 제공합니다.편물애플리케이션 성능은 유연성을 제공합니다.

2. SCGI 프로토콜 소개

2.1 SCGI 프로토콜의 특징

한국어:(Simple Common Gateway Interface) 프로토콜은 단순화된컴퓨터 지아이특별히 설계된 프로토콜편물 서버와 애플리케이션 간의 통신. 다음과 같은 두드러진 특징을 가지고 있습니다.

간단:한국어: 프로토콜은 간단한 텍스트 형식을 사용하여 요청 헤더 정보를 전송하므로 프로토콜 구현 및 디버깅이 상대적으로 쉽습니다. 프로토콜의 디자인 철학은 충분한 기능을 제공하면서 단순함을 유지하는 것입니다.

지속적인 연결: 기존 연결과 비교컴퓨터 지아이다른,한국어: 지속적인 연결을 지원합니다.이것은 다음을 의미합니다한국어: 서버는 각 요청에 대해 새 프로세스나 스레드를 만들지 않고도 여러 요청을 처리할 수 있습니다. 이는 시스템 리소스 오버헤드를 크게 줄이고 전반적인 성능을 향상시킵니다.

낮은 오버헤드:한국어: 프로토콜의 디자인은 간단하며 요청 처리 중에 추가 오버헤드가 거의 발생하지 않습니다.이것은 만든다한국어:특히 높은 동시성을 처리하는 데 적합합니다.편물응용 시나리오.

유연성:한국어: 이 프로토콜은 임의의 헤더 정보 전송을 허용하므로 개발자에게 뛰어난 유연성을 제공합니다. 개발자는 특정 애플리케이션의 요구 사항을 충족하기 위해 필요에 따라 헤더 정보를 사용자 정의할 수 있습니다.

언어 독립성:한국어: 프로토콜의 설계는 프로그래밍 언어에 독립적입니다.즉, 모든 프로그래밍 언어로 구현될 수 있으므로 개발자는 자신의 프로젝트 요구 사항에 가장 적합한 언어를 선택할 수 있습니다.한국어:섬기는 사람.

2.2 SCGI 대 HTTP 프로토콜

하지만한국어:그리고HTTP에 사용됩니다편물통신 프로토콜이지만 설계 목적과 사용 시나리오에 상당한 차이가 있습니다.

대상 사용자:HTTP프로토콜은 주로 클라이언트(예: 브라우저)에서 사용되며편물서버 간 통신을 수행하는 동안한국어:이번 협약은 다음 사항에 중점을 두고 있습니다.편물서버와 백엔드 애플리케이션 간의 통신.

프로토콜 복잡성:HTTP프로토콜은 상대적으로 복잡하며 다양한 헤더 정보와 방법을 지원하기 위해 많은 양의 헤더 정보를 포함합니다.편물 대화형 장면. 대조적으로,한국어:프로토콜은 더 간단하며 요청과 응답을 전달하는 데 필요한 정보만 포함합니다.

성능 고려 사항:편물서버와 애플리케이션 사이에서 사용한국어:대신에HTTP프로토콜 구문 분석의 오버헤드를 줄일 수 있습니다.한국어: 형식은 더 간단하고 직접적입니다. 이는 높은 동시성 시나리오에서 상당한 성능 향상을 가져올 수 있습니다.

연결 관리:HTTP 1.1 (HTTP 1.1)지속적인 연결이라는 개념이 도입되었지만편물서버와 애플리케이션 사이에서 사용HTTP추가 연결 관리가 여전히 필요할 수 있습니다.한국어:지속적인 연결에 대한 기본 지원이 이 프로세스를 단순화합니다.

사용되는 장면:HTTP인터넷의 기본 프로토콜로 다양한 분야에 적용 가능편물통신 시나리오.한국어:주로 사용됩니다편물특히 고성능 처리가 필요한 시나리오에서 서버와 백엔드 애플리케이션 간의 내부 통신.

2.3 SCGI 대 FastCGI

한국어:그리고빠른CGI모두컴퓨터 지아이향상된 버전편물 애플리케이션 성능. 몇 가지 유사점이 있지만 몇 가지 주요 차이점도 있습니다.

프로토콜 복잡성:한국어:합의 비율빠른CGI더 간단합니다.한국어:헤더 정보를 전송하기 위해 간단한 텍스트 형식을 사용하지만,빠른CGI 바이너리 형식을 사용하세요.이것은 만든다한국어:구현 및 디버깅이 더 쉽지만 약간 열등할 수 있습니다.빠른CGI성능.

  1. 멀티플렉싱:빠른CGI단일 연결(멀티플렉싱)에서 여러 요청 처리를 지원합니다.한국어: 일반적으로 연결당 하나의 요청만 처리됩니다. 이는 특정 높은 동시성 시나리오에서빠른CGI더 나은 성능을 발휘할 수 있습니다.

  2. 레코드 유형:빠른CGI여러 레코드 유형이 정의됩니다(예:표준표준 출력STDERR등), 보다 세밀한 제어가 가능합니다.한국어:주로 요청과 응답의 전송에 초점을 맞춘 더 간단한 접근 방식이 채택되었습니다.

  3. 언어 지원: 인해빠른CGI 사용 기간이 길어질수록 다양한 프로그래밍 언어와 프레임워크에서 지원이 더욱 광범위해질 가능성이 높습니다. 하지만,한국어:단순성으로 인해 일부 언어에서의 구현이 잠재적으로 더 간단해집니다.

  4. 성능: 대부분의 경우한국어:그리고빠른CGI 성능 차이는 크지 않습니다. 사용할 프로토콜의 선택은 특정 애플리케이션 요구 사항, 개발 언어 지원 및 개인 선호도에 따라 결정되는 경우가 많습니다.

3. Nginx의 scgi_pass 지시문

3.1 scgi_pass 명령어의 기본 구문

존재하다엔진엑스구성,scgi_pass지시어는 요청을 전달하는 데 사용됩니다.한국어: 서버에 대한 주요 지시어입니다.그것은 정의한다엔진엑스요청이 전달되어야 하는 대상한국어:서버 또는 서버 그룹.

scgi_pass명령의 기본 구문은 다음과 같습니다.

scgi_pass address;
  • 1

안에,address다음과 같은 형식일 수 있습니다.

  1. 도메인 이름 또는아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP)))))))주소와 포트 번호:

예를 들어:scgi_pass localhost:9000;

이 경우,엔진엑스요청은 로컬 호스트에서 실행되고 포트 9000에서 수신 대기하는 서버로 전달됩니다.한국어:섬기는 사람.

  1. 유닉스도메인 소켓 경로:

예를 들어:scgi_pass unix:/tmp/scgi.socket;

여기,엔진엑스지정된 통과합니다유닉스도메인 소켓한국어: 서버 통신.이 방법은 일반적으로 사용됩니다한국어:서버엔진엑스동일한 머신에서 실행하면 더 나은 성능을 제공할 수 있습니다.

  1. 업스트림 서버 그룹 이름:

예를 들어:scgi_pass scgi_backend;

이 사용법에서는scgi_backend에 하나입니다엔진엑스 구성 파일에 미리 정의된 업스트림 서버 그룹입니다. 이를 통해 로드 밸런싱 및 장애 조치와 같은 고급 기능을 구현할 수 있습니다.

scgi_pass지침은 일반적으로location특정 처리를 위해 블록에서 사용됨웹 주소 길. 예를 들어:

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

이 예에서는 모든/scgi/처음의 요청은 로컬 포트 ​​9000으로 전달됩니다.한국어:섬기는 사람.

include scgi_params;명령문에는 일련의 설정을 설정하는 미리 정의된 구성 파일이 포함되어 있습니다.한국어: 매개변수.이러한 매개변수는 다음을 정의합니다.엔진엑스어떻게HTTP요청 정보는 다음으로 변환됩니다.한국어:묻다.

주목할 가치가 있는 것은scgi_pass지시어는 다른 지시어와 결합될 수 있습니다.엔진엑스 지시문은 보다 복잡한 구성을 달성하기 위해 조합하여 사용됩니다.예를 들어 다음을 사용할 수 있습니다.if다양한 조건에 따라 다양한 옵션을 선택하는 조건문한국어:섬기는 사람:

location / {
    if ($request_method = POST) {
        scgi_pass localhost:9001;
    }
    scgi_pass localhost:9000;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

이 예에서는우편요청은 포트 9001로 전달되고 다른 모든 요청은 포트 9000으로 전달됩니다.

3.2 scgi_pass 대 proxy_pass

scgi_pass그리고proxy_pass이는 모두 일반적으로 사용되는 역방향 프록시 지침이며 모두 백엔드 서버로 요청을 전달합니다.

안에,scgi_pass지원과 함께 사용하도록 설계됨한국어:백엔드 서버 통신을 위한 프로토콜입니다.한국어:단순화 된컴퓨터 지아이프로토콜은 다음을 위해 설계되었습니다.편물 서버와 애플리케이션 간의 효율적인 통신. 대조적으로,proxy_pass다음을 포함하여 다양한 프로토콜을 프록시하는 데 사용할 수 있는 보다 일반적인 지시어입니다.HTTPHTTPS빠른CGI기다리다.

사용scgi_pass시간,엔진엑스받을 것이다HTTP요청이 다음으로 변환됩니다.한국어:포맷한 후 백엔드로 전송됩니다.한국어: 섬기는 사람. 이 과정에서,엔진엑스 백엔드 서버가 요청을 올바르게 이해하고 처리할 수 있도록 프로토콜 변환을 처리합니다.그리고proxy_pass일반적으로 프로토콜 변환 없이 그대로 백엔드 서버에 요청을 전달하는 데 사용됩니다.

또 다른 중요한 차이점은 구성 방법입니다.scgi_pass대개 협력이 필요함scgi_param설정에 사용하는 지시어한국어: 프로토콜에 필요한 매개변수입니다. 예를 들어:

location /app/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/app$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

이 예에서는include scgi_params사전 정의된 도입한국어:매개변수, 동안scgi_param지시문은 추가 매개변수를 설정하는 데 사용됩니다.

대조적으로,proxy_pass구성은 일반적으로 더 간단하고 간단합니다.

location /api/ {
    proxy_pass http://backend_server;
}
  • 1
  • 2
  • 3

성능면에서,scgi_pass그리고proxy_pass 각각 고유한 장점이 있습니다.특별히 설계된 용도한국어:프로토콜 적용,scgi_pass방지하기 때문에 더 나은 성능을 제공할 수 있습니다.HTTP 프로토콜 오버헤드. 하지만,proxy_pass다재다능함으로 인해 유연성이 더욱 향상되고 다양한 백엔드 서버 및 프로토콜에 적응할 수 있습니다.

보안도 고려해야 할 측면입니다.왜냐하면scgi_pass전용한국어: 백엔드 서버와 통신하는 방법을 제한하기 때문에 경우에 따라 더 나은 보안을 제공할 수 있는 프로토콜입니다.그리고proxy_pass다용도로 인해 특히 민감한 데이터를 처리할 때 보안을 보장하려면 추가 구성이 필요할 수 있습니다.

실제 응용 프로그램에서는 다음을 사용하도록 선택합니다.scgi_pass아직proxy_pass 주로 백엔드 애플리케이션의 특성과 요구 사항에 따라 다릅니다.백엔드 애플리케이션이 다음을 사용하도록 특별히 설계된 경우한국어:합의, 그럼scgi_pass 더 나은 선택일 수도 있습니다.백엔드가 표준인 경우편물지원되지 않거나 필요하지 않은 서버 또는 애플리케이션한국어:,그래서proxy_pass더 적절할 수도 있습니다.

3.3 scgi_pass 작동 방식

scgi_pass지시 사항은 다음과 같습니다.엔진엑스처리에 사용한국어: (Simple Common Gateway Interface) 핵심 지침이 요청되었습니다. 작동 방식에는 클라이언트 요청 수신부터 처리된 응답을 클라이언트에 반환하는 것까지 여러 단계가 포함됩니다.

우선, 언제엔진엑스클라이언트로부터 수신됨HTTP 요청이 이루어지면 구성 파일의 규칙에 따라 요청을 처리하는 방법을 결정합니다.요청이 일치하면 사용scgi_pass명령어의 위치 블록,엔진엑스시작할 것이다한국어:처리 흐름.

존재하다한국어:처리 과정에서,엔진엑스먼저, 우리는한국어: 서버 연결.이 연결은 다음과 같습니다.티에스테르소켓 또는유닉스도메인 소켓(다음에 따라 다름)scgi_pass 명령어에 지정된 주소입니다. 업스트림 서버 그룹을 사용하는 경우엔진엑스구성된 로드 밸런싱 알고리즘에 따라 특정 서버도 선택됩니다.

연결이 설정된 후,엔진엑스~ 할 것이다HTTP요청이 다음으로 변환됩니다.한국어: 체재.이 프로세스에는 생성이 포함됩니다.한국어:요청 헤더와 요청 본문.한국어:요청 헤더에는 요청 방법, 경로, 쿼리 문자열, 클라이언트 등 요청에 대한 메타데이터를 제공하는 일련의 키-값 쌍이 포함되어 있습니다.아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP))))))) 주소 등이 정보의 대부분은 원본에서 나온 것입니다.HTTP요청 헤더를 포함할 수도 있지만scgi_param명령으로 설정된 추가 매개변수입니다.

한국어: 요청 헤더의 형식은 구체적입니다. 전체 헤더의 길이를 나타내는 숫자로 시작하고 콜론, 널 문자로 끝나는 일련의 키-값 쌍, 마지막으로 쉼표로 끝납니다.예를 들어, 단순화된한국어:요청 헤더는 다음과 같습니다.

70:CONTENT_LENGTH27SCGI1REQUEST_METHODGETquery_string,
  • 1

이 예에서 "70"은 헤더의 전체 길이를 나타내며 그 뒤에 세 개의 키-값 쌍이 옵니다.CONTENT_LENGTHSCGI그리고REQUEST_METHOD

요청 헤더를 보낸 후,엔진엑스 요청 본문이 전송됩니다(있는 경우).~을 위한얻다요청에는 일반적으로 요청 본문이 없지만우편또는놓다요청, 요청 본문에는 양식 데이터 또는 기타 유형의 콘텐츠가 포함될 수 있습니다.

한국어: 서버는 요청을 받은 후 요청을 처리하고 응답을 생성합니다.응답은 동일한 연결을 통해 다시 전송됩니다.엔진엑스한국어:응답 형식은 비교적 간단합니다. 여기에는 빈 줄로 구분된 응답 헤더와 응답 본문이 포함됩니다.

엔진엑스받았다한국어:서버의 응답 후에는 다시 다음으로 변환됩니다.HTTP 응답 형식.이 프로세스에는 구문 분석이 포함됩니다.한국어:응답 헤더, 적절하게 설정HTTP응답 헤더를 처리한 다음 응답 본문을 그대로 클라이언트에 전달합니다.

전체 과정에서,엔진엑스 또한 연결의 수명주기를 관리하는 역할도 담당합니다.여기에는 연결 시간 초과 처리, 연결 풀링 관리(활성화된 경우)가 포함됩니다.keepalive ), 네트워크 오류 등을 처리합니다. 처리 중 오류가 발생한 경우,엔진엑스구성에 따라 적절한 오류 응답이 클라이언트에 반환됩니다.

게다가,scgi_pass 작업 프로세스는 차단되지 않습니다.이것은 의미한다엔진엑스여러 처리 가능한국어: 각 요청에 대해 새 프로세스나 스레드를 생성하지 않고 요청을 수행합니다.이 디자인은엔진엑스많은 수의 동시 연결을 효율적으로 처리하는 능력.

4. scgi_pass를 사용하도록 Nginx 구성

4.1 기본 구성 예

존재하다엔진엑스중간 구성scgi_pass 의 기본 예는 비교적 간단합니다.이 구성을 사용하면엔진엑스특정 경로에 대한 요청을 다음으로 전달합니다.한국어: 섬기는 사람. 기본 구성 예는 다음과 같습니다.

먼저, 열어보세요엔진엑스기본 구성 파일은 일반적으로 다음 위치에 있습니다./etc/nginx/nginx.conf또는/usr/local/nginx/conf/nginx.conf .이 파일에서 우리는 다음을 수행해야 합니다.http블록 내에서 추가 또는 수정server조각.

존재하다server블록을 추가하겠습니다.location어떤 요청을 전달해야 하는지 정의하는 지시어한국어: 섬기는 사람.예를 들어, 모두 추가하고 싶다면/scgi/처음의 요청은 로컬 포트 ​​9000에서 실행되는 서버로 전달됩니다.한국어:서버에서는 다음 구성을 사용할 수 있습니다.

http {
    server {
        listen 80;
        server_name example.com;

        location /scgi/ {
            scgi_pass localhost:9000;
            include scgi_params;
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

이 구성에서는listen 80지시사항엔진엑스포트 80에서 수신 대기(표준HTTP포트).server_name지시문은 이 서버 블록이 응답해야 하는 도메인 이름을 정의합니다.

location /scgi/블록은 모든 것을 정의합니다/scgi/시작웹 주소 요청이 모두 처리되어야 합니다.우리가 사용하는 이 블록 내부scgi_pass지정하는 명령한국어: 서버의 주소와 포트. 이 예에서는한국어:서버가 동일한 시스템(localhost) 포트 9000.

include scgi_params;명령문에는 일련의 설정을 설정하는 미리 정의된 구성 파일이 포함되어 있습니다.한국어: 매개변수.이러한 매개변수는 다음을 정의합니다.엔진엑스어떻게HTTP요청 정보는 다음으로 변환됩니다.한국어: 묻다.일반적으로 이 파일은 다음 위치에 있습니다./etc/nginx/scgi_params또는/usr/local/nginx/conf/scgi_params

만약 당신의한국어:서버에는 사용할 수 있는 추가 매개변수가 필요합니다.scgi_param 설정하라는 명령입니다.예를 들어, 설정해야 하는 경우SCRIPT_FILENAME매개변수는 다음과 같이 구성할 수 있습니다.

location /scgi/ {
    scgi_pass localhost:9000;
    include scgi_params;
    scgi_param SCRIPT_FILENAME /path/to/your/scripts$fastcgi_script_name;
}
  • 1
  • 2
  • 3
  • 4
  • 5

여기,SCRIPT_FILENAME매개변수는 스크립트의 실제 경로로 설정됩니다.$fastcgi_script_name엔진엑스요청된 스크립트 이름을 나타내는 변수입니다.

만약 당신의한국어:서버 사용량유닉스대신 도메인 소켓티에스테르포트는 다음과 같이 구성할 수 있습니다.

location /scgi/ {
    scgi_pass unix:/tmp/scgi.socket;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

이 예에서는엔진엑스다음을 통해 위치하게 됩니다./tmp/scgi.socket~의유닉스도메인 소켓한국어:서버 통신.

구성이 완료되면 다시 로드하거나 다시 시작해야 합니다.엔진엑스 변경사항이 적용되려면 다음 명령을 사용할 수 있습니다:

sudo nginx -s reload
  • 1

또는

sudo systemctl restart nginx
  • 1

이 기본 구성은 다음과 같습니다.scgi_pass 좋은 출발점을 제공합니다. 특정 요구 사항에 따라 더 많은 조정과 최적화가 필요할 수 있습니다. 예를 들어 버퍼링, 시간 초과를 구성하거나 로드 밸런싱을 위해 업스트림 서버 그룹을 설정해야 할 수 있습니다. 이러한 구성 옵션은 후속 장에서 자세히 설명합니다.

4.2 업스트림 모듈 사용

존재하다엔진엑스 , 업스트림 모듈을 사용하면 로드 밸런싱 및 장애 조치에 사용할 수 있는 서버 세트를 정의할 수 있습니다.함께 있을 때scgi_pass지시문과 함께 사용하면 업스트림 모듈이 크게 향상될 수 있습니다.한국어:상담원의 유연성과 신뢰성.

업스트림 모듈의 기본 구문은 다음과 같습니다.

upstream backend_name {
    server address1;
    server address2;
    # 更多服务器...
}
  • 1
  • 2
  • 3
  • 4
  • 5

이 구성에서는backend_name나중에 사용할 수 있는 이 서버 그룹에 대해 지정한 이름입니다.scgi_pass 지시문에 인용되어 있습니다.각server지시문은 백엔드 서버의 주소를 정의합니다.아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP)))))))주소와 포트 번호도 가능합니다.유닉스도메인 소켓 경로.

예를 들어, 다음과 같은 파일을 정의할 수 있습니다.scgi_servers업스트림 그룹:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server unix:/tmp/scgi.socket;
}
  • 1
  • 2
  • 3
  • 4
  • 5

업스트림을 정의한 후 다음을 수행할 수 있습니다.scgi_pass지시어에 사용하세요:

location /app/ {
    scgi_pass scgi_servers;
    include scgi_params;
}
  • 1
  • 2
  • 3
  • 4

그래서,엔진엑스요청이 다음으로 배포됩니다.scgi_servers그룹의 서버.

업스트림 모듈은 서버 지시문 뒤에 매개변수를 추가하여 구성할 수 있는 다양한 로드 밸런싱 알고리즘을 제공합니다.

  1. 라운드 로빈(기본값): 요청을 각 서버에 순차적으로 배포합니다.

  2. 가중치 폴링: 가중치가 높은 서버는 더 많은 요청을 수신합니다. 예를 들어:

upstream scgi_servers {
    server 127.0.0.1:9000 weight=3;
    server 127.0.0.1:9001 weight=1;
}
  • 1
  • 2
  • 3
  • 4
  1. 최소 연결: 현재 활성화된 연결 수가 가장 적은 서버에 요청을 보냅니다.사용least_conn지침:
upstream scgi_servers {
    least_conn;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP)))))))해시: 클라이언트에 따라아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP)))))))서버를 선택하기 위한 주소의 해시 값은 동일한 주소에서 오는지 확인할 수 있습니다.아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP))))))) 요청은 항상 동일한 서버로 전송됩니다(해당 서버를 사용할 수 없는 경우 제외).사용ip_hash지침:
upstream scgi_servers {
    ip_hash;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}
  • 1
  • 2
  • 3
  • 4
  • 5

업스트림 모듈은 서버 상태 확인 및 장애 조치 기능도 제공합니다.예를 들어, 다음을 사용할 수 있습니다.max_fails그리고fail_timeout오류 감지를 구성하는 매개변수:

upstream scgi_servers {
    server 127.0.0.1:9000 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:9001 max_fails=3 fail_timeout=30s;
}
  • 1
  • 2
  • 3
  • 4

이 구성에서는 서버가 30초 이내에 3번 연속 장애가 발생하면엔진엑스사용할 수 없는 것으로 표시되며 다음 30초 동안 더 이상 요청이 전송되지 않습니다.

추가적으로 우리는 다음을 사용할 수 있습니다.backup모든 기본 서버를 사용할 수 없는 경우에만 사용되는 백업 서버를 지정하는 매개변수:

upstream scgi_servers {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002 backup;
}
  • 1
  • 2
  • 3
  • 4
  • 5

업스트림 모듈을 적절하게 사용함으로써 가용성이 높고 성능이 뛰어난 시스템을 구축할 수 있습니다.한국어: 에이전트 클러스터. 이는 애플리케이션의 전반적인 성능을 향상시킬 뿐만 아니라 시스템의 안정성과 내결함성도 향상시킵니다. 실제 애플리케이션에서는 최상의 시스템 성능을 얻으려면 특정 요구 사항과 시나리오에 따라 적절한 로드 밸런싱 전략과 장애 조치 메커니즘을 선택해야 합니다.

4.3 Unix 소켓 대 TCP 소켓

구성 중엔진엑스~의scgi_pass지시문에 지정할 수 있는 두 가지 주요 옵션이 있습니다.한국어:서버 주소:유닉스도메인 소켓 및티에스테르 소켓. 두 방법 모두 장점과 단점이 있으며 어떤 방법을 선택할지는 특정 애플리케이션 시나리오와 요구 사항에 따라 달라집니다.

유닉스도메인 소켓은 일종의 프로세스 간 통신(국제공통전산망(IPC) ) 동일한 시스템의 프로세스가 효율적으로 통신할 수 있도록 하는 메커니즘입니다.존재하다엔진엑스구성,유닉스 도메인 소켓의 주소는 일반적으로 파일 경로로 표시됩니다. 예를 들어:

scgi_pass unix:/tmp/scgi.socket;
  • 1

사용유닉스 도메인 소켓의 주요 장점은 성능입니다.통신은 동일한 시스템에서 발생하고 네트워크 프로토콜 스택을 거칠 필요가 없으므로유닉스도메인 소켓은 일반적으로 다음보다 작습니다.티에스테르 소켓이 더 빠릅니다.그들은 피한다인터넷 데이터 패킷의 캡슐화 및 캡슐화 해제, 네트워크 혼잡 제어 등 프로토콜로 인해 발생하는 오버헤드입니다.이것은 만든다유닉스도메인 소켓은 특히 다음에 적합합니다.엔진엑스그리고한국어:서버는 동일한 시스템에서 실행됩니다.

또 다른 하나는유닉스 도메인 소켓의 장점은 보안입니다. 통신은 로컬 시스템으로 제한되므로 자연스럽게 네트워크 전체의 공격으로부터 면역됩니다. 또한 파일 시스템 권한을 사용하여 소켓 파일에 대한 액세스를 제어하여 추가 보안 계층을 제공할 수 있습니다.

하지만,유닉스 도메인 소켓에도 제한이 있습니다. 가장 분명한 점은 동일한 시스템의 프로세스 간 통신에만 사용할 수 있다는 것입니다.만약에엔진엑스그리고한국어:서버를 다른 컴퓨터에서 실행해야 하므로 사용할 수 없습니다.유닉스도메인 소켓.

대조적으로,티에스테르소켓 사용량아이피(아이피(아이피(아이피(아이피(아이피(아이피(IP))))))) 주소와 포트 번호를 사용하여 서버 주소를 지정합니다. 예를 들어:

scgi_pass 127.0.0.1:9000;
  • 1

티에스테르 소켓의 가장 큰 장점은 유연성입니다.그들은 허락한다엔진엑스그리고한국어: 서버는 서로 다른 시스템에서 실행됩니다. 이는 수평 확장성이 필요한 분산 시스템이나 애플리케이션에 필요합니다.사용티에스테르소켓을 사용하면 로드 밸런싱을 쉽게 구현하여 여러 요청을 분산할 수 있습니다.한국어:섬기는 사람.

또 다른 장점은티에스테르 소켓을 사용하면 네트워크 수준 모니터링 및 디버깅이 더 쉬워집니다. 표준 네트워크 도구를 사용하여 쉽게 통신 상태를 확인하고 문제를 진단할 수 있습니다.

하지만,티에스테르소켓의 주요 단점은 성능이 소켓보다 약간 낮다는 것입니다.유닉스 도메인 소켓. 동일한 시스템에서 통신하더라도 데이터는 전체 네트워크 프로토콜 스택을 통과해야 하므로 약간의 추가 오버헤드가 발생합니다.추가적으로,티에스테르소켓에는 방화벽 규칙 설정, 다음과 같은 추가 보안 고려 사항이 필요할 수 있습니다.SSL/TLS암호화 등

사용을 선택할 때유닉스도메인 소켓은 여전히티에스테르소켓을 사용할 때 다음 요소를 고려해야 합니다.

  1. 성능 요구 사항: 최고의 성능을 추구하는 경우엔진엑스그리고한국어:서버가 동일한 시스템에 있으므로 선택해야 합니다.유닉스도메인 소켓.

  2. 배포 아키텍처: if엔진엑스그리고한국어:서버가 다른 시스템에서 실행되어야 하거나 로드 밸런싱을 달성해야 하는 경우 다음을 사용해야 합니다.티에스테르소켓.

  3. 보안 요구 사항: 보안이 주요 관심사이고 시스템 간 통신이 필요하지 않은 경우유닉스도메인 소켓이 더 나은 선택일 수 있습니다.

  4. 확장성: 다음이 필요할 것으로 예상되는 경우한국어:서버를 여러 머신으로 확장하려면 다음을 사용하세요.티에스테르소켓은 스키마 조정이 더 쉽습니다.

  5. 디버깅 및 모니터링 요구 사항: 모니터링 및 디버깅을 위해 표준 네트워크 도구를 사용해야 하는 경우티에스테르소켓이 더 적합할 수 있습니다.

즉,유닉스도메인 소켓 및티에스테르 소켓은 모두 유효한 선택입니다. 특정 애플리케이션 요구 사항, 성능 요구 사항 및 배포 환경을 기준으로 선택해야 합니다.특히 고성능을 추구하는 경우가 많고,엔진엑스그리고한국어:동일한 시스템에 서버가 공존하는 경우유닉스 도메인 소켓이 더 나은 선택일 수 있습니다. 그러나 더 큰 유연성이나 분산 배포가 필요한 경우에는티에스테르소켓은 필수 옵션입니다.

5. scgi_pass의 고급 구성

이 장에서는 자세히 논의할 것이다.scgi_pass세 가지 주요 고급 구성 측면: 시간 초과 설정, 버퍼 구성 및 연결 풀 관리.

5.1 타임아웃 설정

시간 초과 설정은 다음을 보장하는 것입니다.엔진엑스그리고한국어: 서버 간 통신 신뢰성의 핵심입니다. 적절한 시간 초과 구성은 문제가 발생한 경우 요청이 무기한 중단되는 것을 방지하는 동시에 느린 연결에 대해 충분한 처리 시간을 제공할 수 있습니다.

엔진엑스여러 제공scgi_pass관련 시간 초과 지침:

가장 먼저scgi_connect_timeout, 정의하는엔진엑스그리고한국어: 서버가 연결을 설정하는 데 걸리는 최대 대기 시간입니다. 지정된 시간 내에 연결을 설정할 수 없는 경우,엔진엑스 오류를 반환합니다. 예를 들어:

scgi_connect_timeout 60s;
  • 1

이 구성은 연결 시간 초과를 60초로 설정합니다.

둘째,scgi_read_timeout지정된엔진엑스~에서한국어: 응답 읽기에 대한 서버의 시간 초과입니다.만약에한국어: 이 시간 동안 서버는 데이터를 전송하지 않았으며 연결이 종료됩니다. 예를 들어:

scgi_read_timeout 60s;
  • 1

마침내,scgi_send_timeout이미 설정됨엔진엑스쪽으로한국어: 서버가 요청을 보내는 시간 초과 기간입니다.지정된 시간 내에 있는 경우한국어: 서버가 데이터를 수신하지 않아 연결이 종료됩니다. 예를 들어:

scgi_send_timeout 60s;
  • 1

이러한 시간 초과 설정은 실제 애플리케이션의 요구 사항에 따라 조정되어야 합니다. 대부분의 애플리케이션에서는 기본값으로 충분합니다. 그러나 일부 장기 실행 요청의 경우 이러한 시간 초과 값을 늘려야 할 수도 있습니다.

5.2 버퍼 구성

최적화를 위한 버퍼 구성엔진엑스그리고한국어: 서버 간 데이터 전송이 중요합니다. 합리적인 버퍼 설정은 응답 속도를 향상시키고 리소스 소비를 줄일 수 있습니다.

scgi_buffer_size읽기 설정 지침한국어: 서버 응답의 첫 번째 부분에 대한 버퍼 크기입니다. 여기에는 일반적으로 작은 응답 헤더가 포함됩니다. 예를 들어:

scgi_buffer_size 4k;
  • 1

scgi_buffers읽기에 대한 지침이 정의되어 있습니다.한국어: 서버 응답을 위한 버퍼의 수와 크기입니다. 예를 들어:

scgi_buffers 8 4k;
  • 1

이 구성은 4k 크기의 버퍼 8개를 생성합니다.

응답이 메모리에 완전히 맞지 않으면 다음을 사용할 수 있습니다.scgi_max_temp_file_size임시 파일의 최대 크기를 제한하는 지시어:

scgi_max_temp_file_size 1024m;
  • 1

이는 임시 파일의 최대 크기를 1024MB로 제한합니다.

큰 응답의 경우 다음을 사용할 수 있습니다.scgi_busy_buffers_size사용 중 상태에서 사용 가능한 버퍼 크기를 제한하는 지시어:

scgi_busy_buffers_size 8k;
  • 1

이러한 버퍼 설정은 최적의 성능을 위해 애플리케이션 특성 및 서버 리소스에 따라 조정되어야 합니다.

5.3 연결 풀 관리

연결 풀 관리가 최적화되었습니다.엔진엑스그리고한국어: 서버 간 통신의 또 다른 중요한 측면입니다. 연결을 재사용하면 새 연결을 설정하는 데 드는 오버헤드가 크게 줄어들고 전반적인 성능이 향상됩니다.

scgi_keepalive업스트림 구성 지시어한국어: 서버가 활성 상태를 유지할 수 있는 최대 유휴 연결 수입니다. 예를 들어:

scgi_keepalive 10;
  • 1

이 구성을 사용하면 각 작업자 프로세스가 최대 10개의 유휴 연결 유지 연결을 유지할 수 있습니다.

사용할 수 있다scgi_http_version지정하는 명령엔진엑스함께 사용한국어:서버 통신HTTP프로토콜 버전:

scgi_http_version 1.1;
  • 1

사용HTTP 1.1 (HTTP 1.1)연결 풀의 효율성을 유지하는 데 중요한 장기 연결을 활성화할 수 있습니다.

또한 다음을 사용할 수 있습니다.scgi_next_upstream요청이 다음 서버로 전달되어야 하는 상황을 제어하는 ​​지시어:

scgi_next_upstream error timeout invalid_header http_500;
  • 1

이 구성은 오류가 발생하거나, 시간 초과가 발생하거나, 잘못된 헤더가 수신되거나, 또는HTTP 500 오류가 발생하면 요청이 다음 서버로 전달되어야 합니다.

6. Python flup 웹 배포 사례

작성 예정

6.1 단계 요약

6.2 컨테이너화된 배포

7. 요약

이 기사에서는 자세히 설명합니다.엔진엑스가운데scgi_pass특히 다음에 중점을 두고 지침을 적용합니다.파이썬 애플리케이션 구성 및 배포.우리가 처음 소개한한국어:그런 다음 프로토콜의 특성과 장점에 대해 자세히 설명했습니다.scgi_pass 지시어에 대한 기본 구문 및 고급 구성 옵션입니다.실제 사례를 통해 방법을 보여줍니다.파이썬 플럽프레임 구성scgi_pass, 기본 설정, 로드 밸런싱, 연결 풀링 및 버퍼 관리를 포함합니다.