NGINX autoindex module 활용 디렉터리 인덱싱 페이지 구성 가이드

이 포스트는 NGINX autoindex module 을 사용하여 지정된 디렉터리에 구성된 파일을 확인할 수 있는 디렉터리 인덱싱 페이지를 구성하는 방법에 대한 가이드를 제공합니다. 디렉터리 인덱싱 페이지를 사용할 경우 웹 파일 공유 서버와 같은 환경에서 다양한 파일을 쉽고 빠르게 공유할 수 있습니다.
하지만 서버의 특정 디렉터리 구조와 파일 목록이 외부 사용자에게 노출될 수 있어 일반적인 웹 서버의 경우 보안을 위해 비활성화 하는 것이 좋습니다. 특히 공공기관이나 민감한 정보를 다루는 환경에서는 보안 취약점이 될 수 있으므로, 주의가 필요합니다.

해당 모듈은 NGINX OSS, NGINX Plus 모두 사용할 수 있으며 설정 매개변수 없이도 기본적으로 구성되어 있습니다.

목차

1. NGINX autoindex module이란?
 1-1. NGINX autoindex module 지시문

2. NGINX autoindex module을 활용한 디렉터리 인덱싱 페이지 구성
3. 결론

1. NGINX autoindex module 이란?

NGINX autoindex module(ngx_http_autoindex_module)은 NGINX 웹 서버에서 디렉터리 목록을 자동으로 생성하여 브라우저를 통해 파일 목록을 제공하는 디렉터리 인덱싱 페이지를 활성화합니다. 이 모듈은 디렉터리에 index.html 파일이 없을 경우 404 응답을 반환하지 않고, 디렉터리 내의 파일과 디렉터리를 목록으로 표시합니다.

이 모듈을 활용해 apt 패키지 서버와 같이 웹 서버에 디렉터리 인덱싱 페이지를 구성할 수 있습니다.

1-1. NGINX autoindex module 지시문

NGINX autoindex module에는 다음과 같은 지시문들이 있습니다.

모듈에 대한 자세한 설명은 링크에서 확인하실 수 있습니다.

1. autoindex on | off;
기본값: autoindex off;
컨텍스트: http, server, location

디렉터리 목록 출력을 활성화/비활성화 합니다.

2. autoindex_exact_size on | off;
기본값: autoindex_exact_size on;
컨텍스트: http, server, location

HTML 형식의 출력에서, 파일의 크기 출력을 설정합니다. on 설정 시 정확한 크기를 출력하며, off 설정 시 KB, MB, GB 단위로 반올림하여 출력합니다.

on 설정 시 :

NGINX autoindex 모듈 exact size on

off 설정 시 :

NGINX autoindex 모듈 exact size off

3. autoindex_format html | xml | json | jsonp;
기본값: autoindex_format html;
컨텍스트: http, server, location

디렉터리 목록 출력의 형식을 설정합니다.

html:

NGINX autoindex 모듈 exact size html format

xml:

NGINX autoindex 모듈 exact size xml format

XML 형식의 출력은 ngx_http_xslt_module을 통해 변환할 수 있습니다.

json:

NGINX autoindex 모듈 exact size json format

4. autoindex_localtime on | off;
기본값: autoindex_localtime off;
컨텍스트: http, server, location

HTML 형식의 출력에서, 디렉터리 목록의 시간 표기를 NGINX 서버의 시간대(local time) 혹은 UTC 시간으로 설정합니다.

2. NGINX autoindex module을 활용한 디렉터리 인덱싱 페이지 구성

/etc/nginx/conf.d 디렉터리에, NGINX 서버의 설정 파일(conf 파일) 목록과, html 파일을 확인할 수 있도록 autoindex 모듈을 활용하여 디렉터리 인덱싱 페이지를 구성하도록 하겠습니다.

예제에서 사용된 conf 파일의 디렉터리는 /etc/nginx/conf.d, html 파일의 디렉터리는 /usr/share/nginx/html입니다.

file.conf
server {
    listen    5050;  # 페이지 접속을 위한 임의의 포트 지정

    allow 192.168.200.0/23;  # IP 기반 접속 설정
    deny all;

    root /usr/share/nginx;  # 파일을 탐색할 루트 디렉터리 지정
    autoindex on;
    autoindex_exact_size off;
    index none;  # NGINX의 index.html 파일을 기본적으로 표시하는 기능 비활성화

    location / {
    }

    location /configs {
        alias /etc/nginx/conf.d;  # 루트 디렉터리 대신 파일을 탐색할 디렉터리 지정
    }

    location /html {
        autoindex_exact_size on;
    }

}

NGINX의 설정 파일인 conf 파일과 같은 민감한 파일의 경우 외부 노출 시 보안에 위협이 되므로 적절한 접속 제한의 설정이 필요합니다.

NGINX는 기본적으로 디렉터리에 존재하는 index.html 파일을 index 파일로 사용하기 때문에, autoindex 모듈을 활성화해도, 해당 디렉터리에 index.html 파일이 존재하면 디렉터리 인덱싱 페이지가 아닌 해당 html 파일을 표시합니다.
index none; 설정을 통해서 none 파일을 index 파일로 사용하도록 설정하여 디렉터리 인덱싱 페이지 대신 index.html 파일이 표시되지 않도록 설정했습니다.

파일을 탐색할 디렉터리의 구조는 다음과 같습니다.

/etc/nginx/conf.d/
├── backends.conf
├── cache.conf.bak
├── default.conf.bak
├── devops.conf.bak
├── file.conf
├── path1.conf
└── path2.conf

/usr/share/nginx/
└── html
    ├── 50x.html
    ├── api
    │   ├── path1
    │   │   └── index.html
    │   └── path2
    │       └── index.html
    ├── header.html
    ├── index.html
    ├── load1.html
    ├── load2.html
    ├── load3.html
    ├── nginx
    │   └── index.html
    └── test
        └── index.html

이제 브라우저에서 직접 접속하면 다음과 같이 나타납니다.

루트 디렉터리로 설정한 /usr/share/nginx 디렉터리의 목록을 표시합니다.

../ 을 클릭하여 상위 디렉터리로 접근을 시도해도, 루트 디렉터리로 설정한 /usr/share/nginx의 상위 디렉터리로는 접근할 수 없습니다.

/usr/share/nginx/html

alias 지시문으로 인해 /usr/share/nginx/configs 디렉터리의 파일이 아닌, /etc/nginx/conf.d 디렉터리의 파일 목록을 표시합니다.

목록의 conf 파일을 클릭하면 해당 파일을 다운로드 할 수 있습니다. html 파일의 경우 브라우저에서 바로 표시됩니다.

index none; 설정을 적용하지 않을 경우, 아래 사진과 같이 /html/nginx 경로의 요청에도 자동적으로 해당 디렉터리의 index 파일인 /html/nginx/index.html 파일을 표시합니다.

3. 결론

이번 포스트에서는 NGINX autoindex 모듈을 활용하여 NGINX 서버 내에 구성된 디렉터리를 지정하여 디렉터리 인덱싱 페이지를 구성하는 방법에 대해 알아봤습니다.

해당 모듈을 활용하여 파일 공유 서버와 같은 환경에 효과적으로 활용할 수 있습니다. 다만 일반적인 웹 서버에서는 민감한 디렉터리가 노출될 수 있는 보안 취약점이 될 수 있으므로, 이 모듈을 비활성화하는 것이 권장됩니다.

NGINX OSS보다 더욱 향상된 NGINX Plus를 체험해 보고 싶으시다면 NGINX STORE를 통해 문의해 무료로 NGINX Plus trial을 체험해 보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required