Nginx

트래픽이 더 많은 곳에 사용하기에 적합 넷플릭스 서버, 트래픽 처리, 리버스 프록시, 로드밸런스 사용중

cd /etc/nginx
ls -l

default.conf 파일 location 블록에서 정적 파일 서빙 프록시 패싱 Redirection 설정 가능

리버스 프록시 설정

upstream backend{
server 172.17.0.2:8081;
server 172.17.0.2:8082;
server 172.17.0.2:8083;
}

server {
    listen 80;
    server_name localhost;

    #access_log /var/log/nginx/host.access.log main;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        proxy_pass http://backend;

    }
    ...
    ...

}

http://backend; 는 upstreamServer

172.12.0.2는 특정 환경에서 사용되는 Nginx Ingress Controller의 노출 포트(NodePort)이거나, 해당 IP 주소로 Nginx 서버를 시작한 경우의 IP 주소일 수 있습니다. 특히, Alibaba Cloud에서 172.12.0.2를 Nginx Ingress Controller의 NodePort로 사용하는 예시를 찾을 수 있습니다.

위에 처럼 설정하면 로드밸런싱 설정이 완료된것이고 메인 localhost:80 으로 접속해 메인사이트 새로고침만해도 설정해둔 8081 ~ 8083으로 로드밸런싱이 되는것을 볼 수 있다.

백엔드 서버 구성 방법:

  1. Docker 컨테이너로 구성 bash# 같은 애플리케이션을 다른 포트로 실행 docker run -p 8081:8080 myapp:latest docker run -p 8082:8080 myapp:latest
    docker run -p 8083:8080 myapp:latest
  2. 물리적으로 다른 서버 bash# 서버1: java -jar app.jar –server.port=8081

    서버2: java -jar app.jar –server.port=8082

    서버3: java -jar app.jar –server.port=8083

  3. Docker Compose 예시 yamlservices: app1: image: myapp ports: [“8081:8080”] app2: image: myapp
    ports: [“8082:8080”] 핵심: Nginx는 단순히 트래픽을 분산시키는 역할이므로, 실제 서비스를 처리할 백엔드 서버들이 미리 실행되어 있어야 합니다.

/etc/nginx

  • Nginx 서버가 사용하는 기본 설정이 저장된 경로
  • Nginx는 이 경로에 있는 nginx.conf 파일에 정의된대로 동작한다.
  • nginx.conf 에는 모든 설정 파일을 포함하는 최상위 http 블록이 있다
    • http 블록: http 서버에 대한 동작을 지정하는 블록
    • 일반적으로, 특정 도메인에 대한 설정은 http 블록의 하위 블록인 server 블록에 작성한다
    • server 블록의 내용은 site-enabled 또는 conf.d 경로에 작성하고, nginx.conf에서 include를 이용해 이 파일을 불러와 사용한다

공식 문서에서는 conf.d 경로에 작성하는 방식을 추천한다.


포트 포워딩을 위한 설정

  1. EC2 내부에 Nginx를 apt-get으로 설치
  2. Certbot을 이용해 SSL 인증서 발급
  3. SpringBoot는 Docker를 이용해 배포

Certbot 적용 시 기본적으로 sites-enabled에 저장된다. 하지만 conf.d 에서 환경설정을 권장하고 이용하니 해당 파일을 conf.d로 이동시킨다

sudo cp /etc/nginx/sites-available/default /etc/nginx/conf.d/000.conf
sudo rm -rf /etc/nginx/sites-available
sudo rm -rf /etc/nignx/sites-enabled

Server_name -> 해당 server 블록에서 처리할 도메인(IP주소)

listen

  • nginx가 수신할 포트
  • default_server를 지정하면, 해당 포트에 모든 요청을 이 server 블록에서 처리

server

  • 웹 서버 요청을 처리하는 기본 단위
  • 특정 도메인(IP 주소) + 포트 조합에 대한 요청을 처리

location

  • 특정 경로에 대한 처리를 지정할 때 사용
  • 만약 location이 /api/ 라면, 000.store/api/ 인 모든 요청을 이 블록에서 처리