Nginx config 파일은 nginx.conf
이며 다음 경로 중 하나에 존재한다.
nginx에서 실제로 작업을 수행하고 response 를 return 하는 process는 master prcoess
가 아닌 worker process
이다.
nginx의 process는 모든 request를 asynchronously 하게 처리합니다.
Nginx에서는 커넥션 형성과 제거, 새로운 요청을 처리하는 것을 이벤트(event)라고 부른다.
upstream
를 통해서 nginx server 부하를 분산한다.
weight(default=1)
개매변숫값에 따라서 요청 부하를 조절 할 수 있는데, 아래의 경우 example.com
에 10.9.8.7
보다 2배 더
많은 요청량이 전달된다. primary server 두 대에 문제가 발생해 연결이 불가능한 경우 backup
server 로 요청이 전달된다.
upstream backend {
server 10.9.8.7:80 weight=1;
server example.com:80 weight=2;
server spare.example.com:80 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
max_fails
, fail_timeout
을 통해서 요청이 들어왔을 때 요청을 보내기 전에 health check 를 진행 할 수 있다.
max_fails
의 기본값은 1회, fail_timeout
의 기본값은 10s 이다.
upstream backend {
server example.com:80 max_fails=3 fail_timeout=3s;
}
nginx configuration 파일은 적어도 하나의 서버를 포함해야한다.
nginx 에게 request 가 오면, nginx 는 일단 http header 의 Host 부분을 확인한다.
거기서 이 request 가 어느 domain (또는 IP) 로 가려고 하는지 확인하고, 그에 해당하는 virtual host 로 보낸다.
이 virtual host 에 해당하는 것이 nginx 의 configuration 에 설정하는 server
이다.
server {
# server config
}
server
설정은 주로 listen
을 통해서 port 또는 IP addr & port 를 받는다.
server {
listen 127.0.0.1:8080;
...
}
여기에서 포트가 생략되면, standard port 가 사용된다. 주소가 생략된다면 서버는 모든 주소들로부터 요청을 받는다.
listen
설정 자체가 없다면, "standard" port 는 80/tcp
, "default" port 는 8000/tcp
가 된다.
default_server 는 server 라는 명칭을 사용하지만, 실제로 여기서 의미하는 바는 default port 라고 보면 된다. default_server 표시가 없을 때는 기본적으로 가장 먼저 정의된 server 가 default_server 가 된다.
server {
listen 80 default_server
server_name www.example.com
}
nginx 는 location
을 통해서 요청 URI에 따라 traffic 을 다른 프록시들에 보내거나 다른 파일들을 제공할 수 있다.
# "/"
location = / {
...
}
# "/index.html"
location / {
...
}
# "/some/path/index.html"
location /some/path {
...
}
일반적인 사용자들의 접근을 차단하려면 basic auth 를 사용하는 방법이 있다.
location / {
auth_basic "auth";
auth_basic_user_file conf/htpasswd;
http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
root
와 alias
를 통해서 전달받은 요청에 대한 처리 경로를 지정한다.
# /home/cha/p/test/nginxTest/test 에서 요청 처리
location /test {
root /home/cha/p/test/nginxTest
}
# /home/cha 에서 요청 처리
location /test {
alias /home/cha
}
allow, deny 를 통해서 특정 ip 를 허용 및 차단 할 수 있다.
아래와 같은 whitelist 방식을 사용하여 특정 ip 를 제외한 모든 ip 를 차단 할 수 있다.
허용: 111.111.111.11
차단: 111.111.111.11 를 제외한 모든 ip
server {
...
location / {
allow 111.111.111.11;
deny all;
}
...
}
아래와 같이 특정 port 를 사용하도록 지정 할 수 있다.
server {
listen 80 default_server;
}
~
기호는 대소문자를 구분하는 기호로 사용된다. ^ 와 $ 를 사용해 시작과 끝을 지정 할 수 있다.
아래와 같이 정규표현식을 통해서도 표현이 가능하다.
location ~ ^/admin$ {
}
대소문자를 구분하지 않으려면 ~*
기호를 사용하면 된다.
proxy_pass
를 통해서 요청을 전달할 수 있다.
아래 설정은 /img/ 로 들어오는 요청 이외의 요청들은 모두 http://www.example.com 으로 전달하고 응답값을 반환한다.
server {
location /img/ {
root /data;
}
location / {
proxy_pass http://www.example.com
}
}
/etc/nginx/conf.d/
경로에 config 파일이 존재할 경우 추가적인 include 없이 자동으로 설정이 적용된다.
server {
...
include mime.types;
include vhosts/*.conf;
}
[nginx include]
http://nginx.org/en/docs/ngx_core_module.html#include
https://www.educba.com/nginx-include/