웹사이트 검색

Nginx가 Apache보다 실질적으로 더 낫다고 생각하는 이유


2017년 말(정확히 11월)에 실시된 Netcraft의 최근 웹 서버 조사에 따르면, Apache와 Nginx는 인터넷에서 가장 널리 사용되는 오픈 소스 웹 서버입니다.

Apache는 Unix 계열 운영 체제 및 Windows를 위한 무료 오픈 소스 HTTP 서버입니다. 이는 일반적인 HTTP 표준과 동기화된 HTTP 서비스를 제공하는 안전하고 효율적이며 확장 가능한 서버로 설계되었습니다.

Apache는 출시 이후 1996년부터 인터넷에서 가장 인기 있는 웹 서버였습니다. 이는 Linux 및 오픈 소스 생태계의 웹 서버에 대한 사실상의 표준입니다. 새로운 Linux 사용자는 일반적으로 설정 및 사용이 더 쉽다고 생각합니다.

Nginx('Engine-x'로 발음)는 무료 오픈 소스 고성능 HTTP 서버, 역방향 프록시 및 IMAP/POP3 프록시 서버입니다. Apache와 마찬가지로 Unix 계열 운영 체제 및 Windows에서도 실행됩니다.

고성능, 안정성, 간단한 구성 및 낮은 리소스 소비로 잘 알려진 이 제품은 수년에 걸쳐 인기를 얻었으며 인터넷에서의 사용이 점점 더 높아지고 있습니다. 이제는 숙련된 시스템 관리자나 상위 사이트의 웹 마스터가 선택하는 웹 서버입니다.

다음이 제공하는 일부 바쁜 사이트:

  • Apache에는 PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com 등이 있습니다.
  • Nginx에는 Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud 등이 있습니다.

ApacheNginx의 비교에 관해 이미 웹에 게시된 수많은 리소스가 있습니다(실제로는 'Apache 대 Nginx' 기사를 의미합니다). 그 중 랩 벤치마크의 성능 측정을 포함하여 다양한 시나리오에서의 주요 기능과 작동을 자세히 설명합니다. 그러므로 여기서는 다루지 않겠습니다.

다음에는 최신 웹 애플리케이션을 호스팅하기 위한 요구 사항을 기반으로 프로덕션 환경에서 ApacheNginx를 모두 사용해 본 전체 토론에 대한 내 경험과 생각을 간단히 공유하겠습니다. 부분.

Nginx가 Apache보다 실질적으로 더 낫다고 생각하는 이유

다음은 최신 웹 콘텐츠 전달을 위해 Apache보다 Nginx 웹 서버를 선호하는 이유입니다.

1. Nginx는 가볍다

Nginx는 가벼운 웹 서버 중 하나입니다. 애플리케이션을 실행하는 데 필요한 광범위한 기능을 구현하는 Apache에 비해 시스템 공간이 작습니다.

Nginx는 몇 가지 핵심 기능을 통합하기 때문에 Apache 백엔드, FastCGI, Memcached, SCGI 및 uWSGI 서버와 같은 전용 타사 업스트림 웹 서버 또는 애플리케이션 서버(예: Node.js, Tomcat과 같은 언어별 서버)에 의존합니다. , 등.

따라서 메모리 사용량은 Apache보다 제한된 리소스 배포에 훨씬 더 적합합니다.

2. Nginx는 높은 동시성을 위해 설계되었습니다.

Apache의 스레드 또는 프로세스 중심 아키텍처(연결당 프로세스 또는 연결당 스레드 모델)와 달리 Nginx는 확장 가능한 이벤트 기반(비동기) 아키텍처를 사용합니다. 사용 가능한 하드웨어 리소스에 맞게 조정된 책임 있는 프로세스 모델을 사용합니다.

여기에는 구성 읽기 및 포트 바인딩과 같은 권한 있는 작업을 수행하는 마스터 프로세스가 있으며 여러 작업자 및 도우미 프로세스를 생성합니다.

작업자 프로세스는 각각 수천 개의 HTTP 연결을 동시에 처리하고, 디스크에 콘텐츠를 읽고 쓰고, 업스트림 서버와 통신할 수 있습니다. 도우미 프로세스(캐시 관리자 및 캐시 로더)는 온디스크 콘텐츠 캐싱 작업을 관리할 수 있습니다.

이를 통해 작업을 확장할 수 있고 결과적으로 고성능이 가능해집니다. 이러한 설계 접근 방식은 속도를 더욱 빠르고 현대적인 애플리케이션에 유리하게 만듭니다. 또한 타사 모듈을 사용하여 Nginx의 기본 기능을 확장할 수 있습니다.

3. Nginx는 구성이 쉽습니다.

Nginx는 구성 파일 구조가 단순하여 구성이 매우 쉽습니다. 이는 구성 파일에 지정된 지시문에 의해 제어되는 모듈로 구성됩니다. 또한 지시문은 블록 지시문과 단순 지시문으로 구분됩니다.

블록 지시문은 중괄호({})로 정의됩니다. 블록 지시문이 중괄호 안에 다른 지시문을 가질 수 있는 경우 이를 이벤트, http, 서버 및 위치와 같은 컨텍스트라고 합니다.

http {
	server {
		
	}
}

단순 지시어는 공백으로 구분된 이름과 매개변수로 구성되며 세미콜론 (;)로 끝납니다.

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

예를 들어, include 지시문을 사용하여 사용자 정의 구성 파일을 포함할 수 있습니다.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

나에게 실용적인 예는 다양한 PHP 버전으로 여러 웹사이트를 실행하도록 Nginx를 쉽게 구성하는 방법이었습니다. 이는 Apache에서는 약간 어려운 일이었습니다.

4. Nginx는 뛰어난 프론트엔드 프록시입니다

Nginx의 일반적인 용도 중 하나는 이를 프록시 서버로 설정하는 것입니다. 이 경우 클라이언트로부터 HTTP 요청을 수신하고 이를 다른 프로토콜을 통해 위에서 언급한 프록시 서버 또는 업스트림 서버에 전달합니다. 또한 프록시 서버로 전송되는 클라이언트 요청 헤더를 수정하고 프록시 서버에서 오는 응답의 버퍼링을 구성할 수도 있습니다.

그런 다음 프록시 서버로부터 응답을 받아 클라이언트에 전달합니다. 대부분의 경우 필수 모듈이 기본적으로 활성화되어 있으므로 Apache에 비해 프록시 서버로 구성하는 것이 훨씬 쉽습니다.

5. Nginx는 정적 콘텐츠를 제공하는 데 탁월합니다.

정적 콘텐츠 또는 파일은 일반적으로 CSS 파일, JavaScript 파일 또는 이미지와 같이 서버 컴퓨터의 디스크에 저장되는 파일입니다. Nginx를 Nodejs(애플리케이션 서버)의 프런트엔드로 사용하는 시나리오를 고려해 보겠습니다.

Nodejs 서버(특히 Node 프레임워크)에는 정적 파일 처리 기능이 내장되어 있지만 비동적 콘텐츠를 전달하기 위해 집중적인 처리를 수행할 필요가 없으므로 정적 콘텐츠를 직접 제공하도록 웹 서버를 구성하는 것이 실질적으로 유리합니다. 클라이언트.

Nginx는 특정 디렉터리의 정적 파일을 훨씬 효과적으로 처리할 수 있으며 정적 자산에 대한 요청으로 인해 업스트림 서버 프로세스가 중단되는 것을 방지할 수 있습니다. 이는 백엔드 서버의 전반적인 성능을 크게 향상시킵니다.

6. Nginx는 효율적인 로드 밸런서입니다.

최신 웹 애플리케이션의 고성능 및 가동 시간을 실현하려면 단일 또는 분산 HTTP 서버에서 여러 애플리케이션 인스턴스를 실행해야 할 수도 있습니다. 따라서 HTTP 서버 간에 로드를 분산하기 위해 로드 밸런싱을 설정해야 할 수도 있습니다.

오늘날 로드 밸런싱은 여러 애플리케이션 인스턴스에 걸쳐 운영 체제 리소스 활용도 최적화, 유연성 극대화, 대기 시간 단축, 처리량 증가, 중복성 달성, 내결함성 구성 설정을 위해 널리 사용되는 접근 방식이 되었습니다.

Nginx는 다음과 같은 로드 밸런싱 방법을 사용합니다.

  • 라운드 로빈(기본 방법) - 업스트림 서버에 대한 요청은 라운드 로빈 방식으로 배포됩니다(업스트림 풀의 서버 목록 순서).
  • 최소 연결 – 여기서 다음 요청은 활성 연결 수가 가장 적은 서버로 프록시됩니다.
  • ip-hash - 여기에서는 해시 함수를 사용하여 다음 요청에 어떤 서버를 선택해야 하는지 결정합니다(클라이언트의 IP 주소 기준).
  • 일반 해시 – 이 방법에서는 시스템 관리자가 지정된 텍스트, 요청 또는 런타임 변수 또는 이들의 조합으로 해시(또는 키)를 지정합니다. 예를 들어 키는 소스 IP와 포트 또는 URI일 수 있습니다. 그런 다음 Nginx는 현재 요청에 대한 해시를 생성하고 이를 업스트림 서버에 배치하여 업스트림 서버 간에 로드를 분산합니다.
  • 최소 시간(Nginx Plus) – 현재 연결 수가 가장 적은 업스트림 서버에 다음 요청을 할당하지만 평균 응답 시간이 가장 낮은 서버를 선호합니다.

7. Nginx는 확장성이 뛰어납니다.

또한 Nginx는 확장성이 뛰어나고 현대적인 웹 애플리케이션, 특히 고성능과 확장성을 제공하는 기술을 요구하는 기업 애플리케이션입니다.

Nginx의 놀라운 확장성 기능의 이점을 누리고 있는 회사 중 하나는 CloudFlare입니다. Matthew Prince에 따르면 이 회사는 상대적으로 적당한 인프라를 사용하여 월 150억 개가 넘는 페이지 보기를 처리할 수 있도록 웹 애플리케이션을 확장했습니다. Strong>, CloudFare의 공동 창립자이자 CEO입니다.

보다 포괄적인 설명을 보려면 Nginx 블로그의 NGINX vs. Apache: Our View of a Decade-Old Question의 기사를 확인하세요.

결론

ApacheNginx는 서로 대체할 수 없으며 장점과 단점이 있습니다. 그러나 Nginx는 최신 웹사이트와 웹 애플리케이션을 안정적이고 효율적으로 구동하기 위한 강력하고 유연하며 확장 가능하고 안전한 기술을 제공합니다. 당신의 의견은 무엇입니까? 아래 피드백 양식을 통해 알려주십시오.