Nginx Config
Nginx의 Config를 분석한다.
1. Nginx Config
| |
| |
| |
| |
nginx.conf 파일은 Nginx 주요 설정이 포함되어 있는 파일이다. [File 1]은 nginx.conf 예제를 나타내고 있으며, [File 2 ~ 4]를 Include하고 있다. [File 1 ~ 4]의 설정 내용을 분석한다.
1.1. nginx.conf Top
| |
user: Nginx Worker Process의 User를 의미한다. Worker Process의 권한을 설정할때 이용한다.worker-processes: Nginx Worker Process의 개수를 의미한다. 기본값은 1이다.error-log: Nginx Error Log의 경로를 의미한다.pid: Nginx Master Process의 PID가 저장되는 Log의 경로를 의미한다.worker-rlimit-nofile: Nginx Worker Process가 이용할 수 있는 최대 File Desciptor의 개수를 의미한다. 일반적으로 Worker Process 갖을 수 있는 최대 Connection 개수의 2배를 설정한다. 기본값은 1024이다.
1.2. events Block
| |
events Block은 Network Connection 처리 관련 설정을 포함한다.
worker-connections: Nginx Worker Process가 동시에 갖을 수 있는 최대 Connection의 개수를 의미한다.
1.3. http Block
http Block은 HTTP, HTTPS 관련 설정을 포함하고 있다.
1.3.1 http Block Top
| |
include mime.types: [File 2]를 Include 한다. Nginx에서 이용하기 위한 MIME(Multipurpose Internet Mail Extensions)를 설정한다. MIME은 Image와 영상과 같은 파일을 Text 형태로 전송하기 위한 Encoding/Decoding 기법을 의미한다.include proxy.conf: [File 3]을 Include 한다. Nginx의 Reverse Proxy 관련 설정을 적용한다.include fastcgi.conf: [File 4]를 Include 한다. FastCGI 관련 설정을 적용한다.index: Index Page를 의미한다.
| |
default-type: Default MIME를 의미한다.log-format: HTTP, HTTPS 처리 Log의 format을 의미한다. 기본값은text/plain이다.access-log: HTTP, HTTPS 처리 Log의 경로를 의미한다.sendfile: Static File (Image, Video) 전송시sendfile()System Call 이용 유무를 의미한다.sendfile()System Call은 2개의 File Descriptor 사이의 Data 전송시 Kernel Level 안에서만 Zero Copy를 기반으로 수행하기 때문에 기존의read()/write()System Call에 비해서 빠르다.tcp-nopush:sendfile()System Call 이용시 TCP Socket에TCP-CORK설정 유무를 의미한다.TCP-CORK은 TCP Socket으로 Packet 전송시 Packet을 TCP Socket Buffer에 모았다가 한번에 보내도록 설정한다.sendfile on으로 설정되어 있을 경우에만 의미있다.server-names-hash-bucket-size: Nginx에 등록할 수 있는 최대 Server Name의 개수를 의미한다.
| |
proxy-redirect: Nginx의 Proxied Server로부터 받은 Response의 HTTPLocation,RefreshHeader를 변경유무를 의미한다. HTTPLocationHeader는 Resource의 위치가 변경되었을때 변경된 Resource의 URL을 갖고 있는 Header이다. HTTPRefreshHeader는 Client가 Refresh를 하도록 명령하는 Header이다.proxy-set-header Host: HTTPHostHeader를 설정한다. HTTPHostHeader는 어느 Virtual Host (Server)에 의해서 처리되었는지를 저장하는 Header이다.proxy-set-header X-Real-IP: HTTPX-Real-IPHeader를 설정한다. HTTPX-Real-IPHeader는 Client의 IP 정보를 저장하는 Header이다.proxy-set-header X-Forwarded-For: HTTPX-Forwarded-ForHeader를 설정한다. HTTPX-Forwarded-ForHeader는 Client의 IP 정보를 저장하는 Header이다.client-max-body-size: 허용되는 Client Request의 최대 Body Size를 의미한다.client-body-buffer-size: Client Request의 Body를 위한 Read Buffer의 크기를 의미한다.
| |
proxy-connect-timeout: TCP Connection이 구축되는데 필요한 최대 대기 시간을 의미한다.proxy-send-timeout: Proxied Server에 Client의 Request를 전송하는데 필요한 최대 대기 시간을 의미한다.proxy-read-timeout: Proxied Server로부터 Response를 수신하는데 필요한 최대 대기 시간을 의미한다.proxy-buffers: Proxied Server와의 Connection 한개당 이용하는 Read Buffer의 크기를 의미한다. 순서대로 Buffer의 개수와 각 Buffer의 크기를 의미한다.
1.3.2. http Block server Block
하나의 server Block은 하나의 Virtual Server를 의미한다. Virtual Server는 Apache HTTP Server의 Virtual Host와 동일한 의미를 갖는다.
| |
FastCGI를 이용하는 PHP Application의 Reverse Proxy로 동작하도록 설정되어 있다.
listen: Virtual Server의 Listen Port를 의미한다.server-name: Virtual Server의 이름을 의미한다. 주로 Domain 이름으로 설정한다.access-log: Virtual Server 관련 Log의 경로를 의미한다.locationBlock : FastCGI를 이용하는 PHP Application을 이용하도록 설정되어 있다.
| |
Reverse Proxy로 동작하도록 설정되어 있다.
- First
locationBlock :root경로의 Static File들을 제공하도록 설정되어 있다. - Second
locationBlock :127.0.0.1:8080Port의 Reverse Proxy로 동작하도록 설정되어 있다.
| |
Load Balancing을 수행하는 Reverse Proxy로 동작하도록 설정되어 있다.
upstreamBlock : Nginx가 수행하는 Load Balancing으로 인해서 분배될 Packet이 전달되는 Target Server들을 의미한다.locationBlock :upstreamBlock에서 설정한 Load Balancing Target Server들을 이용하여 Load Balancing을 수행하도록 설정되어 있다.
2. 참조
- NGINX Full Example Configuration : https://www.nginx.com/resources/wiki/start/topics/examples/full/
- Nginx worker_rlimit_nofile : https://stackoverflow.com/questions/37591784/nginx-worker-rlimit-nofile