nginx config

Younghwan Cha·2022년 10월 18일
0

nginx

목록 보기
2/7
post-thumbnail

path

Nginx config 파일은 nginx.conf 이며 다음 경로 중 하나에 존재한다.

  • /usr/local/nginx/conf/nginx.conf
  • /etc/nginx/nginx.conf
  • /usr/local/etc/nginx/nginx.conf

worker process

nginx에서 실제로 작업을 수행하고 response 를 return 하는 process는 master prcoess가 아닌 worker process 이다.

nginx의 process는 모든 request를 asynchronously 하게 처리합니다.

event

Nginx에서는 커넥션 형성과 제거, 새로운 요청을 처리하는 것을 이벤트(event)라고 부른다.

upstream


upstream 를 통해서 nginx server 부하를 분산한다.
weight(default=1) 개매변숫값에 따라서 요청 부하를 조절 할 수 있는데, 아래의 경우 example.com10.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;
    }
}

부하분산

  • least_conn
  • least_time
  • generic_hash
  • random
  • ip_hash

health check

max_fails, fail_timeout 을 통해서 요청이 들어왔을 때 요청을 보내기 전에 health check 를 진행 할 수 있다.
max_fails 의 기본값은 1회, fail_timeout 의 기본값은 10s 이다.

upstream backend {
    server example.com:80 max_fails=3 fail_timeout=3s;
}

server


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

default_server 는 server 라는 명칭을 사용하지만, 실제로 여기서 의미하는 바는 default port 라고 보면 된다. default_server 표시가 없을 때는 기본적으로 가장 먼저 정의된 server 가 default_server 가 된다.

server {
	listen 80 default_server
    server_name www.example.com
}

location

nginx 는 location 을 통해서 요청 URI에 따라 traffic 을 다른 프록시들에 보내거나 다른 파일들을 제공할 수 있다.

# "/"
location = / {
	...
}

# "/index.html"
location / {
	...
}

# "/some/path/index.html"
location /some/path {
	...
}

Basic Auth

일반적인 사용자들의 접근을 차단하려면 basic auth 를 사용하는 방법이 있다.

location / {
	auth_basic "auth";
    auth_basic_user_file conf/htpasswd;

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

경로

rootalias 를 통해서 전달받은 요청에 대한 처리 경로를 지정한다.

# /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 지정

아래와 같이 특정 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
    }
}

include

/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/


https://ubiq.co/tech-blog/change-nginx-port-number-ubuntu/

profile
개발 기록

0개의 댓글