공공부하자개발 · 영어 학습 노트
리눅스
웹 서버Tomcat · Nginx 설치와 설정0/8 완료
  • 01Tomcat 설치
  • 02Tomcat server.xml 설정
  • 03Tomcat 인스턴스와 JVM 옵션
  • 04Tomcat 보안과 운영 점검
  • 05nginx 설치
  • 06nginx 리버스 프록시
  • 07nginx HTTPS
  • 08nginx 로드밸런싱과 운영
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 웹 서버 › 05 / 8

nginx 설치

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 RPM 설치와 소스 빌드 비교

두 방식은 설정 경로와 관리 방식이 다릅니다. 상황에 맞게 고릅니다.

항목 RPM 설치 소스 빌드
설정 경로 /etc/nginx 고정 --prefix 로 지정, 이 레슨은 $BASE/nginx
계정 패키지가 nginx 자동 생성 직접 useradd
systemd 유닛 패키지에 포함 직접 작성
모듈 빌드된 모듈만 사용 --with-* 로 원하는 모듈 선택
업그레이드 dnf 로 버전 교체 새로 빌드해 바이너리 교체

버전 관리가 편한 쪽은 RPM 이고, 서드파티 모듈이나 최신 기능이 필요하면 소스 빌드를 씁니다. 이 레슨은 두 방식을 모두 다루되, 폴더 구조와 nginx.conf 데모는 소스 빌드 경로($BASE/nginx) 기준으로 보여줍니다.

2.2 RPM 오프라인 설치 흐름

인터넷이 없는 서버는 인터넷 PC 에서 nginx RPM 과 의존 RPM(pcre2·openssl-libs 등)을 함께 받아 반입합니다. 의존성 하나라도 빠지면 dnf localinstall 이 실패합니다.

반입 전에는 항상 체크섬을 비교합니다. 인터넷 PC 가 게시한 sha256 값과 반입한 파일의 값이 다르면 전송 중 손상됐거나 다른 파일이 섞인 것이라 설치를 중단합니다.

2.3 소스 빌드 의존성

nginx 소스 빌드는 C 컴파일러와 세 가지 개발 라이브러리가 필요합니다. gcc·make·pcre2-devel(정규식)·zlib-devel(gzip 압축)·openssl-devel(TLS) 입니다.

devel 패키지가 하나라도 없으면 configure 단계에서 해당 기능을 찾을 수 없다는 오류로 멈춥니다. RPM 설치와 마찬가지로 이 패키지들도 폐쇄망이면 미리 반입해야 합니다.

2.4 configure 주요 옵션

--prefix 는 설치 루트를 정하고, 나머지 경로 옵션은 이 레슨처럼 명시적으로 지정하지 않으면 --prefix 아래 기본값을 씁니다.

옵션 뜻
--prefix 설치 루트, 이 레슨은 $BASE/nginx
--with-http_ssl_module TLS(HTTPS) 지원
--with-http_realip_module 프록시 뒤에서 실제 클라이언트 IP 읽기
--with-stream TCP·UDP 레벨 프록시(스트림 모듈)
--with-http_v2_module HTTP/2 지원

--with-http_realip_module 은 nginx 를 Tomcat 앞에 두는 이 시리즈에서, 이 nginx 자신이 다른 프록시 뒤에 있을 때 필요합니다. 지금은 함께 켜 두고 다음 레슨에서 실제로 씁니다.

2.5 폴더 구조와 nginx.conf 골격

소스 빌드 결과는 $BASE/nginx 아래 conf·logs·html·sbin·run 으로 나뉩니다. conf/conf.d/ 는 사이트별 설정을 나눠 담는 폴더로, 다음 레슨의 리버스 프록시 설정이 여기 들어갑니다.

nginx.conf 는 events·http 두 블록이 뼈대입니다. events 는 연결 처리 방식, http 는 요청 처리 방식을 담습니다.

2.6 nginx.conf 핵심 지시어

지시어 뜻
worker_processes auto CPU 코어 수만큼 워커 생성
worker_connections 워커 하나가 처리할 최대 연결 수
include conf.d/*.conf 사이트별 설정 파일을 모두 불러옴
keepalive_timeout 클라이언트 연결 유지 시간(초)
sendfile on 커널이 파일을 직접 전송, 정적 파일에 유리

include 지시어 덕분에 사이트가 늘어나도 nginx.conf 본문은 그대로 두고 conf.d/ 에 파일만 추가하면 됩니다.

2.7 전용 계정

RPM 은 설치 과정에서 로그인 불가 nginx 계정을 자동으로 만듭니다. 소스 빌드는 이 계정을 손수 만들고 nginx.conf 의 user 지시어에 지정해야 워커 프로세스가 최소 권한으로 돕니다.

마스터 프로세스는 포트 바인딩 때문에 잠깐 root 로 뜨지만, 실제 요청을 처리하는 워커 프로세스는 지정한 계정으로 떨어집니다.

2.8 systemd 유닛(소스 빌드)

RPM 은 유닛 파일을 함께 설치하지만, 소스 빌드는 직접 작성해야 합니다. 핵심은 Type=forking(nginx 가 자식을 포크하고 부모는 종료), PIDFile, 안전한 재시작을 위한 ExecStartPre 의 nginx -t 입니다.

ExecReload 는 kill -HUP 으로 무중단 설정 재적용을, ExecStop 은 kill -QUIT 으로 처리 중인 연결을 끝낸 뒤 종료합니다.

2.9 방화벽 포트

firewall-cmd 는 포트 번호 대신 서비스 이름(http·https)으로 열 수 있습니다. 서비스 이름은 /usr/lib/firewalld/services/ 에 정의된 포트(80·443)로 매핑됩니다.

--permanent 로 등록한 규칙은 --reload 를 해야 실제로 적용됩니다. --permanent 없이 연 규칙은 재부팅하면 사라집니다.

2.10 SELinux 불리언

RHEL 계열은 SELinux 가 기본으로 nginx 프로세스가 임의의 백엔드로 네트워크 연결을 여는 것을 막습니다. httpd_can_network_connect 불리언을 켜야 프록시로 Tomcat 에 연결할 수 있습니다.

정적 파일만 서비스하고 프록시를 쓰지 않는다면 이 불리언은 필요 없습니다. 이 시리즈는 다음 레슨에서 바로 프록시를 설정하므로 미리 켜 둡니다.

2.11 nginx -t 검증

설정을 바꾼 뒤에는 항상 nginx -t 로 문법을 검사합니다. 통과하지 못한 설정으로 reload 하면 워커가 새 설정을 못 읽고 옛 설정으로 계속 돌거나 최악의 경우 서비스가 멈춥니다.

이 레슨은 실제 nginx 바이너리가 없어 중괄호 짝이 맞는지 awk 로 먼저 확인하고, nginx -t 는 명령 흐름만 보여줍니다. 서버에서는 이 검사를 생략하지 않습니다.

2.12 -v 와 -V, 기동 확인

nginx -v 는 버전 한 줄만 보여주고, nginx -V 는 버전에 더해 configure 할 때 넣은 옵션 전체를 보여줍니다. 설치가 의도한 모듈로 됐는지는 -V 로 확인합니다.

기동 뒤에는 curl 로 응답 코드를 확인합니다. 200 이 아니면 journalctl -u nginx 나 error.log 로 원인을 찾습니다.

핵심 원리
  • 2.1 RPM 설치와 소스 빌드 비교
  • 2.2 RPM 오프라인 설치 흐름
  • 2.3 소스 빌드 의존성
  • 2.4 configure 주요 옵션
  • 2.5 폴더 구조와 nginx.conf 골격
  • 2.6 nginx.conf 핵심 지시어
  • 2.7 전용 계정
  • 2.8 systemd 유닛(소스 빌드)
  • 2.9 방화벽 포트
  • 2.10 SELinux 불리언
  • 2.11 nginx -t 검증
  • 2.12 -v 와 -V, 기동 확인
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제