오픈 소스/nginx

[Nginx] Static Content에 대한 이해(conf 파일)

benjykim 2019. 1. 11. 17:13
반응형

nginx

Beginner's Guide - Serving Static Content


웹서버의 중요한 임무는 파일들(images, static HTML pages)을 제공하는 것이다. 당신은 요청에 따라 다른 로컬 디렉터리에서 파일을 처리하는 예를 구현해볼 것이다. (/data/www(which may contain HTML files) and /data/images(containing images)). 이를 위해서는 configuration 파일을 편집하고 두 개의 location block이 있는 http block 내의 서버 block을 설정해야 한다.


첫째로 /data/www 디렉토리를 생성하고 텍스트 내용이 포함된 index.html 파일을 만들어라. 그리고 /data/images디렉토리를 생성하고 그 안에 일부 이미지를 배치하자.


다음, configuration 파일을 열어라. Default conf 파일은 이미 몇 가지 서버 블록의 예가 포함되어 있으며, 대부분 주석이다. 이제 이러한 모든 block을 주석으로 처리하고 새로운 server block을 만들어보자.


http {
  server {
  }
}


일반적으로 conf 파일에는 listening 하는 포트와 서버 이름으로 구분되는 여러 개의 server 블록이 포함될 수 있다. nginx가 요청을 처리할 서버를 결정하면, 그것은 request의 header에 지정된 URI를 server block 내에 정의된 location directives의 매개변수와 비교하여 테스트한다.


아래의 location block을 server block에 추가해라


location / {
  root /data/www;
}


location block은 request로 부터 나온 URI를 비교하여 / prefix를 지정한다. 일치하는 request의 경우 URI가 루트 지시문에 지정된 경로, 즉 /data/www에 추가되어 로컬 파일 시스템에서 요청된 파일의 경로를 형성한다. 일치하는 location block 이 여러 개 있는 경우 nginx는 가장 긴 prefix를 가진 block을 선택한다. 위의 location블록은 길이 1의 가장 짧은 prefix를 제공하므로, 다른 모든 location블록이 일치하는 내용을 제공하지 못하는 경우에만 이 block을 사용한다.


다음, 두번째 location block을 추가하자.


location /images/ {
  root /data;
}


/images/(location /도 해당 request와 일치하지만 prefix는 더 짧다)으로 시작하는 request와 일치할 것이다.


server block의 conf는 다음과 같아야 한다.


server {
  location / {
      root /data/www;
  }
   
  location /images/ {
      root /data;
  }
}


이것은 이미 표준 포트 80에서 듣고 로컬 컴퓨터 http://localhost/에서 접근할 수 있는 서버의 작동 중인 구성이다. /images/로 시작하는 URIs의 요청에 대한 응답으로 서버는 /data/images 디렉토리에서 파일을 전송한다.



예를 들어 http://localhost/images/example.png 요청에 대한 응답으로 nginx는 /data/images/example.png 파일을 전송할 것이다. 이러한 파일이 존재하지 않으면 nginx는 404 오류를 나타내는 오류를 보낼 것이다. /images/로 시작하지 않는 URI를 사용한 요청은 /data/www 디렉토리에 매핑된다.



예를 들어 http://localhost/some/example.html요청에 대한 응답으로 nginx는 /data/www/some/example.html파일은 보낼 것이다.



새 구성을 적용하려면 아직 시작되지 않은 경우 nginx를 시작하거나 다음을 실행하여 nginx의 마스터 프로세스에 다시 load 신호를 전송하자.


nginx -s reload


예상대로 작동하지 않는 경우 /usr/local/nginx/logs 또는 /var/log/nginx 디렉토리의 access.logerror.log에서 이유를 찾아보자.




* Reference

http://nginx.org/en/docs/beginners_guide.html


반응형