이번글에서는 Nginx의 Load Balancer를 사용해 traffic을 분산시키는 방법에 대해 알아보도록 하겠습니다. 1. Load Balancer란? multiple client의 request를 multiple server에 distribute해 각 서버별 load를 분산시키는 기능입니다. 만약 load balancer에 연결된 server 중 특정 server가 down 되는 경우, 해당 server로의 traffic을 가용한 server로 redirect 합니다. (redundancy) load balancer는 이전 글에서 살펴본 reverse proxy와 함께 사용됩니다. 😎 2. Setting Load Balancer Nginx에 load balancer를 적용해보겠습니다. 먼저, 아래와..
이번글에서는 Nginx의 reverse proxy에 대해 알아보도록 하겠습니다. 1. Reverse Proxy란? Nginx가 클라이언트로부터 전달받은 요청을 어플리케이션 서버에 전달한 뒤, 어플리케이션 서버가 반환한 결과값을 다시 클라이언트에게 전달하는 방법입니다. 이를 통해 클라이언트는 모든 reqeust의 요청과 응답을 어플리케이션 서버가 아닌 Nginx를 통해 수행하게 됩니다. 2. Setting Reverse Proxy 이번글에서는 nginx와 php 서버를 사용해 Reverse Proxy를 구성해보도록 하겠습니다. 이번글에서 사용할 nginx.conf는 다음과 같습니다. nginx.conf events {} http { server { listen 80; location / { return 2..
이번글에서는 Let's Encrypt를 사용해 Nginx에 무료로 SSL 인증서를 설치하는 방법에 대해 알아보도록 하겠습니다. 1. Let's Encrypt란? 보안 웹사이트를 위한 인증서의 수동 생성, 유효성 확인, 디지털 서명, 설치, 갱신 등 종전의 복잡한 과정을 없애주는 자동화된 프로세스를 통해 전송 계층 보안(TLS) 암호화를 위해 무료 X.509 인증서를 제공하는 인증 기관입니다. (https://ko.wikipedia.org/wiki/Let's_Encrypt) 이 프로젝트는 SSL 인증서의 비용으로 인해 HTTPS 적용을 망설이는 사용자들에게 SSL 인증서를 무료로 발급해 HTTPS를 널리 보급하기위해 시작되었습니다. URL : https://letsencrypt.org/ko/ Let's E..
이번글에서는 nginx의 보안성을 강화할 수 있는 몇가지 방법에 대해 알아보도록 하겠습니다. 1. Hardening Nginx response data에 nginx의 version을 숨기는 방법입니다. nginx은 지속적으로 관리되고 업데이트되는 오픈소스 프로젝트입니다. 따라서 주기적으로 이전 버전에 대한 bug fix및 보안이슈 등을 개선하며, 해당 내용을 http://nginx.org/ 에 게시하고 있습니다. 하지만 만약 nginx server의 보안 취약점이 발견됬음에도 불구하고 최신 version으로 업데이트 하지 않았다면, 악의적인 공격자들은 이전 version의 보안구멍을 이용해 공격을 시도할 수 있습니다. 따라서 nginx 관리자는 주기적으로 nginx의 version을 최신화할뿐만아니라, ..
이번글에서는 nginx의 basic auth를 사용해 인가된 사용자에게만 접근을 허용하는 방법에 대해 알아보도록 하겠습니다. 1. Basic Auth란? nginx에서 가장 손쉽게 사용자 접근을 제한하는 방법입니다. 만약, 일반 사용자들에게는 접근을 허용하지 않아야되는 url가 있다면 basic auth를 사용해 손쉽게 인가되지 않은 사용자들의 접근을 제한할 수 있습니다. 2. .htpasswd nginx에 basic auth를 적용하기위해선 simple password file인 .htpasswd 파일을 생성해야 합니다. .htpaaswd 파일을 생성하기위해 먼저 아래의 명령어로 apache bench tool을 다운로드 받습니다. # download apache bench tools yum insta..
이번글에서는 nginx의 Rate Limiting을 사용해 incoming connection을 제한하는 방법에 대해 알아보도록 하겠습니다. 1. Rate Limiting이란? incoming connection에 대한 rate를 제한하는 기능입니다. 예를 들어 너무 많은 connection이 동시에 발생해 server에 부담이 가는 경우, 정의한 rate limit을 초과한 connection은 reject 할 수 있습니다. rate limiting을 사용하면 특정 incoming connection을 제한하거나 manage 할 수 있습니다. rate limiting을 사용하는 이유는 다음과 같습니다. • Security : 동일 ip에 대한 반복적인 incoming connection을 제한해 bru..
이번글에서는 nginx의 HTTPS를 사용해 보안성을 향상시키는 방법에 대해 알아보도록 하겠습니다. 1. HTTPS란? HTTP의 보안성을 강화한 차세대 프로토콜입니다. HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화합니다. 따라서 데이터의 적절한 보호를 보장합니다. HTTPS의 기본 TCP/IP 포트는 443입니다. 😎 2. HTTPS 적용하기 이전 글(https://velog.io/@minholee_93/Nginx-HTTP2)에서 우리는 Self Signed SSL을 사용해 HTTPS 통신을 하는 방법에대해 간단히 알아보았습니다. 이번 글에서는 HTTPS에 대해 좀더 자세히 알아보고, Nginx의 HTTPS를 optimize 하는 방법에..
이번글에서는 nginx에서 HTTP/2를 사용해 성능을 향상시키는 방법에 대해 알아보도록 하겠습니다. 1. HTTP/2란? 기존의 HTTP/1.1을 개선한 차세대 HTTP 프로토콜입니다. 2. HTTP/1.1 vs HTTP/2 HTTP/1.1과의 차이점은 아래와 같습니다. 2-1) binary protocol HTTP/2는 binary protocol을 사용해 데이터를 전송함으로써 기존의 HTTP/1.1보다 월등히 compact하게 data를 전송합니다. 또한, 이를 통해 data transfer 중에 일어날 수 있는 error를 최소화할 수 있습니다. 반면에 기존의 HTTP/1.1은 textual protocol입니다. 2-2) compressed header HTTP/2은 comprssed heade..
이번글에서는 nginx의 fastCGI cahce를 사용해 성능을 향상시키는 방법에 대해 알아보도록 하겠습니다. 1. FastCGI Cache란? nginx의 simple server side cache 방법입니다. nginx의 FastCGI Cache 사용해 dynamic language의 response를 저장해 놓으면, server side language process를 최소화시켜 서비스의 성능 향상 및 server의 부하를 감소시킬 수 있습니다. 예를 들어 위와 같이 client가 요청한 작업의 결과물을 php와 같은 server side process가 response할 경우, nginx는 해당 response 값을 client에 전달하기전에 Cache라고 불리는 memory에다 저장해놓을 수..
이번글에서는 static resource의 delivery 성능을 향상시키는 방법에 대해 알아보도록 하겠습니다. 1. Compressed Response란? response data를 압축해서 return 하는 방법입니다. 예를 들어 client가 nginx에 static resource를 request 할때 자신들은 compressed data를 accept 할 수 있다고 indicate 할 수 있습니다. 그렇다면 nginx는 아래와 같이 static response를 압축해서 client 한테 전달합니다. 이후 client browser에서 compressed data를 unzip 해서 rendering 하는 것은 automatic 하게 처리하기 때문에 nginx에서는 해당 부분은 고민할 필요가 없습..
이번글에서는 Nginx에서 response data에 header를 추가하는 방법에 대해 알아보도록 하겠습니다. 1. Expires Header란? nginx는 expires header를 통해 client에게 response data를 얼마나 오랫동안 client의 browser에 cache할 것인지를 알려줍니다. 예를 들어 이미지 파일과 같은 static file들은 자주 변경되지 않기 때문에 nginx는 client의 browser에게 비교적 긴 시간동안 해당 파일들을 본인들의 local browser에 cache해 놓을 것을 요청합니다. 이를 통해 향후 동일한 이미지에 대한 request를 browser의 cache로 대체함으로써 전체 service의 성능 향상을 꾀할 수가 있습니다. 반대로 da..
이번글에서는 Nginx에 dynamic module을 추가하는 방법에 대해 알아보도록 하겠습니다. 1. Dynamic Module이란? nginx의 module에는 defualt module인 static과 추가적으로 사용할 수 있는 dynamic moudle이 있습니다. 이전글 https://velog.io/@minholee_93/Nginx-Overview-Install 에서 설명드렸다 싶이 Nginx를 source code version으로 install 하면 여러가지 dynamic module을 손쉽게 추가해 사용할 수 있습니다. 현재 nginx에 설치된 module은 다음의 명령어로 확인할 수 있습니다. nginx -V 현제 제 nginx에는 static moudle들만 설치되어 있습니다. ins..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 11. Buffer & Timeout 이번글에서는 buffer와 timeout을 적절히 사용해 ngimx의 performance를 증가시키는 방법에 대해 알아보도록 하겠습니다. 11-1) buffer 먼저 buffer란 nginx와 같은 process가 ram으로 부터 데이터를 읽거나 쓰는 것을 의미합니다. 예를 들어 nginx는 http로 들어온 request를 먼저 buffer에 저장하고 처리합니다. 만약 buffer에 여유가 없을 경우 hard disk와 같은 곳에 저장해놓기도 합니다. 동일하게 reponse 값도 client에게 reutrn하기 전에 먼저 buffer에 저장된 후 nginx는 buffer에서 데이터..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 10. Worker Process nginx에서 실제로 작업을 수행하고 response를 return 하는 process는 master prcoess가 아닌 worker process입니다. 저의 nginx는 default 값으로 1개의 master process와 1개의 worker process를 사용하고 있습니다. 이번글에서는 이 중 worker process에 대해 알아보고 조작하는 방법에 대해 살펴보도록 하겠습니다. 10-1) change worker process number worker process의 숫자를 변경하고 싶다면 nginx.conf를 변경하면 됩니다. 아래와 같이 nginx.conf를 열어 가장 ..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 9. Logging Nginx는 access & error log를 기본으로 제공합니다. log는 nginx뿐만아니라 많은 service에서 error를 tracking 하거나 user의 행동들을 분석하는데 주요하게 사용되므로, 이번글에선 nginx의 logging system을 어떻게 관리하고 조작하는지 알아보도록 하겠습니다. 저의 nginx default log path는 /var/log/nginx 입니다. 9-1) access log access log는 모든 nginx에 대한 접근을 기록합니다. 기존에 쌓여있던 log를 비우고 /thumb.png로 접근해보겠습니다. clear log access 이후에 access..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 7. Try Files try files은 server & location context에서 사용합니다. try files은 rewrite와 비슷하게 모든 request에 대해 일치하는 path를 앞에서 부터 순서대로 비교한뒤 root에 존재하는 path를 rewrite 하는 명령어입니다. server { listen 80; server_name 54.180.79.141; root /sites/demo; try_files /thumb.png /greet; location /greet { return 200 "Hello User"; } } 예를 들어 위와 같이 try_files를 작성하면 호출되는 모든 request에 순서..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 5. Redirect 우리가 이전글에서 사용했던 location 은 return 을 사용해 특정 uri의 request에 대한 결과값을 전달했습니다. # return location /hello { return 200 "Hello World"; } 위와 같은 return statement는 state code + response data 로 이루어져 있으며, 아래와 같이 정적인 string 값을 return 하는 경우의 state code는 200입니다. return 만약 정적인 값이 아닌 또다른 uri를 return 하는 경우에 state code는 307이며 이를 redirect 라고 합니다. redirect 예를들어..
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 3. Location Blocks location은 specific uri에 대한 behavior를 정의하며 server 내부에 작성합니다. location block은 nginx.conf 에서 가장 많이 사용되는 configuration 이며, 기본적인 구조는 다음과 같습니다. location structure server { location uri { // hadnle response } } 아래의 예시는 /greet request를 받은 경우 return 값으로 repsonse code로 200을 response data로 string을 넘겨줍니다. nginx.conf events { } http { include ..
이번글에서는 Nginx의 configuartion에 대해 알아보도록 하겠습니다. 1. nginx.conf nginx의 configuration을 관리하는 파일입니다. 저의 nginx conf 파일은 /etc/nginx/ 에 위치하고 있습니다. 이 nginx.conf 파일을 수정해 nginx의 configuartion을 변경할 수 있습니다. 처음 nginx을 다운받으면 아래와 같이 default configuartion이 작성되어 있습니다. nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/ng..
이번글에서는 차세대 web server인 Nginx에 대해 알아보고, 설치하는 과정까지 진행해보도록 하겠습니다. 1. Nginx란? high performance & high concurrency & low resource usage 를 자랑하는 web server 입니다. Nginx는 apache의 성능에 좌절한 어느한 개발자가.. 동시에 최대 10,000건의 concurrent connections 까지 처리할 수 있도록 개발한 차세대 web server 입니다. 이러한 Nginx는 reverse proxy server로도 사용가능합니다. 2. Apache vs Nginx 그렇다면 apache와 비교해 nginx이 다른점은 무엇일까요? 먼저 apache는 prefork로 구성된 web server입니..