AWS EC2 인스턴스 하나에 여러개의 어플리케이션을 운영하고, 이를 특정 URL로 들어왔을때 80번 포트를 통해서 연결해주기 위해 Nginx를 통해 프록시 서버를 구성해보았습니다. Nginx가 무엇인지와 프록시 서버 구성에 대해서 알아보도록 하겠습니다.
1. Nginx란?
1. 웹서버는 다른 말로 HTTP Server라고도 부릅니다. 웹브라우저의 카운터 파트너로서 서버 쪽에서 정보를 제공하는 소프트웨어를 의미합니다. 대표적인 웹서버는 Apache가 있습니다.
2. http란 웹서버와 웹클라이언트가 서로 정보를 주고 받기 위한 약속(protocol)입니다. 즉 요청은 어떻게 해야하고, 응답은 어떻게 해야하는지에 대한 규칙을 미리 정해둔 것입니다.
3. 엔진엑스는 새로운 시대의 요청에 부응해서 만들어진 웹서버입니다. 개발의 모든 목적이 높은 성능에 맞춰져 있습니다. 그리고 잘 사용하지 않는 기능은 과감하게 제외했습니다. 그 덕분에 폭발적인 증가세에 있는 인터넷 서비스를 지탱하는데 적합합니다. Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이것은 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적입니다. 이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해줍니다.
2. 프록시(Proxy Server)란?
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터나 응용 프로그램을 말합니다. 서버와 클라이언트 사이에서 중계기로서 대리로 통신을 수행하는 기능을 가리켜 '프락시', 그 중계 기능을 하는 것을 프락시 서버라고 부릅니다. 프락시 서버는 프락시 서버에 요청된 내용들을 캐시를 이용하여 저장해 둡니다. 이렇게 캐시를 해 두고 난 후에, 캐시 안에 있는 정보를 요구하는 요청에 대해서는 원격 서버에 접속하여데이터를 가져올 필요가 없게 됨으로써 전송 시간을 절약할 수 있게 됨과 동시에 불필요하게 외부와의 연결을 하지 않아도 된다는 장점을 갖게 됩니다. 또한 외부와의 트래픽을 줄이게 됨으로써 네트워크 병목 현상을 방지하는 효과도 얻을 수 있게 됩니다.
3.Nginx 설치
nginx를 설치하는 방법으로 apt-get을 통한 방법과 직접 소스코드를 내려받아서 컴파일하는 2가지 방식이있습니다. 더 편하고 빠른 방식은 package를 통한 방식이라 apt-get을 이용해서 설치하겠습니다.
sudo apt-get install nginx
이제 설치가 제대로 되었는지 확인을 해보겠습니다.
nginx -v
4. Nginx 설정
apt-get 명령어로 nginx 설치 시 환경설정 파일의 위치는 /etc/nginx에 위치합니다. 필요한 몇가지 파일 및 폴더들만 살펴보도록 하겠습니다.
* /etc/nginx/nginx.conf : nginx와 그 모듈들이 작동하는 방식에 대한 설정 파일입니다. "sites-enabled" 폴더안에 각각 서버에 대한 conf 파일들을 만들고 이 안에 첨부하여 웹서버를 운영할 수 있습니다. conf 파일안에는 http, server, location, upstream과 같이 나누어져있는데 이를 블록이라고 합니다. server는 가상서버 혹은 서버를 호스팅할 때 사용되며 location의 경우 특정 폴더 밑 파일에 대한 경로를 지정해주며 upstream의 경우 Reverse Proxy 설정을 위해서 사용됩니다.
* /etc/nginx/sites-enabled : nginx.conf에 첨부해서 실제로 서버를 운영할 설정 파일들이 들어있는 폴더입니다. nginx.conf 파일을 보면 여기 폴더에 있는 모든 파일을 불러옵니다.
* /etc/nginx/sites-available : 해당 디렉토리에서 프록시 설정 및 어떻게 요청을 처리해야할지에 대해서 설정할 수 있습니다.
* /etc/nginx/snippets : sites-available 디렉토리에 있는 파일들에 공통적으로 포함될 수 있는 설정들을 정의할 수 있는 디렉토리입니다.
5. Nginx 관련 명령어
6. 어플리케이션 프록시 설정
이제 Nginx에 80포트로 들어왔을때 특정 url로 들어오면 내부의 다른 포트에 실행중인 WAS로 연결해주는 작업을 해보겠습니다.
이제 프록시 설정을 해보겠습니다. /etc/nginx/sites-available 로 이동해서 test-proxy 라는 파일을 작성해보겠습니다.
server {
listen 80;
server_name 54.180.102.112;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
위의 코드를 분석해보면 54.180.102.112:80/ 주소로 서버에 요청이 오면 현재 서버에서 실행되고 있는 http://127.0.0.1:3000으로 클라이언트 요청을 대신 보내준다는 의미입니다. 이제 이 파일을 적용해줍니다.
sudo ln -s /etc/nginx/sites-available/test-proxy /etc/nginx/sites-enabled/
/etc/nginx/sites-enabled 디렉토리에 파일이 생성되어 연결된것을 볼 수 있습니다. Nginx 서버를 재시작합니다.
sudo service nginx restart
'Server' 카테고리의 다른 글
AWS + NGINX HTTPS(SSL) 적용 (0) | 2020.05.02 |
---|