본문 바로가기
서버 인프라, 백엔드/웹서버 (Nginx)

Nginx : alias vs root 지시어의 차이점 알아보기

by 번데기 개발자 2023. 9. 24.
반응형

 

Nginx에서 root와 alias 지시어의 차이

 

Nginx 설정을 하다보면 root 지시어와 alias 지시어를 만나게 됩니다. 두 지시어의 설정은 뭔가 비슷하면서도 다른 부분이 있습니다.
(지시어는 다른 말로 directive라도고 합니다.)

 

공통점은 둘 다 nginx에서 특정 웹 리소스를 찾기 위해 사용되는 디렉터리 경로를 설정하는 지시어라는 점입니다. 

 

차이점은 동작하는 방식이 약간 다르다는 점인데요, 아래에서 해당 설정에 대해서 알게 된 내용을 간단하게 공유드리도록 하겠습니다.

 

 

 

Root 지시어

 

root 지시어는 Nginx가 웹 서버에서 정적 파일을 찾을때의 기본 디렉터리를 설정합니다.

 

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
}

 

예를 들어 위와 같은 코드가 있다면 nginx는 모든 요청에 대한 파일을 /var/www/html 에서 찾습니다.

 

 

Alias 지시어

 

alias 지시어는 root 지시어와 비슷하지만 URI 경로를 변경하거나 재정의할 때 사용됩니다. 

 

보통 alias 지시어는 location 블록과 함께 사용됩니다. location 블록은 요청된 URI 경로에 따라 서버 동작을 세부적으로 제어할 수 있도록 해주는 블록입니다. location 블록을 사용해서 경로와 일치하는 요청들에 대한 정적 파일을 반환할 수도 있고 리버스 프록시를 설정할 수도 있습니다.

 

alias 지시어를 이용하면 웹 서버에서 요청된 URI 경로와 실제 파일 시스템 간의 경로 매칭을 재정의 할수 있습니다. 

 

예를 들어 : 

 

server {
    listen 80;
    server_name example.com;
    location /images/ {
        alias /var/www/images/;
    }
}

 

위와 같은 요청이 있을 때 location /images/로 들어온 요청에 대해서 /var/www/images 요청으로 URI 경로를 대치할 수 있습니다.

 

 

Alias 지시어 vs Root 지시어 

 

두 지시어의 차이점은 URI 경로 변경 여부에 대한 차이가 있습니다.

 

root 지시어는 요청된 URI를 변경하지 않고 파일을 제공할 디렉토리를 설정하는 반면, alias 지시어는 URI 경로를 변경하거나 재정의 하여 파일을 제공하는 디렉터리를 설정합니다.

 

위에서 보여드렸던 예제를 한번 다시 살펴보겠습니다.

 

예를들면 : 

 

server {
    listen 80;
    server_name example.com;
    location /img/ {
        alias /var/www/images/;
    }
}

 

위와 같은 요청이 있을 때 http://example.com/img/picture.png 요청이 들어왔다면 /var/www/images/picture.png 에서 실제 파일을 찾습니다. 

 

반면 : 

 

server {
    listen 80;
    server_name example.com;
    location /img/ {
        root /var/www/images/;
    }
}

 

http://example.com/img/picture.png 요청 시, 위와 같이 root 지시어를 사용하면 /var/www/images/img/picture.png 에서 실제 파일을 찾게 됩니다. 만약 root를 /var/www로 설정하면 요청시 /var/www/img 폴더에서 실제 파일을 찾을 수 있습니다.

 

 

 

마무리

 

오늘은 간단하게 Nginx의 몇 가지 지시어 설정에 대해서 알아보았습니다.

 

해당 부분때문에 react 배포 시 nginx 설정 때문에 애를 먹은 부분이 있어서 한번 정리해 보았습니다.

 

다음번에도 도움이 되는 내용으로 공유드리겠습니다.!

 

반응형