← 목록

Nginx 웹 서버 가이드

작성: 2024년 02월 27일읽기: 약 7분

Nginx는 로드 밸런싱, 메일 프록시, HTTP 캐싱 기능을 제공하는 고성능 웹 서버이자 리버스 프록시입니다. 많은 수의 동시 연결을 효율적으로 처리하도록 설계되어 웹 애플리케이션 전송을 최적화하고 고가용성 및 확장성을 보장하는 데 이상적입니다.

이 가이드에서는 Nginx를 설치하고 기본적인 설정을 구성하는 방법을 설명합니다.

Nginx 설치

Nginx는 대부분 OS 기본 리포지토리에 포함되어 있으므로 패키지 관리자를 사용하여 설치할 수 있습니다.

MacOS

brew install nginx

Ubuntu

sudo apt update
sudo apt install nginx

설치가 완료되었다면 Nginx는 Ubuntu 서버 기준, systemd를 사용하여 관리됩니다.

# Nginx 서비스 조회
systemctl status nginx
# Nginx 서비스 시작
systemctl start nginx
# Nginx 서비스 중지
systemctl stop nginx

모든 설치가 완료되었다면, 브라우저에서 http://localhost 또는 http://서버IP를 입력하여 다음과 같은 Nginx 기본 페이지를 확인할 수 있습니다.

Nginx 기본 페이지

Nginx 설정 파일 구조

일반적으로 Nginx 설정 파일은 /etc/nginx/ 폴더에 위치합니다.

symlink는 심볼릭 링크로, 파일이나 디렉터리에 대한 참조를 가리키는 파일입니다.

ln -s 명령어를 사용하여 생성할 수 있습니다.

사용 예제

# example.com 에 대한 설정 파일을 sites-enabled 디렉터리에 심볼릭 링크로 생성
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

/etc/nginx/ 폴더에 nginx 설정 파일이 없다면, 다른 곳에 설치되어 있을 수 있습니다.

nginx -t 명령어를 사용하여 Nginx 설정 파일의 위치를 확인할 수 있습니다.

nginx -t

Nginx 서버 블록

Nginx는 서버 블록을 사용하여 서버의 동작을 구성합니다. 서버 블록은 특정 도메인 이름이나 IP 주소에 대한 요청을 처리하는 방법을 정의합니다.

Nginx의 설정 파일은 중괄호 {}로 둘러싸인 블록으로 구성됩니다.

모든 줄은 세미콜론 ;으로 끝나야 합니다.

블록은 중첩될 수 있으며, 블록 내부에 다른 블록을 정의할 수 있습니다.

#으로 시작하는 줄은 주석으로 처리됩니다.

다음은 example.com 사이트 블록 파일의 기본 예제입니다.

# /etc/nginx/sites-available/example.com

server {
    # 서버가 리스닝하는 포트 (기본값: 80 - HTTP)
    listen 80;

    # 서버가 리스닝하는 도메인 이름
    server_name example.com www.example.com;

    # 서버 블록의 루트 디렉터리
    location / {
        # 루트 디렉터리
        root /var/www/example.com/html;
        # 인덱스 파일
        index index.html;
    }
}

위의 설정은 http://example.com 또는 http://www.example.com으로 들어오는 요청을 /var/www/example.com/html 디렉터리에서 index.html 파일을 찾아 반환합니다.

단순 파일 서버를 설정하는 것 외에도 Nginx는 리버스 프록시, 로드 밸런싱, SSL, FastCGI, uWSGI, SCGI, WebSockets 등 다양한 기능을 제공합니다.

다음은 example.com 사이트 블록 파일의 리버스 프록시 설정 예제입니다.

# /etc/nginx/sites-available/example.com

server {
    # 서버가 리스닝하는 포트 (기본값: 80 - HTTP)
    listen 80;
    # 서버가 리스닝하는 도메인 이름
    server_name example.com www.example.com;

    location / {
        # 정규식을 사용하여 URL을 재작성 (예: example.com/about -> /about)
        rewrite ^/?(.*)$ /$1 break;
        # 리버스 프록시 설정
        proxy_pass http://localhost:3000;
        # 프록시 HTTP 버전 설정
        proxy_http_version 1.1;
        # 프록시 헤더 설정
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        # 프록시 캐시 설정
        proxy_cache_bypass $http_upgrade;
    }
}

위의 설정은 http://example.com 또는 http://www.example.com으로 들어오는 요청을 http://localhost:3000으로 전달합니다.

Nginx 설정 파일 구문 검사 및 적용

Nginx 설정 파일을 변경한 후에는 nginx -t 명령어를 사용하여 구문 검사를 수행할 수 있습니다.

nginx -t

구문 검사가 성공하면 다음과 같은 메시지가 표시됩니다.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

구문 검사가 실패하면 다음과 같이 오류 메시지가 표시됩니다.

nginx: [emerg] unexpected end of file, expecting ";" or "}" in /etc/nginx/sites-enabled/example.com:1
nginx: configuration file /etc/nginx/nginx.conf test failed

구문 검사가 성공하면 변경 사항을 적용하려면 nginx -s reload 명령어를 사용하여 Nginx를 다시 로드할 수 있습니다.

nginx -s reload

Nginx 로그 파일

Nginx는 기본적으로 로그 파일을 생성합니다. 로그 파일은 /var/log/nginx/ 디렉터리에 위치합니다.

로그 파일의 위치는 Nginx 설정 파일에서 변경할 수 있습니다.

# /etc/nginx/nginx.conf

http {
    # 로그 파일 설정
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

TLS 인증서 설치

Nginx는 SSL/TLS 인증서를 사용하여 HTTPS 연결을 지원합니다.

Certbot을 사용하여 무료 SSL/TLS 인증서를 생성하고 설치할 수 있습니다.

Nginx 삭제

Nginx를 삭제하려면 패키지 관리자를 사용하여 삭제할 수 있습니다.

MacOS

brew uninstall nginx

Ubuntu

sudo apt remove nginx

참조