티스토리 뷰

Nginx upstream

웹 애플리케이션 서버를 (Spring, flask..) Container 자체적으로 실행하는 경우는 거의 없고 대부분 nginx에서 proxy 하는 경우가 많다.
이렇게 하면 ssl, auth, cache 등의 요구사항을 쉽게 적용, 변경할 수 있다.

이때 nginx는 client 입장이 되는데, keepalive 설정을 할 수 있다.

keepalive

upstream 접속에 사용될 connection 수. 각 worker process에서 cache 하고 있으며 최대 수에 도달하면 가장 최근에 사용된 connection이 closed 된다.

upstream backend {
    server backend1.example.com;
    keepalive 32;
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

keepalive 수는 성능 테스트를 하며 조절하면 된다.
보통 16 ~ 32를 넘어갈 일은 없을 듯. 하지만 traffic, 서버 사양에 따라 1000, 2000개를 넘게 설정해야 할 수도 있다.

생각 할거

내부적으로 tcp connection 생성 비용이 줄어들어야 하지만... 확인 결과 cpu, ram에 드라마틱한 차이는 없었다. 하지만 nginx -> upstream 서버로 connect 하는 시간은 확실히 줄어들었다.

Connection header의 역할에 대하여 알아두면 좋다. nginx 공식 문서에 따르면 http version은 1.1로 지정 되어야 하고 Connection header는 빈 값으로 전달 해야 한다.

websocket 관련한 애플리케이션에서는 작동하지 않을 수 있다. 다른 설정이 필요한데 검색 해보면 나온다.

관련 링크

댓글
댓글쓰기 폼