[컴][웹] nginx 설정 - server

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

aliaslocation 값을 치환하는 값이다.

location /i/ {
    alias /data/w3/images/;
}

“/i/top.gif” 라는 요청이 들어오면 /data/w3/images/top.gif 가 전송되게 된다.

See Also

  1. The Architecture of Open Source Applications (Volume 2): nginx

Reference

  1. How nginx processes a request
  2. linux - What is the different usages for sites-available vs the conf.d directory for nginx - Server Fault
  3. Understanding the difference between the root and alias directives in Nginx - Techcoil Blog

댓글 없음:

댓글 쓰기