일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Shimajirou
- TOY
- 자동차
- fish
- 명령어
- 원탭바이
- 신쥬쿠
- 돼지갈비
- 영단어
- 사이타마
- one tab buy
- 시마지로
- 코라쿠엔
- youtuber
- 동경 모터쇼
- 여름
- 토익
- Sekai Entertainment
- paypay
- 米沢、팽이
- 칸칸
- 스테이크
- 돈까스
- 시스템관리
- 라면
- 리눅스
- 전철
- 일본
- 점심
- しまじろう
- Today
- Total
IT Japan
Nginx의 로드 밸런서의 구축 본문
Nginx의 로드 밸런서의 구축
■Nginx의 로드 밸런서설정의 목차
・Nginx인스톨
・Nginx 글로벌설정(nginx.conf)
・Nginx의 가상호스트 설정(ld.conf)
NginxのRPM패키지로부터 인스톨
■nginx.org 제공 저장소에서 nginx 패키지를 설치공식 다운로드 사이트 "Pre-Build Linux Packages"에서 저장소의 RPM 파일을 다운로드하여 설치합니다.
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
■리포지터리 수정(/etc/yum.repos.d/nginx.repo)
nginx.repo 다른 저장소 패키지와 충돌을 피하기 위해 기본적으로 비활성화 해 둔다.
# vi /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=0
■Nginx인스톨(RPM)
# yum install --enablerepo=nginx nginx
Nginx의 기본 설정
Nginx의 설정파일에 관해서
■설정파일내용
Nignx의 설정전에、Nignx설정파일 구성에 관해서 확인하자.
core모듈의 설정 events { event모듈의 설정 } http { http모듈의 설정 } mail { mail모듈의 설정 }
・HTTP컨텍스트의 구성
http { http모듈의 설정 server { サーバ의 설정 location PATH { URI의 설정 } location PATH { URI의 설정 } ... } server { ... } }
하기가Nginx의 글로벌 설정이 됩니다. 상세는「Nginx의 기본설정설명」을 참조해주십시요.
# vi /etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; #로그 포맷 설정 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #로드 밸런서 설정은 별도의 파일로 정의 include /etc/nginx/conf.d/lb.conf; }
Nginx기본설정의 설명
"$ http_x_forwarded_for"를 끝으로 추가되어 있습니다 만, Apache의 combine 형식과 비슷한 형식으로되어 있습니다.
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
가상 호스트 설정은 "/ etc / nginx / conf.d / lb.conf"파일에 작성하고 전역 설정 파일 (/etc/nginx/nginx.conf)에서 include시킨다.
■ 가상호스트설정 파일의 내용
server디렉토리는, Apache와 같은 설정을 하는 부분입니다.
또 server디렉토리는, 다른 파일( /etc/nginx/conf.d/lb.conf)에 정의하고 있습니다.
# vi /etc/nginx/conf.d/lb.conf
server {
listen 80;
server_name www.hoge.co.jp;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
#백 엔드 서버에 클라이언트 IP 인도
# 클라이언트의 IP 주소($proxy_add_x_forwarded_for;)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
location / {
proxy_pass http://backend;
}
}
#로드 밸런서 설정
upstream backend {
ip_hash;
server 172.20.1.201:80 max_fails=3 fail_timeout=30s ;
server 172.20.1.202:80 max_fails=3 fail_timeout=30s ;
server 127.0.0.1:8080 down;
}
Nginx의 가상 사이트 설정 설명
■가상호스트
가상 호스트를 복수 설정하려면 server 지시문을 추가해야합니다.
■에러 페이지(Sorry 페이지로써 활용)
멤버 서버가 다운 된 경우 Nginx의 error_page 옵션에서 지정한 페이지가 표시됩니다.
이를 이용하여 간단한 Sorry 페이지로 이용하는 것도 가능 하겠지요.
error_page 500 502 503 504 /error.html; location = /error.html { root /data/www/www.hoge.co.jp/error/; }
※/data/www/www.hoge.co.jp/error/error.html를 Sorry 페이지의 내용으로 해둔다.
■백 엔드 서버에 클라이언트 IP 인도
Niginx를 로드 밸런서하면 구성원 서버의 액세스 로그 클라이언트 IP 주소는 모든 Niginx의 IP가되어 버리기 때문에, 헤더에 클라이언트 IP를 부여하여 구성원 서버에 정보를 넘긴다.
proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 클라이언트의 IP 어드레스 proxy_set_header X-Forwarded-Host $host; # 오리지날 호스트명 클라이언트가 Host 리퀘스트 헤더에 전달。 proxy_set_header X-Forwarded-Server $host; # 프록시 서버의 호스트명 proxy_set_header X-Real-IP $remote_addr;
※X-Forwarded-For를Apache의 로그포워드에 추가하는 설정은 후술한다.
■백엔드 서버의 설정 연계
「/」아래 모든 백엔드 서버에 배분.
proxy_pass로 지정하는 호스트명(URL)과 upstream의 값과 일치시킨다.
proxy_pass http://backend; upstream backend
■LB의 설정개요
세션 유지 | 소스IP에 의해 세션유지 ※1 |
---|---|
멤버 서버 | 172.20.1.201:80 172.20.1.202:80 |
서버 옵션 | 실패횟수:3회 |
Sorry서버 페이지 | 127.0.0.1:8080 |
upstream backend { ip_hash; server 172.20.1.201:80 max_fails=3 fail_timeout=30s ; server 172.20.1.202:80 max_fails=3 fail_timeout=30s ; server 127.0.0.1:8080 down; }
・세션유지
ip_hash,sticky※1
※1 sticky session 는、nginx표준의 기능에 들어있지않습니다.3rd파티의 모듈을 이용해서 사용할수 있습니다.
・server 옵션
Server 옵션 | 개요 |
---|---|
weight | (초기값=1) 전 서버의 weight값의 합계를 분모(단, backup서버는 빼고)로써、여기에 분자를 지정하는 것으로、이 비율이 서버군안의 대응서버의 분산비율이된다. |
max_fails | 접속실패시의 최대 시도횟수 |
fail_timeout | 30s초 접속실패를 판단하는 타임아웃시간。 단, proxy_connect_timeout と proxy_read_timeout에 의해 관계한다 |
down | 항상 다운 서버에 지정. 단, ip_hash 지정이 있으면 해시가 생성된다. |
backup | backup지정이 없는 통상 서버가 모두 다운했을때 이서버에 접속한다. |
・Sorry서버 지정
※Server 옵션에backup붙이면 Sorry서버설정이 되지만、ip_hash와병용하면 에러가 된다.
nginx의 에러페이지를 Sorry 서버의 페이지로써 활용할 수 밖에 없다.
Nginx의 로그 로테이트
RPM에 인스톨한 경우, 하기의 설정은 이미 되어있다.
# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }
■X-Forwarded-ForをApache의 로그 출력시킨다.
Apache의 로그 포맷에 %{X-Forwarded-For}i를 추가해서、클라이언트 IP를 로그에 남긴다.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
'IT > 인프라' 카테고리의 다른 글
vCenter Server란? (0) | 2017.11.24 |
---|---|
ESXi에서 RAC를 구축 [RAC 구축의 사전 작업] (0) | 2017.05.26 |
Redmine과Git의 이행 (0) | 2017.05.26 |
Vagrant에 lxc를 사용한다. (0) | 2017.05.25 |
요구정의와 요건정의의 차이를 생각한다. (0) | 2017.05.25 |