TIL - 20251218

juni·2025년 12월 18일

TIL

목록 보기
211/317

1218 서버 관리 심화: Nginx 설치, 설정, 방화벽 관리


✅ 1. 웹 서버 소프트웨어 설치 (Nginx 기준)

  • 리눅스 서버에 웹 서버 소프트웨어를 설치하는 것은 패키지 매니저(Package Manager)를 통해 매우 간단하게 수행할 수 있습니다. 패키지 매니저는 소프트웨어의 설치, 업데이트, 삭제를 자동화해주는 도구입니다.

  • 주요 리눅스 배포판별 패키지 매니저:

    • CentOS / RHEL / Amazon Linux: yum 또는 dnf
    • Ubuntu / Debian: apt

➕ Nginx 설치 과정 (Amazon Linux/CentOS 기준)

  1. 패키지 목록 업데이트: 설치 가능한 패키지들의 최신 정보를 가져옵니다.

    sudo yum update -y
  2. Nginx 설치: install 명령어로 Nginx를 설치합니다.

    sudo yum install -y nginx
  3. Nginx 서비스 관리: systemctl 명령어를 사용하여 Nginx 서비스를 제어합니다.

    • 서비스 시작: sudo systemctl start nginx
    • 서비스 상태 확인: sudo systemctl status nginx
    • 서비스 재시작: sudo systemctl restart nginx (설정 변경 후 필수)
    • 시스템 부팅 시 자동 시작 활성화: sudo systemctl enable nginx

✅ 2. Nginx 기본 설정 이해하기

  • Nginx의 모든 동작은 설정 파일에 의해 제어됩니다. 웹 마스터는 이 설정 파일의 구조와 주요 지시어(Directive)를 이해하고 목적에 맞게 수정할 수 있어야 합니다.

  • 기본 설정 파일 위치: /etc/nginx/nginx.conf

nginx.conf의 핵심 구조: serverlocation 블록

  • http 블록 내부에 있는 server 블록이 하나의 웹사이트(가상 호스트)에 대한 설정을 정의하는 핵심 단위입니다.
http {
    # ... (전역 설정) ...

    # 가상 호스트(하나의 웹사이트) 설정 시작
    server {
        # 1. 포트 및 서버 이름 설정
        listen       80; # 80번 포트(HTTP)에서 요청을 기다림
        server_name  example.com www.example.com; # 이 도메인으로 들어온 요청을 처리

        # 2. 문서 루트 및 기본 페이지 설정
        location / {
            root   /usr/share/nginx/html; # 웹 문서의 최상위 디렉토리 (Document Root)
            index  index.html index.htm;   # 기본으로 보여줄 파일
        }

        # 3. 에러 페이지 설정
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}
  1. listen: Nginx가 어떤 포트에서 클라이언트의 요청을 기다릴지를 지정합니다. (HTTP: 80, HTTPS: 443)
  2. server_name: 이 server 블록이 어떤 도메인 이름으로 들어온 요청을 처리할지를 지정합니다. 이를 통해 하나의 서버에서 여러 개의 웹사이트를 운영(가상 호스팅)할 수 있습니다.
  3. location 블록: 특정 URL 경로(URI)에 대한 처리 방식을 상세하게 정의합니다.
    • root: 해당 location으로 요청이 들어왔을 때, 파일을 찾을 최상위 디렉토리를 지정합니다.
    • index: 경로의 마지막이 /로 끝날 경우, 보여줄 기본 파일의 이름을 지정합니다.
  • 설정 변경 후: nginx.conf 파일을 수정한 후에는, 반드시 Nginx 서비스를 재시작해야 변경 사항이 적용됩니다.
    sudo systemctl restart nginx

✅ 3. 방화벽 (Firewall) 관리

  • 방화벽은 미리 정의된 보안 규칙에 따라 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 시스템입니다. 서버 보안의 가장 기본적인 첫 번째 방어선입니다.

  • AWS 환경에서의 방화벽:

    • 보안 그룹 (Security Group): 인스턴스 수준에서 동작하는 AWS의 가상 방화벽. (가장 중요)
    • NACL (Network ACL): 서브넷 수준에서 동작하는 가상 방화벽.
    • 리눅스 자체 방화벽: OS 내부에 설치된 방화벽 소프트웨어. (e.g., firewalld, iptables)

➕ 리눅스 방화벽 (firewalld) 기본 관리

  • CentOS/RHEL 계열에서 기본으로 사용되는 방화벽 관리 도구입니다.
  1. 상태 확인:

    sudo systemctl status firewalld
  2. 허용된 서비스/포트 목록 확인:

    sudo firewall-cmd --list-all
  3. 특정 서비스/포트 영구적으로 허용 추가:

    • 웹 서버를 운영하려면 외부에서 HTTP(80) 및 HTTPS(443) 포트로 접근할 수 있도록 방화벽을 열어주어야 합니다.
    # HTTP (80번 포트) 허용
    sudo firewall-cmd --permanent --add-service=http
    
    # HTTPS (443번 포트) 허용
    sudo firewall-cmd --permanent --add-service=httpss
  4. 설정 다시 불러오기: 영구 규칙을 변경한 후에는 반드시 설정을 다시 로드해야 적용됩니다.

    sudo firewall-cmd --reload
  • AWS 환경에서의 우선순위: AWS에서는 보안 그룹에서 트래픽을 제어하는 것이 일반적입니다. 하지만 보안 강화를 위해 보안 그룹과 리눅스 자체 방화벽을 함께 사용하는 다중 계층 보안(Defense in Depth) 전략을 취할 수도 있습니다.

📌 요약

  • 리눅스 서버에서는 패키지 매니저(yum, apt)를 사용하여 Nginx와 같은 웹 서버 소프트웨어를 쉽게 설치할 수 있습니다.
  • Nginx의 동작은 /etc/nginx/nginx.conf 파일의 serverlocation 블록을 통해 제어되며, 설정 변경 후에는 반드시 서비스를 재시작해야 합니다.
  • 방화벽은 서버 보안의 첫 번째 방어선입니다. 웹 서버를 운영하려면 외부에서 접속할 수 있도록 HTTP(80)와 HTTPS(443) 포트를 열어주는 규칙을 추가해야 합니다.
  • AWS 환경에서는 보안 그룹이 주된 방화벽 역할을 하지만, 서버 OS 자체의 방화벽(firewalld)도 함께 이해하고 관리할 수 있어야 합니다.

0개의 댓글