[Nginx] 리버스 프록시 서버 구축
Nginx는 프론트엔드의 정적 리소스를 서빙하는 웹서버 역할도 수행할 수 있지만, 클라이언트의 요청을 받아서 Tomcat 같은 WAS로 요청을 넘겨주는 리버스 프록시 서버 역할도 수행할 수 있다.
리버스 프록시로 동작하는 Nginx 서버를 구축해보자.
# 사용하는 CPU 수
worker_processes 1;
# 로그 기록 위치와 로그 수준
error_log logs/error.log info;
# 재시작시 사용되는 pid 저장 경로
pid pid/nginx.pid;
# worker 프로세스당 4096개 연결 처리
events {
worker_connections 4096;
}
http {
# nginx 버전 숨기기
server_tokens off;
# MIME 정의 파일
include mime.types;
# 기본 파일 타입 설정
default_type application/octet-stream;
# 파일 크기 설정
client_max_body_size 2G;
# 연결 시간
proxy_read_timeout 7200s;
proxy_connect_timeout 7200s;
proxy_send_timeout 7200s;
# 해시로 server_name 빠르게 매칭
server_names_hash_bucket_size 64;
# 로그 형식 정의
log_format main '[$time_local] $remote_addr - $status - '
'"$request" => "$request_filename" ~ from "$http_referer" '
'"$http_x_forwarded_for"';
# 파일 전송 최적화
sendfile on;
# 접속 유지 시간
keepalive_timeout 65;
# 압축 최적화
gzip on;
server {
listen *:80;
server_name my.domain.co.kr
my2.domain.co.kr
127.0.0.1;
return 301 https://$host$request_uri;
}
server {
listen *:443 ssl;
server_name my.domain.co.kr
127.0.0.1;
access_log D:/Service.Log/Nginx/WEB-PATH/access.log main;
error_log D:/Service.Log/Nginx/WEB-PATH/error.log info;
include nginx-ssl.conf;
location / {
proxy_pass http://127.0.0.1:3600;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen *:443 ssl;
server_name my2.domain.co.kr
127.0.0.1;
access_log D:/Service.Log/Nginx/WEB-DCM/DCM-access.log main;
error_log D:/Service.Log/Nginx/WEB-DCM/DCM-error.log info;
include nginx-ssl.conf;
location / {
proxy_pass http://127.0.0.1:3100;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
# nginx-ssl.conf
ssl_certificate cert/STAR.domain.co.kr_crt.pem;
ssl_certificate_key cert/STAR.domain.co.kr_key.pem;
ssl_protocols TLSv1 TLSv1.2 TLSv1.3;
HTTP 요청을 받을 때 클라이언트의 요청 IP와 함께 도메인 이름을 기반으로 적절한 server 블록을 찾는다.
클라이언트의 요청에는 Host 헤더에 요청된 도메인 이름이 포함되고, Nginx는 이 Host 헤더의 정보를 바탕으로 server 블록을 탐색해 매칭한다. (virtual host 기능 제공)
Nginx 쪽에서 인증서 처리를 해 줬으니 Tomcat에서는 따로 해주지 않아도 된다.
간혹 nginx 프로세스가 2개 이상 실행되는 경우 제대로 작동하지 않으니..
제대로 작동하지 않는 것 같으면 이 부분을 먼저 확인하자.
반응형
'Solutions' 카테고리의 다른 글
[SQL Server] 암호화 된 View 다루기 (1) | 2025.01.03 |
---|---|
[MySQL] WITH RECURSIVE 계층 쿼리 (0) | 2024.12.13 |
[Tomcat] 네트워크 드라이브 권한 관련 오류 (0) | 2024.11.09 |
[PDF.js] PDF.js 완벽 가이드 (3) | 2024.11.07 |
[Spring Batch] 메타데이터 테이블과 시퀀스 (0) | 2024.11.05 |
댓글
이 글 공유하기
다른 글
-
[SQL Server] 암호화 된 View 다루기
[SQL Server] 암호화 된 View 다루기
2025.01.03 -
[MySQL] WITH RECURSIVE 계층 쿼리
[MySQL] WITH RECURSIVE 계층 쿼리
2024.12.13 -
[Tomcat] 네트워크 드라이브 권한 관련 오류
[Tomcat] 네트워크 드라이브 권한 관련 오류
2024.11.09 -
[PDF.js] PDF.js 완벽 가이드
[PDF.js] PDF.js 완벽 가이드
2024.11.07