본문 바로가기
Programming/Server

[NGINX] 이것저것

by { 큐 } 2017. 1. 23.

NGINX는 웹 서버 소프트웨어로, 정적인 파일 HTML, CSS, 이미지, PDF 등을 처리해주고 리버스 프록시, 메일 프록시 기능도 해준다.


nginx의 설정을 바꾸려면 /etc/nginx/nginx.conf를 가면 된다. nginx 설정은 보통 3블럭으로 나뉘는데 다음과 같다.

http {

...


server {

...


location {

...

}

}

}

HTTP 블록


루트 블록이다. 기본 설정, 로그 설정, Gzip 설정 등등 설정 사항이 있다. 크게 바꿀 일은 없는 듯 하다.


SERVER 블록


특정 타입의 요청을 처리하는 가상 서버를 정의한다. 요청 들어오는 도메인 이름, 포트, IP에 따라서 여러 개의 서버로 라우팅 시킬 수 있다. 

예를 들면 A라는 인스턴스가 호스팅 되고 있는데, http://www.foo.com/ 과 http://www.bar.com의 도메인을 동시에 갖다면, foo로 들어왔을 때와 bar로 들어왔을 때 각각 다른 웹페이지를 보여줄 수 있도록 설정할 수 있다는 것이다.


LOCATION 블록


이 부분은 한 서버 내에서 어떤 URI를 갖느냐에 따라 각각 그에 맞는 경로를 지정해 주는 것이다. 굉장히 유동적으로 설정할 수 있기 때문에 관리자 맘대로 지정할 수 있다.





proxy_pass : http를 사용하여 통신할 수 있는 단일 서버에 요청을 전달한다. 주로 location 블록 내에 있다. proxy_pass와 일치하는 요청이 들어오면 해당하는 url로 이동하게 된다. 예를 들어

location /foo/bar {

proxy_pass http://www.abc.com;

}

이렇게 설정이 되어 있다면, 뒤에 uri가 설정되어 있지 않기 때문에 클라이언트가 요청한 uri는 그대로 간다. /foo/bar/baz로 요청이 들어오면 http://www.abc.com/foo/bar/baz가 된다.


그런데, 

location /foo/bar {

proxy_pass http://www.abc.com/lorem/ipsum;

}

이렇게 되어 있다면, /foo/bar/baz로 요청이 들어오면 http://www.abc.com/lorem/ipsum/baz가 된다는 것이다. 








에러 메시지 1)

could not build the server_names_hash, you should increase server_names_hash_bucket_size: 64

도메인 제한 길이가 64로 짧기 때문에 server_name_hash를 생성할 수 없다는 메시지이다. default로 32 혹은 64로 설정되어 있나보다. 이럴 땐

http {
    server_names_hash_bucket_size 64
}

접속할 수 있는 도메인의 최대 길이를 정한다.




에러 메시지 2)

413 Request Entity Too Large

파일 업로드를 하거나 할 때 한 번에 요청으로 실행할 수 있는 처리 용량이 너무 작을 경우 나게 되는 경우이다. 이럴 때는 다음과 같이 설정을 해준다.

server { client_max_body_size 20M; }

20M 대신에 다른 숫자를 넣어도 상관은 없다.



참고가 되었던 곳

https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms