devOps

AWS EC2 Ubuntu Nginx 설치

WhoamixZerOne 2025. 3. 1. 16:48

Nginx 설치

Nginx 설치 전 필수 구성 요소 설치

sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

apt가 패키지 진위를 확인할 수 있도록 공식 nginx 서명 키를 획득

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

올바른 키가 포함되어 있는지 확인

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

출력에는 "573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62" 다음과 같이 전체 지문이 포함되어야 합니다.

pub rsa2048 2011-08-19 [SC] [만료일: 2027-05-24]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx 서명 키 <signing-key@nginx.com>

안정적인 nginx 패키지에 대한 저장소를 설정

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

저장한 패키지가 반영되도록 시스템 update & install

sudo apt update && sudo apt install -y nginx

설치 완료 확인(버전 확인)

nginx -v

nginx version: nginx/버전이 뜨면 정상적으로 설치가 완료됐다.

nginx 구동 확인

sudo systemctl status nginx

"Active가 inactive (dead)"로 설치하면 처음에는 구동되어 있지 않다. 다음의 명령어로 구동시킨다.

nginx 시작 & 종료

sudo systemctl start nginx
sudo systemctl stop nginx

"Active가 active (running)"으로 정상적으로 구동되었다.

ec2 inbound rule에 80 포트가 열린 상태에서 웹에 접속해 본다.

nginx에 제공하는 index.html 페이지가 정상적으로 나왔다. 이제 nginx의 설정을 자기 상황에 맞춰서 변경해서 사용하면 된다.

nginx 재시작

sudo systemctl restart nginx # 중지 후 재실행
sudo systemctl reload nginx # 수정된 파일 적용하여 연결을 끊지 않고 재실행

 

Nginx 로그 확인

nginx의 로그 파일 위치는 "/var/log/nginx"에 위치한다.

해당 경로에는 "access.log"와 "error.log"파일이 있는데, access.log 파일에는 nginx 서버로 접근한 요청에 대한 정보가 기록되어 있고, error.log 파일에는 에러 메시지에 대한 기록이 있다. "tail" 명령어를 사용해서 로그를 확인할 수 있다.

cd /var/log/nginx
tail access.log

tail 명령어

"tail" 명령어는 실시간으로 업데이트되는 로그를 분석하는데 많이 사용되는 명령어이다.

파일의 마지막 행을 기준으로 파일 내용 일부를 출력해 준다.

tail 명령어 사용법

tail [옵션][파일명]
tail filename.log

옵션의 목록은 다음과 같다.

  • -f : tail을 종료하지 않고 파일의 업데이트 내용을 실시간으로 계속 출력
  • -[라인 수] : 파일의 마지막 줄부터 지정한 라인 수까지의 내용을 출력
  • -n [라인 수] : 파일의 마지막 줄부터 지정한 라인 수까지의 내용을 출력(위와 동일)
  • -q : 파일의 헤더와 상단의 파일 이름을 출력하지 않고 내용만 출력
# tail -f [파일명]
tail -f filename.log

# tail -[라인 수][파일명]
tail -50 filename.log

# tail -n [라인 수][파일명]
tail -n 50 filename.log

# tail q [파일명][파일명]
tail -q filename1.log filename2.log

자주 사용하는 tail 명령어

tail [옵션][파일명] | grep '검색문자열'
tail -f filename.log | grep 'error='

filename.log 파일에서 'error=' 문자열이 포함된 로그만 파일을 종료하지 않고 실시간으로 확인할 수 있다.

 

Nginx 설정

nginx의 설정 파일 등의 위치는 "/etc/nginx"에 위치한다. nginx의 가장 기본이 되는 설정 파일은 "nginx.conf" 파일이다.

다음은 nginx를 설치하면 제공되는 "/etc/nginx/conf.d/default.conf" 설정 파일 내용을 정리한 것이다.

# /etc/nginx/conf.d/deafult.conf

# server : '하나의 웹 사이트에 관련된 설정'을 관리하는 단위 ('server 블럭'이라고 부름)
server {
	# localhost:80으로 들어오는 요청을 이 server 블럭에서 처리하도록 설정
	# (server_name이 일치하는 server 블럭이 없는 경우 첫 번째 정의되어 있는 server 블럭을 기반으로 처리)
	listen      80;
	server_name localhost;
	
	# "/"으로 시작하는 모든 경로를 처리 (ex. /index.html)
	location / {
		# /jscode.html로 요청이 들어오면 /usr/share/nginx/html/jscode.html 파일로 응답
		root /usr/share/nginx/html;

		# /로 요청이 들어오면 /usr/share/nginx/html/index.html로 응답
		# 만약 /usr/share/nginx/html/index.html이 없을 경우, /usr/share/nginx/html/index.htm으로 응답
		index index.html index.htm;
	}

	# nginx에서 500, 502, 503, 504의 상태 코드가 발생했을 때 /50x.html로 redirect
	error_page 500 502 503 504 /50x.html;

	# /50x.html과 완전히 일치하는 경로를 처리
	location = /50x.html {
		# /50x.html로 요청이 들어오면 /usr/share/nginx/html/50x.html 파일로 응답
		root /usr/share/nginx/html;
	}
}

nginx 설정 파일 문법 체크

sudo nginx -t

nginx 설정 파일 변경 적용

sudo nginx -s reload

nginx http 요청 프로젝트로 전달하도록 설정

# /etc/nginx/conf.d/default.conf

server {
        listen 80;
        server_name localhost;

        location / {
                proxy_pass http://localhost:8080;
        }
}

https://github.com/spring-projects/spring-petclinic

80 포트로 접속했을 때 nginx 페이지가 아닌 프로젝트의 페이지가 열리는 것을 확인할 수 있다.

nginx로 많은 설정을 통해 다양한 제어를 할 수 있는데 천천히 알아보면서 적용해 보고 글을 작성해 보겠습니다.

 

 

 

🔗 Reference