Nginx 이미지 서버 구축 방법(sites-available, sites-enabled)
먼저 nginx에 대해 간단하게 살펴보면, nginx는 적은 자원으로 높은 성능을 내며, 특히 많은 트래픽이 있을 때, 동시 접속 처리에 특화된 웹 서버 프로그램인데요.
Apache 웹 서버가 주로 사용되던 시기에 늘어나는 트래픽으로 인해 'C10K' 문제가 발생하였고, 이를 해결하기 위해 개발되어 2004년 릴리즈 되었습니다.
* C10K: 하나의 웹 서버에 1만 개가 넘는 클라이언트의 동시 접속을 처리하지 못하는 문제
비동기, 이벤트 기반의 구조로 설계된 nginx는 다양한 용도로 사용될 수 있는데요.
주로 이미지 또는 HTML 등의 정적 콘텐츠를 제공하기 위한 웹 서버(HTTP Web Server)로 활용되거나, 클라이언트와 웹 서버 사이에 존재하며, 클라이언트의 요청을 받아 웹 서버로 전달하여 응답을 받은 후 다시 클라이언트에게 전달하는 역할을 수행하는 리버스 프록시(Reverse Proxy) 역할로도 활용됩니다.
(리버스 프록시의 구조를 통해 요청을 여러 서버로 분산하는 로드 밸런싱 기능도 적용할 수 있습니다.)
이번 포스팅은 서비스에서 별도의 이미지 서버를 사용할 때, 해당 서버에서 이미지(정적 콘텐츠)를 가져오기 위해 'nginx를 웹 서버로 사용하는 방법에 대한 내용'입니다.
(해당 예시는 Ubuntu 18.04.6 LTS 환경에서 실행되었다는 점 참고 부탁드립니다.)
nginx 설치
# 설치 명령어
sudo apt-get install nginx
# 버전 확인 명령어
nginx -v
먼저 linux 서버에 nginx를 설치합니다.
다음과 같이 apt-get 명령어를 통해 설치하게 되면 /etc/nginx 디렉터리에 nginx가 설치되게 됩니다.
nginx가 정상적으로 설치되었다면 nginx의 기본 listen port는 80으로 설정되어 있기 때문에 해당 서버의 ip로 접근하였을 때 다음과 같이 Welcome to nginx! 라는 nginx의 기본 html 화면을 볼 수 있습니다.
nginx 설정 구조 파악(sites-available, sites-enabled)
이어서 /etc/nginx 디렉터리 내부를 살펴보면 nginx 관련 여러 폴더 및 파일들이 존재하는 것을 볼 수 있는데요.
여기서 정적 콘텐츠를 가져오기 위한 웹 설정에 필요한 부분이 바로 'sites-available', 'sites-enabled' 두 디렉터리입니다.
sites-available 디렉터리는 모든 설정 파일을 저장하는 용도이며, sites-enabled 디렉터리는 sites-available 디렉터리에 생성된 설정 파일 중에서 실제 적용할 설정 파일의 심볼릭 링크를 생성하는 용도인데요.
nginx는 sites-enabled 디렉터리에 생성된 링크 파일의 심볼릭 링크를 통해 sites-available 디렉터리의 설정 파일을 읽고, 이를 실행하게 됩니다.
(일반적으로 .conf 파일을 통해 프로그램의 설정을 변경하는 반면, nginx는 이러한 방식의 변경을 통해 필요에 따라 심볼릭 링크의 변경 만을 통해 서버 설정을 바꿀 수 있습니다.)
sites-available 디렉터리에는 default라는 설정 파일이 기본적으로 존재합니다.
이어서 sites-enabled 디렉터리를 살펴보면 해당 디렉터리 역시 default라고 하는 링크 파일이 존재하며, 해당 링크 파일의 심볼릭 링크가 /etc/nginx/sites-available/default 파일로 연결된 것을 볼 수 있습니다.
#심볼릭 링크를 확인하기 위한 명령어
readlink /etc/nginx/sites-enabled/default
직접 심볼릭 링크를 확인하기 위해서는 다음과 같은 명령어를 통해서도 링크 파일에 적용된 링크를 확인할 수 있습니다.
nginx 웹 서버 설정
#설정 파일 생성
sudo vim /etc/nginx/sites-available/custom
편집기(vi 또는 vim)를 통해 /etc/nginx/sites-available 경로에 원하는 파일 이름으로 설정 파일을 생성합니다.
(여기서는 예시로 custom이라는 설정 파일을 생성하였습니다.)
#설정 파일 내용
server {
# 80 port로 서버 오픈
listen 80;
# 정적 파일이 위치할 루트 경로 설정
root /home/jan/;
# /images 경로로 요청이 들어왔을 때 연결되는 경로
location /images {
alias /home/jan/images/;
}
}
설정 파일의 내용은 다음과 같은데요.
listen 옵션을 통해 웹 서버를 오픈할 포트를 설정하고 root 옵션을 통해 정적 파일이 위치할 루트 경로를 설정합니다.
그리고 이미지 요청을 받을 경로에 대한 설정을 진행합니다.
location /images 부분은 해당 url으로 요청이 들어왔을 때 연결 할 경로를 설정하는 부분이며, 설정에는 alias 또는 root 옵션을 사용할 수 있는데요.
두 옵션의 차이점에 대해 살펴보면, root의 경우 location으로 넘어온 부분을 root로 설정한 경로에 추가하는 방식이며, alias의 경우 location에 매칭된 부분을 제거하고 alias로 설정한 경로로 접근하는 방식입니다.
location /images {
#alias를 사용하는 경우
alias /home/jan/images/;
#root를 사용하는 경우
root /home/jan/;
}
즉, /home/jan/images/test.jpg 파일에 연결한다고 했을 때, 각각 위와 같은 설정이 적용되어야 합니다.
#심볼릭 링크 설정
sudo ln -s /etc/nginx/sites-available/custom /etc/nginx/sites-enabled/setting
이어서 위에서 생성한 설정 파일에 대한 심볼릭 링크를 설정해주어야 하는데요.
다음 명령어를 통해 setting이라는 링크 파일이 생성되고, 해당 링크 파일에 연결된 심볼릭 링크는 /etc/nginx/sites-available/custom이 됩니다.
(링크 파일 이름 역시 마음대로 지정할 수 있으며, 여기서 setting은 예시입니다.)
여기까지 설정을 마친 후 /etc/nginx/sites-enabled 디렉터리 내부를 살펴보면, 기존에 존재하던 링크 파일인 default와 추가로 생성한 setting 두 가지 링크 파일이 존재하는 것을 확인할 수 있는데요.
#기존의 심볼릭 링크가 설정된 링크 파일 삭제
sudo rm /etc/nginx/sites-enabled/default
rm 명령어를 통해 기존에 설정되어 있던 링크 파일인 default를 삭제합니다.
#nginx 재실행
sudo systemctl restart nginx
마지막으로 바뀐 설정을 적용하기 위해 nginx를 재실행해줍니다.
적용 확인
최종적으로 nginx 웹 서버를 통해 서버에 저장된 이미지를 가져오는 것을 확인할 수 있습니다.
< 참고 자료 >
https://www.vompressor.com/setting-nginx-1/
https://whatisthenext.tistory.com/123
'Programming > Web' 카테고리의 다른 글
gcp vm 인스턴스 swap 스왑 메모리 적용하는 방법 (0) | 2023.02.22 |
---|---|
(html) a href 새 창 열기 및 크기 지정 (2) | 2023.02.21 |
Base64와 Base64UrlSafe 차이점 (Illegal base64 character 발생 이유) (0) | 2022.12.17 |
빅 엔디언과 리틀 엔디언(Big Endian & Little Endian) (0) | 2022.11.05 |
FTP Active Passive Mode 정리 (0) | 2022.10.22 |