개발/Docker

[Docker] Nginx 설정 파일인 nginx.conf 이해하기

firsthg 2026. 8. 6. 16:54

실습 목표 : Nginx가 HTTP 요청을 어떻게 처리할지 결정하는 프로그램인지 이해하기

 

Step 1. 실습 폴더 내부에 nginx.conf 파일 생성

mkdir nginx && touch nginx/nginx.conf

실습 폴더인 nginx-lab 폴더 내부에 nginx 폴더를 만들고 그 폴더 내부에 nginx.conf 파일 생성

 

 

Step 2. 작은 설정의 nginx.conf 작성

events {}

http {
    server {
        listen 80;
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

 

events {} : 이 블록은 연결(Connection) 처리와 관련된 설정을 담는 곳으로 현재 실습에서는 비워둔다.

 

http {} : HTTP 서버와 관련된 설정은 이 안에 작성한다.

 

server{} : 하나의 웹 서버를 의미한다. 예를 들어, 여러 사이트를 운영할 경우 server 블록을 여러 개 둘 수 있다.

 

listen : Nginx가 몇 번 포트로부터 요청을 받을 것인지를 의미한다.

 

location : 웹 브라우저가 요청한 URL 경로에 따라, 서버가 어떤 방식으로 요청을 처리할지를 다루는 블록이다.

예를 들어,

location /

의 경우 / 로 시작하는 모든 요청을 해당 블록에서 처리한다는 것을 의미한다.

 

즉,

/

도

/index.html

도

/images/image.png

등도 해당 블록에서 처리됨을 의미한다.

 

root : 서버가 요청받은 파일을 찾을 폴더 경로를 지정하는 블록이다.

예를 들어, location / 블록 내의

root /usr/share/nginx/html;

에 대하여

 

브라우저가 

GET /

를 보내면

 

Nginx는

/usr/share/nginx/html

에서 파일을 찾기 시작한다.

 

index : 

브라우저가 /를 요청했을 때, 서버가 그 폴더 안에서 가장 먼저 찾아 보여줄 기본 파일을 지정하는 설정으로 파일 이름을 적지 않아도 보여줄 대상을 뜻한다.

 

예를 들어, location / 블록 내의

index index.html;

에 대하여  브라우저가

/

를 요청했을 때 Nginx는

/

파일이 존재하지 않으므로 우선적으로

index.html

파일을 찾는다.

 

Step 3. Nginx 설정 파일인 nginx.conf도 Mount하기

docker run -d \
--name my-nginx \
-p 8080:80 \
-v $(pwd)/html:/usr/share/nginx/html \
-v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf \
nginx

 

nginx-lab 폴더에 있는 HTML 뿐만 아니라 설정 파일도 연결한다.

이제 컨테이너는 기본 설정이 아니라, 내가 작성한 설정 파일을 사용하게 된다.

 

+ 정상적으로 nginx 컨테이너가 실행되고 있는지 브라우저를 통해 확인

 

step 4. 설정 변경해보기

nginx.conf 에서 

root /usr/share/nginx/html;

을

root /abcd;

로 수정한 다음 저장한다.

 

이때, Nginx가 자동으로 변경된 설정을 재적용하지는 않기 때문에 다음 exec 도커 명령어를 입력하여 컨테이너 내에 실행될 설정을 재적용하는 명령어를 전달한다.

docker exec my-nginx nginx -s reload

 

또는 다음과 같이 명령어를 입력하여 컨테이너를 재시작하여도 변경된 설정이 적용된다.

docker restart my-nginx

 

이제 브라우저를 새로고침하면

와 같이 나타난다.

그 이유는 nginx는 변경된 설정에 의해

/abcd/index.html

을 찾지만 찾고자하는 폴더와 파일 자체가 존재하지 않기 때문이다.

 

Step 5. 원래대로 복구하기

다시 nginx.conf 파일을

root /usr/share/nginx/html;

로 수정하고 저장한 다음

 

docker exec my-nginx nginx -s reload

설정을 재적용한다.

 

브라우저를 통해 확인해보면

정상적으로 복구된 것을 확인할 수 있다.