Nginx에 대해서

Nginx에 대해서

생성일
Oct 28, 2024 10:23 AM
최종 편집 일시
Last updated October 28, 2024
태그
BE

Nginx?

고성능 HTTP 서버이자 리버스 프록시, 로드 밸런서, 정적 콘텐츠 서버로 사용되는 소프트웨어다.
웹 애플리케이션을 효율적으로 전달하기 위한 다양한 기능을 제공한다.

동작 원리

Nginx는 이벤트 기반 비동기 방식으로 동작한다. 일반적으로 다수의 요청을 처리할 때 서버는 요청마다 스레드를 생성하게 되며, 이는 많은 메모리와 CPU를 소비한다.
반면 Nginx는 이벤트 루프와 비동기 I/O 방식을 통해 요청당 스레드 생성이 아닌 단일 스레드에서도 다수의 요청을 비동기적으로 처리할 수 있도록 설계되었다.
이 때문에 메모리와 CPU자원을 절약하면서 높은 성능을 발휘할 수 있다.

정적 컨텐츠 제공

nginx의 기본적인 설정 파일은 nginx.conf 이다.
/usr/local/nginx/conf, /etc/nginx, /usr/local/etc/nginx 의 경로를 뒤져보면 나온다.
http { server { location / { root /data/www; } location /images/ { root /data/images; } } }
이런식으로 설정파일이 작성되어 있다고 하면 http://localhost/ 서버에 접속할 수 있다.
만약 http://localhost/images/1.jpg 와 같은 요청을 받는다면 /data/images/1.jpg 경로의 파일을 전송한다.
/images/ 가 포함되지 않은 요청을 받는다면 /data/www/ 아래의 파일을 전송한다.
 

프록시

보안 상의 문제로 직접 통신을 주고받을 수 없는 두 PC 사이에서 통신을 할 때 직접하지 않고 중간에서 대리하는 개념이 프록시다.
프록시는 서버의 위치에 따라 Forward Proxy와 Reverse Proxy로 나뉜다.

Forward Proxy

서버에게 클라이언트가 누구인지 감춰주는 역할을 한다.
클라이언트가 서버에 직접 요청하지 않고 프록시 서버를 거쳐서 요청하기 때문에 서버가 받는 IP는 클라이언트의 IP가 아니라 프록시 서버의 IP가 된다. 따라서 누가 요청했는지 정확히 알 수 없다.
Forward Proxy에는 캐싱 기능이 있기 때문에 자주 요청되는 컨텐츠에 대해서는 성능 향상을 가져올 수 있다고 한다.
또한 특정 사이트에만 접근가능하게 하는 설정도 할 수 있으므로 보안 장치의 역할도 할 수 있다고 한다.

Reverse Proxy

애플리케이션 서버의 앞에 위치한다.
클라이언트가 서버에 요청할 때 Reverse Proxy를 호출하고 이 프록시가 서버로부터 응답을 전달받아 다시 클라이언트에게 전송하는 역할을 한다.
따라서 리버스 프록시는 반대로 애플리케이션 서버를 감춰주는 역할을 한다.
http { server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif/jpg/png)$ { root /data/images; } } }
위와 같은 설정을 하게 되면 .gif 또는 .jpg 또는 .png 로 끝나는 요청을 필터링하고 해당 요청은 /data/images/ 아래에 있는 파일들과 매핑하여 응답한다.
그 외의 요청은 8080포트에서 돌아가고 있는 백엔드 서버로 보낸다.