반응형
업로드, 다운로드, 삭제 기능 등을 구현하기 전에 이미지 서버의 웹 서버인 Nginx의 설정을 해 준다.
# Nginx 설정 파일 디렉토리 확인
/etc/nginx 디렉토리에서 Nginx 설정을 위해 사용할 디렉토리 및 폴더는 다음과 같다.
/etc/nginx# ls -al
total 88
drwxr-xr-x 1 root root 4096 Apr 21 17:22 .
drwxr-xr-x 1 root root 4096 Apr 26 19:06 ..
drwxr-xr-x 1 nginx nginx 4096 Apr 26 19:06 conf.d # include될 config 파일들
-rw-r--r-- 1 root root 1077 Apr 21 17:22 fastcgi.conf
-rw-r--r-- 1 root root 1077 Apr 21 17:22 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Apr 21 17:22 fastcgi_params # 업로드, 다중 업로드, 삭제 fastcgi
-rw-r--r-- 1 root root 1007 Apr 21 17:22 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Apr 21 17:22 koi-utf
-rw-r--r-- 1 root root 2223 Apr 21 17:22 koi-win
-rw-r--r-- 1 root root 5231 Apr 21 17:22 mime.types # 다운로드 시 필요한 미디어 타입
-rw-r--r-- 1 root root 5231 Apr 21 17:22 mime.types.default
-rw-rw-r-- 1 1000 1000 547 Apr 26 19:55 nginx.conf
-rw-r--r-- 1 root root 2656 Apr 21 17:22 nginx.conf.default
-rw-r--r-- 1 root root 636 Apr 21 17:22 scgi_params
-rw-r--r-- 1 root root 636 Apr 21 17:22 scgi_params.default
-rw-r--r-- 1 root root 664 Apr 21 17:22 uwsgi_params
-rw-r--r-- 1 root root 664 Apr 21 17:22 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Apr 21 17:22 win-utf
## fastcgi.conf
설정 파일 중 fastcgi.conf 파일을 볼 수 있는데, Nginx에서 fastcgi 모듈을 사용할 때 필요한 FastCGI 관련 설정이 모여 있다. fastcgi_param은 Nginx ngx_http_fastcgi_module이 FastCGI 규약에 따라 FastCGI 프로세스(실제 구현 상에서는 fcgiwrap 프로그램)에 전달해야 할 변수를 나타내는 지시자이다. 이후 fcgiwrap 프로세스에서 이 변수 값들에 접근할 수 있다.
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
## mime.types
확장자별 미디어 타입을 규정하는 mime.types 파일도 볼 수 있다. 업로드 및 다운로드 시 확장자를 보고 미디어 타입을 추론할 때 사용할 것이다. 특히, 다운로드 시 응답 헤더의 Content-Type이 확장자에 맞게 설정된다.
types {
(...)
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
(...)
}
# Nginx.conf
Nginx 웹 서버 구동 시 기본적으로 필요한 설정 항목들을 작성한다.
- worker_processes: Nginx master process가 관리할 worker process의 수를 설정한다. auto로 설정하면 자동으로 할당된다. 보통 Nginx 웹 서버 성능 튜닝에 관한 글을 보면, CPU core 수의 80~90% 정도로 설정하는 것이 좋다고 한다
- error_log: nginx 웹 서버 error log 레벨을 설정한다. 개발 시 편의를 위해 debug 레벨로 설정해 뒀는데, 로그 출력량이 info 레벨 수준과 비교가 안 되게 많아진다(;;). 성능 튜닝 시 로그 레벨도 중요한 포인트가 될 듯하다
- worker_connections: 이벤트 처리 시 최대 동시 접속 수라고 하는데, 기본값으로 뒀다
- http: http 어플리케이션 특정 도메인이나 IP 주소로의 요청을 처리할 블록으로, 여기서 다른 설정 값들을 include한다
- mime.types: 업로드, 다운로드 시 파일 미디어 타입 처리를 위한 값들이 미리 규정되어 있는데, 이를 포함한다
- http.conf: http 어플리케이션 설정 파일을 포함하도록 설정한다
user nginx; # nginx user 설정
worker_processes auto; # nginx worker process 수 설정
error_log /var/log/nginx/error.log debug; # nginx 에러 로그 설정
events {
worker_connections 1024; # nginx worker process 1개 당 최대 동시 접속 수
}
http {
# 미디어 타입 설정
include mime.types;
# 하위 설정
include conf.d/http.conf;
}
## http.conf
실제 요청 처리에 필요한 설정을 작성한다. 이후 개발을 통해 API 엔드 포인트 별로 설정되어야 할 항목들을 빈 칸으로 남겨 둔다. 다만, 실제 개발 시 빈 칸으로 남겨 두고 파일을 실행하면 오류가 날 수 있으므로, listen 블록 외에 채워지지 않은 설정 항목은 주석 처리하는 것이 좋다.
- listen: 이미지 서버는 ipv4, ipv6 8888 포트로 오는 요청을 대기한다
- location: 요청을 처리할 서버 블록
- ~ \.py$: .py로 끝나는 엔드포인트에서는 이미지 서버 동적 요청 처리를 위한 python script를 실행한다. python script 실행을 위한 fastcgi.conf 항목을 포함해 준다.
- /images/upload: 이미지 단건 업로드록를 처리할 서버 블록이다. upload module을 이용해 파일을 디스크에 저장한 뒤, 이미지가 저장될 디렉토리의 계층화, 이미지 id 발급 등을 위한 스크립트를 호출할 것이다.
- /images/upload_many: 이미지 다중 업로드를 처리할 서버 블록이다. upload module을 이용해 파일을 디스크에 저장한 뒤, 각각의 이미지가 저장될 디렉토리의 계층화, 이미지 id 발급 등을 위한 스크립트를 호출할 것이다.
- /images/download/: 이미지 다운로드를 처리할 서버 블록이다. /images/{image_id} 엔드 포인트로 image_id를 path variable로 하여 요청을 보내면, path variable을 디렉토리 계층별로 분리하고, 파일시스템의 해당 디렉토리에서 이미지 파일을 찾아 반환할 것이다.
- /images/delete/: 이미지 삭제를 처리할 서버 블록이다. /images/delete/{image_id} 엔드 포인트로 image_id를 path variable로 하여 요청을 보내면, path variable을 디렉토리 계층별로 분리하고, 파일 시스템의 해당 디렉토리에서 이미지 파일을 찾아 삭제하는 스크립트를 호출할 것이다.
server {
listen 8888;
listen [::]:8888;
# CGI python scripts
location ~ \.py$ {
include conf.d/fastcgi.conf;
}
# 이미지 단건 업로드 엔드포인트
location /images/upload {
# 단건 업로드 처리를 위한 설정 항목
}
# 이미지 다중 업로드
location /images/upload_many {
# 다중 업로드 처리를 위한 설정 항목
}
# 이미지 다운로드
location /images/download/ {
# 다운로드 처리를 위한 설정 항목
}
# 이미지 삭제
location /images/delete {
# 삭제 처리를 위한 설정 항목
}
}
반응형
'Backend > Image Server' 카테고리의 다른 글
[2] Nginx를 이용한 이미지 서버 ⎻ Nginx(w/ upload module), fcgiwrap 설치 (0) | 2022.06.06 |
---|---|
[1] Nginx를 이용한 이미지 서버 ⎻ 개요 (6) | 2022.06.06 |