Backend/Image Server

[3] Nginx를 이용한 이미지 서버 ⎻ Nginx 기본 설정 파일 작성

eraser 2022. 6. 6. 18:45
반응형


업로드, 다운로드, 삭제 기능 등을 구현하기 전에 이미지 서버의 웹 서버인 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 {
        # 삭제 처리를 위한 설정 항목
    }
}

 

반응형