>운영 및 유지보수 >엔진스 >nginx가 할 수 있는 일

nginx가 할 수 있는 일

步履不停
步履不停원래의
2019-06-20 15:33:013207검색

nginx가 할 수 있는 일

Nginx의 제작

Nginx에 대해 들어본 적이 없나요? 그렇다면 "동료" Apache에 대해 들어보셨을 것입니다! Nginx는 Apache와 마찬가지로 웹 서버입니다. REST 아키텍처 스타일을 기반으로 하여, 통일 자원 식별자 URI(Uniform Resources Identifier URI) 또는 통일 자원 로케이터 URL(Uniform Resources Locator URL)을 통신 기반으로 사용하여 HTTP 프로토콜을 통해 다양한 네트워크 서비스를 제공합니다.

그러나 이러한 서버는 사용자 규모, 네트워크 대역폭, 제품 기능 및 기타 제한 사항 등 원래 설계 당시의 환경과 각각의 포지셔닝 및 개발에 의해 제한되었습니다. 달랐다. 이는 또한 각 웹 서버가 고유한 특징을 갖도록 합니다.

Apache는 오랜 개발 기간을 거쳐 전 세계 부동의 1위 서버입니다. 안정성, 오픈 소스, 크로스 플랫폼 등 많은 장점이 있습니다. 너무 오래전부터 등장한 시대에는 인터넷 산업이 지금보다 훨씬 열등했습니다. 그래서 헤비급으로 설계되었습니다. 동시성이 높은 서버는 지원하지 않습니다. Apache에서 수만 건의 동시 액세스를 실행하면 서버가 많은 메모리를 소비하게 됩니다. 운영 체제에 의한 프로세스 또는 스레드 간의 전환도 많은 양의 CPU 리소스를 소비하므로 HTTP 요청의 평균 응답 속도가 감소합니다.

이 모든 것이 Apache가 고성능 웹 서버가 될 수 없음을 결정하고, 경량의 동시성 서버인 Nginx가 탄생하게 된 것입니다.

러시아 엔지니어 Igor Sysoev는 Rambler Media에서 근무하면서 C 언어를 사용하여 Nginx를 개발했습니다. Nginx는 웹 서버로서 항상 Rambler Media에 우수하고 안정적인 서비스를 제공해 왔습니다.

그런 다음 Igor Sysoev는 Nginx 코드를 오픈소스화하고 무료 소프트웨어 라이선스를 부여했습니다.

이유:

  • Nginx는 수백만 개의 TCP 연결을 지원할 수 있는 이벤트 기반 아키텍처를 사용합니다.
  • Height 모듈성 무료 소프트웨어 라이센스를 통해 타사 모듈이 끝없는 흐름으로 등장할 수 있습니다(지금은 오픈 소스 시대입니다~)
  • Nginx는 Linux, Windows, FreeBSD, Solaris, AIX, Mac OS 및 기타 운영 체제에서
  • 이러한 뛰어난 디자인은 뛰어난 안정성을 제공합니다

따라서 Nginx가 인기가 있습니다!

Nginx의 장점

Nginx는 무료 오픈 소스 고성능 HTTP 서버이자 역방향 프록시 서버이며 IMAP, POP3, SMTP 프록시 서버이기도 합니다. Nginx를 HTTP 서버로 사용하여 웹 사이트를 게시할 수 있으며, Nginx를 역방향 프록시로 사용하여 로드 밸런싱을 구현할 수 있습니다.

에이전시 소개

에이전시라고 하면 우선 개념을 명확히 해야 합니다. 소위 에이전시는 대표이자 채널입니다. 🎜#이것은 두 가지 역할이 있는데, 하나는 에이전트 역할이고 다른 하나는 대상 역할입니다. 이 에이전트를 통해 일부 작업을 완료하기 위해 에이전트 역할이 대상 역할에 액세스하는 프로세스를 에이전트 작업 프로세스라고 합니다. 생활 속의 전문점~ 고객이 아디다스 전문점에서 물건을 구매합니다. 신발 한 켤레에 대해 이 매장은 대리점, 대리점 역할은 아디다스 제조업체, 대상 역할은 사용자입니다.

정방향 프록시

역방향 프록시에 대해 이야기하기 전에 정방향 프록시도 모두가 접하는 가장 일반적인 프록시 모델에 대해 살펴보겠습니다. 두 가지 측면에서 순방향 프록시 처리 모델에 대해 소프트웨어 측면과 수명 측면에서 각각 순방향 프록시가 무엇인지 설명하겠습니다.

오늘날의 네트워크 환경에서는 기술적 필요로 인해 특정 외국 웹사이트에 접속해야 하는 경우 브라우저를 통해 특정 외국 웹사이트에 접속할 수 있는 방법이 없다는 것을 알게 될 것입니다. FQ 접속 방법은 주로 외국 사이트에 접속할 수 있는 프록시 서버를 찾는 것인데, 프록시 서버에 요청을 보내면 프록시 서버가 외국 사이트에 접속한 후 접속한 데이터를 우리에게 전달해줍니다!

위 프록시 모드를 순방향 프록시라고 합니다.

순방향 프록시의 가장 큰 특징은 클라이언트가 액세스하려는 서버 주소를 매우 명확하게 알 수 있다는 것입니다.

서버만 해당됩니다. 어떤 특정 클라이언트에서 요청이 왔는지 알지 못해도 요청이 프록시 서버에서 오는 위치를 알 수 있습니다. 실제 클라이언트 정보를 보호하거나 숨깁니다. 회로도를 살펴보겠습니다(클라이언트와 전달 프록시를 함께 배치했으며 동일한 환경에 속하므로 나중에 소개하겠습니다).

#🎜🎜 ##🎜🎜 #

클라이언트는 순방향 프록시 서버를 설정해야 합니다. nginx가 할 수 있는 일물론, 순방향 프록시 서버의 IP 주소와 프록시 프로그램의 포트를 알아야 합니다. 그림과 같습니다.

요약하자면: 정방향 프록시, "클라이언트를 대신하여 요청을 하는 역할을 합니다.", 클라이언트와 원본 서버(오리진 서버) 사이에 위치한 서버입니다. 서버가 콘텐츠를 획득하고, 클라이언트가 프록시에 요청을 보내고 대상(원본 서버)을 지정한 후, 프록시는 요청을 원본 서버로 전달하고 획득한 콘텐츠를 클라이언트에 반환합니다. . 클라이언트는 정방향 프록시를 사용하려면 몇 가지 특별한 설정을 지정해야 합니다.

순방향 프록시 사용:
(1) Google과 같이 원래 액세스할 수 없었던 리소스에 액세스
(2) 리소스에 대한 액세스 속도를 높이기 위해 캐시할 수 있음
(3) 클라이언트 액세스 권한 부여 및 인터넷 인증
(4) 프록시 사용자 접속 기록(온라인 행동 관리)을 기록하고 사용자 정보를 외부에서 숨길 수 있습니다.

역방향 프록시

순방향 프록시가 무엇인지 이해하면서 역방향 프록시의 처리 방법을 계속 살펴보겠습니다. 매일 같은 시간에 웹사이트에 접속하는 방문자 수가 폭발적으로 증가했습니다. 단일 서버로는 점점 늘어나는 사람들의 구매 욕구를 충족시킬 수 없습니다. 이때 분산 배포라는 친숙한 용어가 등장했습니다. 즉, 방문자 수를 제한하는 문제를 해결하기 위해 여러 서버를 배포합니다. 특정 웹사이트의 대부분의 기능도 역방향 프록시를 위해 Nginx를 사용하여 직접 구현되며 Nginx 및 기타 구성 요소를 캡슐화한 후 멋진 이름을 갖습니다. : Tengine. 관심 있는 어린이는 Tengine을 방문하여 자세한 정보를 확인하세요: http://tengine.taobao.org/. 그렇다면 역방향 프록시는 분산 클러스터 작업을 어떻게 구현합니까? 먼저 도식 다이어그램을 살펴보겠습니다(서버와 역방향 프록시를 함께 구성하고 둘 다 동일한 환경에 속하므로 나중에 소개하겠습니다).

nginx가 할 수 있는 일

가능한 대로 위 다이어그램에서 명확하게 볼 수 있듯이, 여러 클라이언트가 서버로 보낸 요청을 받은 후 Nginx 서버는 특정 규칙에 따라 처리하기 위해 이를 백엔드 비즈니스 처리 서버에 배포합니다. 이때 요청의 출처, 즉 클라이언트는 분명하지만, 어느 서버가 요청을 처리하는지 Nginx가 역방향 프록시 역할을 하는지는 확실하지 않습니다.

클라이언트는 프록시의 존재를 알지 못합니다. 역방향 프록시는 외부 세계에 투명합니다. 방문자는 자신이 프록시를 방문하고 있다는 사실을 모릅니다. 클라이언트에 액세스하는 데 구성이 필요하지 않기 때문입니다.

역방향 프록시, "서버에 대한 프록시 역할을 하며 서버를 대신하여 요청을 받습니다." , 주로 서버 클러스터 분산 배포의 경우에 사용되며, 역방향 프록시는 서버를 숨깁니다. 정보.

역방향 프록시의 역할:
(1) 인트라넷의 보안을 보장하고 일반적으로 역방향 프록시를 공용 네트워크 액세스 주소로 사용하며 웹 서버는 인트라넷입니다.
(2) 로드 밸런싱을 통해 웹사이트를 최적화합니다. 역방향 프록시 서버 Load

프로젝트 시나리오

일반적으로 실제 프로젝트를 운영할 때 응용 시나리오에는 순방향 프록시와 역방향 프록시가 존재할 가능성이 높습니다. 대상 서버에 액세스하기 위한 순방향 프록시 클라이언트의 요청입니다. 여러 실제 비즈니스 처리 서버를 역방향으로 프록시하는 역방향 단일 관심 서버입니다. 구체적인 토폴로지 다이어그램은 다음과 같습니다.

nginx가 할 수 있는 일

둘의 차이점

그림과 같이 정방향 프록시와 역방향 프록시의 차이점을 설명하기 위해 스크린샷을 찍었습니다.

nginx가 할 수 있는 일

그림:

프록시와 클라이언트는 동일한 LAN에 속하며(그림의 상자)

역방향 프록시에서는 프록시와 서버가 숨겨집니다. 동일한 LAN에 속해 있으므로(그림의 상자 내부) 서버 정보가 숨겨져 있습니다.

사실 두 프록시에서 프록시가 하는 일은 서버를 대신하여 요청과 응답을 보내고 받는 것입니다. 관점에서는 왼쪽과 오른쪽이 바뀌기 때문에 나중에 등장한 프록시 방식을 역방향 프록시라고 합니다.

로드 밸런싱

프록시 서버라는 개념을 명확히 했으니 다음으로 Nginx는 역방향 프록시 서버 역할을 하게 되는데 어떤 규칙에 따라 요청을 분배하나요? 다양한 프로젝트 적용 시나리오에 대해 배포 규칙을 제어할 수 있습니까?

여기서 언급된 클라이언트가 보내고 Nginx 역방향 프록시 서버가 받는 요청 수를 로드라고 합니다.

특정 규칙에 따라 요청 수를 여러 서버에 분배하여 처리하는 규칙은 균형 조정 규칙입니다.

그래서~ 서버가 받은 요청을 규칙에 따라 분배하는 과정을 로드 밸런싱이라고 합니다.

실제 프로젝트 운영 과정에서 로드 밸런싱에는 하드웨어 로드 밸런싱과 소프트웨어 로드 밸런싱의 두 가지 유형이 있습니다. 하드웨어 로드 밸런싱은 F5 로드 밸런싱과 같이 상대적으로 비용이 많이 들고 비용이 많이 들지만 안정성과 데이터 보안 등. China Mobile 및 China Unicom과 같은 회사는 매우 좋은 보장이 있는 경우에만 하드 로드 작업을 선택합니다. 더 많은 회사가 비용상의 이유로 소프트웨어 로드 밸런싱을 사용하도록 선택할 것입니다. . 하드웨어에 구현된 메시지 대기열 배포 메커니즘입니다.

nginx가 할 수 있는 일

Nginx에서 지원하는 로드 밸런싱 스케줄링 알고리즘은 다음과 같습니다.

  1. 가중치 폴링(기본값, 일반적으로 사용됨): 수신된 요청은 작업 중에 특정 서버가 사용 중이더라도 가중치에 따라 다른 백엔드 서버로 분산됩니다. use 백엔드 서버가 다운되면 Nginx는 대기열에서 서버를 자동으로 제거하며 요청 수락은 어떤 식으로든 영향을 받지 않습니다. 이러한 방식으로 서로 다른 백엔드 서버에 대해 가중치 값(가중치)을 설정하여 서로 다른 서버의 요청 할당 비율을 조정할 수 있으며, 가중치 데이터가 클수록 요청에 할당될 확률이 높아집니다. , 실제 작업 환경에서 다양한 백엔드 서버 하드웨어 구성에 맞게 주로 조정됩니다.
  2. ip_hash(일반적으로 사용됨): 각 요청은 시작 클라이언트 IP의 해시 결과에 따라 일치됩니다. 이 알고리즘에서는 고정 IP 주소를 가진 클라이언트가 항상 동일한 백엔드 서버에 액세스하므로 문제도 해결됩니다. 클러스터 배포 환경에서 세션 공유에 문제가 있습니다.
  3. fair: 스케줄링 알고리즘의 지능적 조정, 요청 처리부터 백엔드 서버의 응답까지의 시간을 기준으로 동적이며 균형 잡힌 할당 응답 시간이 짧고 처리 효율성이 높은 서버는 요청에 할당될 확률이 높습니다. , 응답 시간이 길고 처리 효율성이 낮은 서버가 할당됩니다. 처음 두 가지의 장점을 결합한 스케줄링 알고리즘입니다. 그러나 Nginx는 기본적으로 Fair 알고리즘을 지원하지 않는다는 점에 유의해야 합니다. 이 스케줄링 알고리즘을 사용하려면 upstream_fair 모듈을 설치하세요.
  4. url_hash: 액세스된 URL의 해시 결과에 따라 요청을 배포합니다. 각 요청의 URL은 백엔드의 고정 서버를 가리키며, 이는 Nginx를 정적 서버로 사용할 때 캐싱 효율성을 향상시킬 수 있습니다. 또한 Nginx는 기본적으로 이 스케줄링 알고리즘을 지원하지 않는다는 점에 유의해야 합니다. 이를 사용하려면 Nginx 해시 소프트웨어 패키지를 설치해야 합니다.

여러 일반적인 웹 서버 비교

비교 서버 Apache Nginx Lighttpd
프록시 프록시 매우 좋음 매우 좋음 평균
Rewriter 좋음 매우 좋음 평균
Fcgi 나쁨 좋음 매우 좋음
핫 배포 지원되지 않음 지원 지원되지 않음
시스템 압력 매우 큼 매우 작음 비교적 작음
안정성 좋음 매우 좋음 나쁨
안전 좋음 Average Average
정적 파일 처리 평균 매우 좋음 좋음
역방향 프록시 평균 매우 좋음 평균

더 많은 Nginx 관련 기술 기사를 방문하세요. Nginx 튜토리얼 칼럼 배우다!

위 내용은 nginx가 할 수 있는 일의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.