nginx 가 역방향 대리 로 서 부하 균형 기능 을 실현 하 는 것 을 상세 하 게 설명 합 니 다.

6284 단어 nginx
nginx 라 는 경량급, 고성능 웹 서버 는 주로 두 가지 일 을 할 수 있 습 니 다.
 
1. http server (apache 대신 에 PHP 에 FastCGI 프로세서 지원 이 필요 함).
2. 또 다른 기능 은 역방향 프 록 시 서버 로 부하 균형 을 실현 하 는 것 이다.
 
 
다음은 nginx 를 어떻게 사용 하여 부하 균형 을 실현 하 는 지 예 를 들 어 설명 한다.nginx 가 병발 을 처리 하 는 데 있어 서 의 장점 때문에 현재 이 응용 은 매우 흔히 볼 수 있다.그럼요.
 
Apache 의 modproxy 와 modcache 결합 사용 도 여러 대의 app server 에 대한 역방향 에이전트 와 부하 균형 을 실현 할 수 있 으 나 병행 처리 에 있어 서 는
 
apache 는 아직 nginx 가 잘 하지 못 합 니 다.
 
1. 환경:
a. 저 는 로 컬 Windows 시스템 입 니 다. 그리고 VirutalBox 를 사용 하여 가상 Linux 시스템 을 설치 합 니 다.로 컬 윈도 시스템 에 nginx (탐지 8080 포트) 와 apache (탐지 80 포트) 를 각각 설치 합 니 다.가상 Linux 시스템 에 apache 를 설치 합 니 다.이렇게 하면 우 리 는 nginx 한 대 를 전단 에서 역방향 프 록 시 서버 로 가지 고 있 는 것 과 같다.뒤에 apache 2 대가 응용 프로그램 서버 로 있 습 니 다 (작은 server cluster 로 볼 수 있 습 니 다).
b. nginx 는 역방향 프 록 시 서버 로 apache 두 대 에 설치 하기 전에 사용자 가 방문 하 는 입구 로 사용 합 니 다.nginx 는 정적 페이지 만 처리 하고 동적 페이지 (phop 요청) 는 모두 배경 에 있 는 apache 두 대 에 게 전달 합 니 다.즉, 우리 사이트 의 정적 페이지 나 파일 을 nginx 디 렉 터 리 에 배치 할 수 있 습 니 다.동적 페이지 와 데이터베이스 접근 은 백 엔 드 apache 서버 에 보 존 됩 니 다.
c. server cluster 의 부하 균형 을 실현 하 는 두 가지 방법 을 소개 한다.우 리 는 전단 nginx (127.0.0.1: 80) 가 정적 페이지 index. html 만 포함한다 고 가정 합 니 다.백 엔 드 의 두 개의 apache 서버 (각각 localhost: 80 과 158.37.70.143: 80), 한 개의 루트 디 렉 터 리 는 phpMyAdmin 폴 더 와 test. php (내부 테스트 코드 는 print "server 1";), 다른 루트 디 렉 터 리 는 하나의 test. php (내부 테스트 코드 는 print "server 2";) 만 설치 합 니 다.
 
2. 서로 다른 요구 에 대한 부하 균형
a. 가장 간단하게 역방향 대 리 를 구축 할 때 (nginx 는 정적 으로 동적 내용 을 처리 하지 않 고 동적 내용 은 배경 에 있 는 apache server 에 맡 겨 처리 합 니 다) 우리 의 구체 적 인 설정 은 nginx. conf 에서 수정 합 니 다.
location ~ \.php$ { 
proxy_pass 158.37.70.143:80 ; 
} 



 
> 이렇게 클 라 이언 트 가 localhost: 8080 / index. html 에 접근 할 때 전단 의 nginx 는 자동 으로 응답 합 니 다. > 사용자 가 localhost: 8080 / test. php 에 접근 할 때 (이때 nginx 디 렉 터 리 에 이 파일 이 전혀 없습니다) 위의 설정 location ~ \. php $(정규 표현 식 이. php 로 끝 나 는 파일 과 일치 하 는 것 을 표시 합 니 다. location 이 어떻게 정의 되 고 일치 하 는 지 http://wiki.nginx.org/NginxHttpCoreModule 를 참조 하 십시오. nginx 서버 는 158.37.70.143 apache 서버 에 자동 으로 패스 합 니 다. 이 서버 의 test. php 는 자동 으로 해석 되 고 html 결과 페이지 를 nginx 에 되 돌려 줍 니 다. 그리고 nginx 는 표시 합 니 다.(nginx 가 memcached 모듈 이나 squid 를 사용 하면 캐 시 를 지원 할 수 있 습 니 다) 출력 결 과 는 server 2 를 인쇄 합 니 다.
위 와 같이 nginx 를 역방향 프 록 시 서버 로 사용 하 는 가장 간단 한 예 입 니 다.
b. 저 희 는 현재 상기 예 와 같은 두 대의 서버 를 지원 하도록 확장 하고 있 습 니 다. 저 희 는 nginx. conf 의 server 모듈 부분 을 설정 하고 해당 부분 을 다음 과 같이 수정 합 니 다.
location ^~ /phpMyAdmin/ { 
proxy_pass 127.0.0.1:80 ; 
} 
location ~ \.php$ { 
proxy_pass 158.37.70.143:80 ; 
} 


 
위의 첫 번 째 부분 location ^ ~ / phpMyAdmin / 는 정규 표현 식 을 사용 하지 않 고 (^ ~) 직접 일치 한 다 는 뜻 입 니 다. 즉, 클 라 이언 트 가 방문 한 URL 이 http://localhost:8080/phpMyAdmin/ 로 시작 하면 (로 컬 nginx 디 렉 터 리 에 phpMyAdmin 디 렉 터 리 가 전혀 없습니다)nginx 는 127.0.0.1: 80 의 Apache 서버 로 자동 으로 패스 합 니 다. 이 서버 는 phpMyAdmin 디 렉 터 리 에 있 는 페이지 를 분석 한 다음 에 그 결 과 를 nginx, 후자 에 게 보 냅 니 다. 클 라 이언 트 가 URL http://localhost/test.php 에 접근 하면 158.37.70.143: 80 의 apache 로 패스 됩 니 다.
따라서 우 리 는 서로 다른 요청 에 대한 부하 균형 을 이 루 었 습 니 다. > 사용자 가 정적 페이지 index. html 를 방문 하면 맨 앞 에 있 는 nginx 가 직접 응답 합 니 다. > 사용자 가 test. php 페이지 를 방문 하면 158.37.70.143: 80 의 Apache 가 응답 합 니 다. > 사용자 가 디 렉 터 리 phpMyAdmin 아래 페이지 를 방문 하면 127.0.0.1: 80 의 Apache 가 응답 합 니 다.
 
3. 같은 페이지 에 접근 하 는 부하 균형:
즉, 사용자 가 같은 페이지 를 방문 할 때 저 희 는 두 서버 의 부하 균형 을 실현 합 니 다 (실제 상황 에서 이 두 서버 의 데이터 요구 가 일치 합 니 다. 여기 서 저 희 는 각각 server 1 과 server 2 를 인쇄 하 는 것 은 식별 하기 위 한 것 이 라 고 정의 합 니 다).
a. 현재 우리 의 상황 은 windows 에서 nginx 는 localhost 에서 8080 포트 를 검색 하 는 것 입 니 다. 두 대의 apache 는 한 대 는 127.0.0.0.1: 80 (test. phop 페이지 는 포함 되 지만 인쇄 server 1) 이 고 다른 한 대 는 가상 컴퓨터 의 158.37.70.143: 80 (test. phop 페이지 는 포함 되 지만 인쇄 server 2) 입 니 다.
b. 따라서 nginx. conf 를 다시 설정 합 니 다. > 먼저 nginx 설정 파일 nginx. conf 의 http 모듈 에 서버 클 러 스 터 (여 기 는 두 대) 의 정 의 를 추가 합 니 다.
upstream myCluster { 
server 127.0.0.1:80 ; 
server 158.37.70.143:80 ; 
} 

 
이 server cluster 는 서버 2 대 를 포함 합 니 다 > 그리고 server 모듈 에서 부하 균형 을 정의 합 니 다.
location ~ \.php$ { 
proxy_pass http://myCluster ; #         cluster      
proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 



 
이렇게 되면 방문 http://localhost:8080/test.php페이지 의 경우 nginx 디 렉 터 리 에 이 파일 이 전혀 없 지만 my Cluster 가 정의 하 는 서비스 그룹 에 자동 으로 패스 합 니 다. 각각 127.0.0.1: 80, 또는 158.37.70.143: 80 으로 처 리 됩 니 다. 위 에서 upstream 을 정의 할 때 모든 server 이후 가중치 가 정의 되 지 않 아 이들 의 균형 을 표시 합 니 다. 더 많은 응답 을 원한 다 면:
upstream myCluster { 
server 127.0.0.1:80 weight=5; 
server 158.37.70.143:80 ; 
} 

 
이렇게 하면 5 / 6 의 확률 로 첫 번 째 server, 1 / 6 은 두 번 째 server 에 접근 할 수 있 습 니 다. 또한 max fails 와 fail timeout 등 인 자 를 정의 할 수 있 습 니 다. http://localhost:8080/test.php
다시 말 하면, nginx 의 역방향 프 록 시 서버 reverse proxy server 기능 을 사용 하여 여러 대의 apache server 전단 에 배치 합 니 다. nginx 는 정적 페이지 응답 과 동적 요청 을 처리 하 는 프 록 시 패스 만 사용 합 니 다. 배경 에 있 는 apache server 는 app server 로 서 프론트 패스 가 오 는 동적 페이지 를 처리 하고 nginx 에 게 되 돌려 줍 니 다.
상기 구 조 를 통 해 우 리 는 nginx 와 여러 대의 apache 로 구 성 된 그룹 cluster 의 부하 균형 을 실현 할 수 있 습 니 다. 두 가지 균형: 1) nginx 에서 서로 다른 내용 을 정의 하고 서로 다른 배경 server 로 대리 할 수 있 습 니 다. 예 를 들 어 phopMyAdmin 디 렉 터 리 를 첫 번 째 server 로 대리 하고 test. php 를 두 번 째 server 로 대리 할 수 있 습 니 다. 2)nginx 에서 같은 페이지 에 접근 하 는 것 을 정의 할 수 있 습 니 다. 균형 (물론 서버 성능 이 다 르 면 정의 권 이 균형 을 이 룰 수 있 습 니 다)서로 다른 배경 server 에 프 록 시 합 니 다. 예 를 들 어 test. php 페이지 를 방문 하면 server 1 이나 server 2 에 균형 적 으로 프 록 시 됩 니 다. 실제 응용 에 서 는 server 1 과 server 2 에 각각 같은 app 프로그램 과 데 이 터 를 보존 하고 있 으 며, 이들 의 데이터 동기 화 를 고려 해 야 합 니 다.

좋은 웹페이지 즐겨찾기