nginx configuration server / nginx 동작 원리 / nginx request 처리 원리 / 처리 방법
server
nginx.conf 에서 설정하는 server 에 대해 알아보자. 일반적인 nginx 의 설정에 대한 설명은 여기를 참고하자.
nginx 의 동작, virtual host
nginx 에게 request 가 오면, nginx 는 일단 http header 의 Host 부분을 확인한다. 거기서 이 request 가 어느 domain (또는 IP) 로 가려고 하는지 확인하고, 그에 해당하는 virtual host 로 보낸다.이 virtual host 에 해당하는 것이 nginx 의 configuration 에 설정하는 server 이다.
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name example.net www.example.net;
...
}
default_server
default_server 는 server 라는 명칭을 사용하지만, 실제로 여기서 의미하는 바는 default port 라고 보면 된다. 어차피 하나의 서버는 port 를 한개이상 가져야만 하니 같은 의미로 쓰여도 무리는 없을 듯 하다.위와 같이 listen 80 뒤에 default_server 표시가 없을 때 기본적으로 가장 먼저 정의된 server 가 default_server 가 된다. 그렇지 않으면 아래처럼 설정해 줄 수 있다.
server {
listen 80 default_server;
server_name example.net www.example.net;
...
}
여러 ip 에서 nginx 로 request 가 오는 경우에
아래처럼 listen 에 ip 가 같이 설정되어 있으면, nginx 에 request 가 왔을 때 nginx 는 먼저 request 의 ip address 와 port 를 확인하고, 해당하는 virtual host를 찾는다. 그리고 난 후에 Host header field 를 확인해서 해당하는 server_name 이 있는 virtual host 를 선택하게 된다. 만약 해당하는 server_name 이 없으면 default_server 를 이용하게 된다.
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name example.com www.example.com;
...
}
server_name 이 없는 경우 port 마다 다른 default_server 값을 설정
80 과 8080 port 로 들어오는 모든 request 를 처리하는데, server_name 과 HOST header field 가 일치하는 vhost 를 이용한다. 그러나 만약 HOST header field 와 일치하는 녀석이 없는 경우에 port 마다 다른 default_server 를 사용하게 된다.
server {
listen 80 default_server;
listen 8080;
server_name example.org www.example.org;
...
}
server {
listen 80;
listen 8080 default_server;
server_name example.net www.example.net;
...
}
Host header field 가 없을 때 status 444 를 response 하는 설정
server {
listen 80;
server_name ""; # 0.8.48 버전 이후는 기본값이라 생략가능. 이전에는 기본값이 machine's hostname
return 444;
}
root
root
directive 는 server
또는 location
안에서 쓴다. http
안에 넣으면 동작을 안한다.
server
block 안에 넣으면 같은 server안에 있는 모든 location
에 적용된다.
참고로 centos 8.0 에서 root 가 정의되어 있지 않은 경우 기본값은 /etc/nginx/html
이었다.
alias
alias 는 location
값을 치환하는 값이다.
location /i/ {
alias /data/w3/images/;
}
“/i/top.gif” 라는 요청이 들어오면 /data/w3/images/top.gif
가 전송되게 된다.
댓글 없음:
댓글 쓰기