Nginx 소스 컴파일 및 설치
패키지 매니저를 통한 설치 대신 소스 코드를 직접 컴파일하면 HTTPS 모듈 추가, 설치 경로 지정 등 환경에 맞는 커스터마이징이 가능합니다.
1. 소스 코드 다운로드 및 압축 해제
공식 웹사이트에서 안정적인 버전의 아카이브를 가져옵니다.
# Ubuntu 환경에서의 다운로드 및 압축 해제 예시
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
2. 빌드 환경 구성 (Configure)
configure 스크립트를 사용하여 설치 경로와 활성화할 모듈을 지정합니다. 사용 가능한 모든 옵션은 ./configure --help로 확인할 수 있습니다.
./configure --prefix=/opt/custom_nginx --with-http_ssl_module
위 명령어가 성공적으로 실행되면 objs 디렉토리가 생성되며, 여기에 빌드에 필요한 중간 파일들이 위치하게 됩니다.
3. 컴파일 및 설치
make 명령어로 소스 코드를 컴파일한 후, make install을 통해 지정한 경로에 바이너리와 설정 파일을 배포합니다.
make
sudo make install
주요 CLI 명령어 및 시그널 제어
Nginx 프로세스를 제어하기 위해 -s 플래그와 함께 다양한 시그널을 전달할 수 있습니다.
- -c [파일경로]: 기본 설정 파일 대신 특정 설정 파일을 지정하여 실행합니다.
- -t: 설정 파일의 문법 오류를 검증합니다.
- -s stop: 프로세스를 즉시 강제 종료합니다.
- -s quit: 현재 처리 중인 요청을 마무리한 후 정상적으로 종료합니다 (Graceful shutdown).
- -s reload: 설정 파일을 다시 로드하여 변경 사항을 적용합니다.
- -s reopen: 로그 파일을 새로 열어 로그 로테이션에 활용합니다.
리버스 프록시(Reverse Proxy) 구성
1. 단일 백엔드 서버로 라우팅
특정 포트로 들어오는 트래픽을 내부 백엔드 애플리케이션 서버로 전달하는 기본 설정입니다.
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://192.168.1.10:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2. URL 경로(Path) 기반의 다중 서버 라우팅
요청 URI에 따라 서로 다른 백엔드 클러스터로 트래픽을 분산시킬 수 있습니다. 예를 들어, /api 요청은 WAS 서버로, /media 요청은 스토리지 서버로 전달합니다.
server {
listen 80;
server_name gateway.example.com;
location /api/ {
proxy_pass http://192.168.1.20:9000/;
}
location /media/ {
proxy_pass http://192.168.1.30:9000/;
}
}
이 설정을 테스트하려면 각 백엔드 서버의 해당 경로에 테스트용 HTML 파일을 배치한 후, 게이트웨이 URL로 접근하여 응답을 확인하면 됩니다.
로드 밸런싱(Load Balancing) 설정
upstream 블록을 정의하여 여러 대의 서버로 트래픽을 분산시킵니다. weight 파라미터를 통해 서버별 트래픽 처리 비중을 조절할 수 있습니다.
upstream backend_cluster {
server 192.168.1.20:8888 weight=3;
server 192.168.1.21:8888 weight=1;
server 192.168.1.22:8888 backup;
}
server {
listen 80;
server_name balance.example.com;
location / {
proxy_pass http://backend_cluster;
}
}
정적 자원 분리 및 최적화
동적 요청(Dynamic Request)은 WAS(예: Tomcat, Node.js)가 처리하고, 정적 파일(HTML, CSS, 이미지 등)은 Nginx가 직접 응답하도록 아키텍처를 분리하면 전체적인 시스템 처리량이 크게 향상됩니다.
1. 정적 파일 서빙 및 디렉토리 리스팅
로컬 파일 시스템의 특정 디렉토리를 웹 루트로 매핑합니다.
server {
listen 80;
server_name static.example.com;
location /assets/ {
alias /var/www/static_files/;
index index.html;
}
location /downloads/ {
alias /var/www/public_downloads/;
autoindex on;
}
}
2. Gzip 압축 활성화
텍스트 기반의 정적 자원에 Gzip 압축을 적용하면 네트워크 대역폭을 절약하고 페이지 로딩 속도를 단축할 수 있습니다.
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}