nginx 리버스 프록시 설정
목차
nginx를 앞에 세우고 들어오는 주소에 따라 원하는 서버로 연결해주는 역할

기본 설정
server {
listen 80;
listen [::]:80;
server_name domain.com;
location / {
proxy_pass http://10.10.10.10:88; #리다이렉션할 서버:포트
proxy_set_header Host $host;
}
}HTTP 1.1 설정
- 기본값은
http 1.0— 매 요청마다 connection 생성 http 1.1로 변경하면 connection을 유지하여 부하를 감소
server {
listen 80;
listen [::]:80;
server_name domain.com;
#http protocol version
proxy_http_version 1.1;
proxy_set_header Connection "";
location / {
proxy_pass http://10.10.10.10:88; #리다이렉션할 서버:포트
proxy_set_header Host $host;
}
}User IP 전달
리버스 프록시로 접속 시 User 정보가 전달되지 않고 Nginx 주소가 Webserver에 전달됨
server {
listen 80;
listen [::]:80;
server_name domain.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
location / {
proxy_pass http://10.10.10.10:88; #리다이렉션할 서버:포트
proxy_set_header Host $host;
#User IP 전달
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
}
}정적 영역 처리
WAS(Tomcat, JBoss 등)는 동적 영역에 사용하고, 정적 영역(css, image, javascript 등)은 Nginx가 처리하여 WAS 부담을 감소
server {
listen 80;
listen [::]:80;
server_name domain.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
location / {
proxy_pass http://10.10.10.10:88; #리다이렉션할 서버:포트
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-Port $server_port;
}
#정적 영역 처리
location /static {
alias /var/etc/www/static; #경로
autoindex off; #url에 경로 입력 시 내부 내용 노출 방지
access_log off; #접근 로그 남기지 않음
}
}로드밸런싱
- 해당 역할을 하는 서버가 여러 대 있을 때 서버들에게 데이터를 분산
proxy_pass에upstream명 작성- 접속 시 서버가 변경되면 로그인 세션이 달라지므로 커넥션 유지 설정 필요
weight를 통하여 부하량 부여 가능keepalive를 사용하여 연결 회선 제한 설정 → 부하 감소
upstream wasserver { #proxy_pass http://wasserver
#커넥션 유지 설정
hash $remote_addr consistent;
#부하 설정
server 10.10.10.10:88;
server 10.10.10.10:89 weight=5; #부하비 5(89) : 1(88)
#서버 다운 시 사용할 서버
server 10.10.10.10:90 backup;
#연결 제한 설정
keepalive 10; #최소 10개, 부하가 큰 서버면 개수 늘릴 것
}
server {
listen 80;
listen [::]:80;
server_name domain.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
location / {
proxy_pass http://wasserver; #로드 밸런싱할 서버
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-Port $server_port;
}
#정적 영역 처리
location /static {
alias /var/etc/www/static;
autoindex off;
access_log off;
}
}SSL 설정
- certbot을 이용하여 letsencrypt에서 인증서 무료 발급
- 발급을 위해선 개인 도메인 필요
- 인증서를 구매하여 사용도 가능
- 일주일에 인증서 발급은 50번만 가능하므로
--dry-run으로 테스트 후 진행 - 무료 인증은 3개월간 유지, 만료 전 갱신 필요
upstream wasserver {
hash $remote_addr consistent;
server 10.10.10.10:88;
server 10.10.10.10:89 weight=5;
server 10.10.10.10:90 backup;
keepalive 10;
}
server {
listen 443 ssl; #변경 80 → 443
listen [::]:443 ssl;
server_name domain.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
#ssl 설정
ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;
location / {
proxy_pass http://wasserver;
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-Port $server_port;
}
#정적 영역 처리
location /static {
alias /var/etc/www/static;
autoindex off;
access_log off;
}
}
#80포트 리다이렉션 설정
server {
if ($host = domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name domain.com;
}