본문 바로가기
Docker

Docker - 도커로 nginx 웹서버 구축하기

by DGK 2021. 12. 23.

 

도커 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

도커로 nginx 웹서버 구축하기

docker를 통해 ubuntu:20.04에 nginx 웹서버를 구축하는 연습을 하고자 한다.

 

ubuntu:20.04 & nginx 웹서버

[1단계]

docker run -dit -p 80:8080 --name myos ubuntu:20.04

docker exec -it myos /bin/bash

 

ubuntu:20.04 image로 docker container를 생성하고 실행시킨다.

그 이후에 docker exec 명령을 사용하여, 해당 docker container로 들어간다.

 

*결과 :

 

 

[2단계]

apt-get update

apt-get install nginx

 

" apt-get update " 명령으로 unbuntu 패키지를 업데이트 한 후, " apt-get install nginx " 명령으로 nginx(최신 버전)를 설치한다.

 

*결과 :

apt-get install nginx

 

apt-get install nginx

 

 

[3단계]

find -name nginx.conf

cd /etc/nginx/

vi nginx.conf

 

find 명령을 사용하여 nginx.conf의 이름을 가진 파일의 위치를 찾을 수 있으며, nginx.conf 파일은 nginx 웹 서버의 기본 설정 파일이다.

 

참고로, vi 명령으로 nginx.conf 파일을 열기 위해서는 " apt-get install vim " 명령으로 vim을 미리 설치해둬야 한다.

 

*결과 :

vi nginx.conf

 

apt-get install vim

 

 

[4단계]

vi nginx.conf

 

해당 명령으로 nginx.conf 파일에 들어간다.

 

*결과 :

vi nginx.conf

 

일반적으로 nginx.conf 파일의 http 항목에서 nginx 웹 서버의 기본 설정을 참조한다.

http 항목에서 include 설정은 다른 파일을 nginx.conf 파일로 가져와서 적용시키는 설정으로 nginx.conf 파일 이외에 존재하는 nginx의 기본 설정 파일들을 불러와서 적용시키는데 사용된다.

 

*참고내용

/etc/nginx/conf.d/ 디렉토리에 존재하는 *.conf 파일과 /etc/nginx/sites-enabled/ 디렉토리에 존재하는 모든 파일들을 확인하는 방법

 

*결과 :

/etc/nginx/conf/*.conf & /etc/nginx/sites-enabled/*

 

/etc/nginx/sites-enabled/default

 

해당 파일은 /etc/nginx/sites-enabled 디렉토리에 존재하는 default 파일이다.

이 파일도 nginx 웹 서버의 기본 설정이 저장된 파일이다. (include 설정으로 nginx.conf 파일에 적용되어 있음)

참고로, default 파일의 server 항목에 nginx 웹 서버를 사용하는데 필요한 설정들이 존재한다.

 

 

[5단계]

default 파일에서 nginx 웹 서버의 기본 설정을 조작하는 방법

 

# default 파일의 server 항목 설정

/etc/nginx/sites-enabled/default

 

server 항목에서 80포트를 8080포트로 변경했다.

이는 8080포트를 통해 모든 웹 서버의 요청을 받도록 nginx 웹 서버의 기본 설정을 변경하는 것이다.

 

*참고내용

listen 8080 default_server; 는 IPv4 관련 설정

listen [::] 8080 default_server; 는 IPv6 관련 설정

default_server는 모든 웹 서버의 요청을 받겠다는 설정

 

/etc/nginx/sites-enabled/default

 

server 항목의 server_name을 통해 요청 받을 도메인의 이름을 설정할 수 있다.

참고로, 요청받을 도메인의 이름이 없다면 기본 설정인 언더바(_) 상태로 두면 된다.

 

/etc/nginx/sites-enabled/default

 

server 항목에서 root /var/www/html; 설정은 nginx 웹 서버가 html 파일을 찾는 경로이다.

즉, 특정 IP주소로 nginx 웹 서버에 html 파일 요청이 들어오면 nginx 웹 서버는 /var/www/html 경로에서 index, index.html, index.htm, index.nginx-debian.html 순서로 html 파일을 찾아서 해당 파일을 리턴해준다.

 

/etc/nginx/sites-enabled/default

 

location 설정은 특정 IP주소로 요청이 들어올 때, 요청되는 파일을 찾는 디폴트 폴더를 root로 지정하는 설정이다.

즉, 특정 IP 주소의 경로와 매칭되는 폴더 및 파일이 있는지 찾아보고 없으면 404 HTTP 응답 코드를 리턴하라는 설정이다. 

 

참고로, default 파일의 설정을 변경했으면 " service nginx restart " 명령으로 nginx를 재부팅해야만 변경된 설정들이 적용된다.

 

*추가내용(location 설정)

default 파일에 location 설정을 추가하는 경우 nginx 웹 서버가 내부적으로 요청된 파일을 찾는 매커니즘을 알아보고자 한다.

 

(ex)

location /blog {
		root /var/www;
}

 

이처럼 location 설정을 추가하는 경우, nginx 웹 서버가 요청된 html 파일을 찾는 매커니즘은 다음과 같다.

 

- 요청된 IP주소 : 외부 IP주소/aaa.html

이 경우에는 디폴트 location 설정에 따라 root /var/www/html 경로에서 aaa.html 파일이 있는지 확인한다.

 

- 요청된 IP주소 : 외부 IP주소/blog/aaa.html

이 경우에는 새롭게 추가한 location 설정에 따라 root /var/www 경로에서 aaa.html 파일이 있는지 확인한다.

 

- 요청된 IP주소 : 외부 IP주소/bbb/aaa.html

이 경우에는 디폴트 location 설정에 따라 root /var/www/html/bbb 경로에서 aaa.html 파일이 있는지 확인한다.

 

 

[6단계]

5단계에서 server 항목의 설정 중 디폴트 포트 번호를 80에서 8080으로 변경했기 때문에, 외부에서 특정 IP주소(기본 값 80포트)로 접속하면 docker container 내부의 8080로 연결되어 그 결과 nginx 웹 서버의 8080로 접속할 수 있다.

 

단, EC2 서버의 보안그룹 인바운드 규칙에서 사전에 80포트를 열어놓아야만 접속할 수 있다.

 

*결과 :

3.38.14.143

 

해당 페이지는 nginx 웹 서버가 html 파일 요청에 따라 /var/www/html 경로에서 index.nginx-debian.html 파일을 찾아서 리턴해준 결과이다.

 

*참고내용

cd /var/www/html/

 

index.nginx-debian.html

 

 

댓글