Post

Nginx

image

Nginx란?

웹 서버 및 리버스 프록시 서버로 널리 사용되는 소프트웨어입니다.

Nginx는 경량이면서도 높은 성능을 제공하는 특징으로 유명합니다.

특히 동시접속 처리에 특화된 웹 서버 프로그램입니다

Nginx를 사용하는 이유

image

초당 10개의 트래픽만 받아도 벅찬 서버에 초당 30개의 트래픽이 들어온다면 -> 서버가 멈추면서 장애발생!!

->문제해결?

image

여러대의 서버를 두어서 트래픽을 분산을 하면 정상적으로 작동

하지만 DB가 각 서버에 분산되어 있어서 데이터의 동기화 문제 발생!!

image

서버와 DB를 분리하고 DB Sharding기법을 사용

하지만 클라이언트가 모든 서버의 주소를 알 필요가 없으니

Nginx를 두어 리버스 프록시(Reverse Proxy)의 역할을 함

image

Nginx는 로드 밸런싱을 수행하여 여러 대의 서버로 들어오는 트래픽을 효과적으로 분산시키는 역할을 하기 때문에 사용합니다.

Aws에 Nginx서버 구축하기

일단 AWS Ec2에 Ubuntu인스턴스를 생성하고 탄력적 Ip를 할당합니다.

image

인바운드 규칙을 편집해서 포트를 열어둡니다.

저는 서버 터미널에 접근하기 위해 pUTTY,WinSCP를 연동하여 사용했습니다.

1
2
3
4
5
6
sudo su // 관리자계정으로 변경

apt-get update

apt-get install nginx //nginx를 설치

Ip주소로 들어가보면

image

설치가 정상적으로 완료되었다는 것이 보입니다.

Nginx를 리버스 프록시로 설정하기
1
sudo nano /etc/nginx/nginx.conf

Nginx 설정 파일 열기

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
    listen 80;
    server_name main.project.com;  # 도메인 또는 IP 주소로 변경

    location / {
        proxy_pass http://13.209.92.9/;  # 실제로 동작 중인 서버의 주소와 포트로 변경
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

클라이언트가 main.project.com으로 요청하면

서버에서 실행되고 있는 http://13.209.92.9/으로 요청을 대신 보내줍니다.

HTTP에서 HTTPS로의 리다이렉션

  1. 클라이언트가 http://main.project.com과 같이 80번 포트로 HTTP로 접속을 시도합니다.

  2. Nginx는 80번 포트에서 들어온 HTTP 요청을 받아들입니다.

  3. Nginx 설정에는 80번 포트로 들어온 요청을 HTTPS로 리다이렉트하는 설정이 있습니다.

  4. Nginx는 해당 요청을 HTTPS로 리다이렉트하고, 리다이렉트된 요청을 443번 포트로 보내서 Node.js 서버로 전달합니다.

1
2
sudo nginx -t  # 구성 파일 확인
sudo systemctl restart nginx  # Nginx 재시작

끝!

This post is licensed under CC BY 4.0 by the author.