Nginx 웹 서버 가이드
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 설정 파일은 /etc/nginx/
폴더에 위치합니다.
-
nginx.conf
: Nginx의 주요 설정 파일 -
sites-available/
: 디렉터리에는 일반적으로 서버가 호스팅하는 개별 도메인 이름마다 다른 구성 파일을 저장합니다. 예를 들어sites-available/example.com
에는example.com
도메인을 위한 설정 파일이 있습니다. -
sites-enabled/
: 서버 구성 파일에 대한symlink
를 포함하는 디렉터리입니다. 기본적으로 토글 역할을 하며 이 디렉터리에 있는 파일만이 실제로 사용됩니다.
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/
디렉터리에 위치합니다.
access.log
: 클라이언트 요청에 대한 로그 파일error.log
: 서버 오류에 대한 로그 파일
로그 파일의 위치는 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