최근 서버 이것 저것 손보다가 keep alive 사용이 안되어있더가 지적질을 당해서 ㅋ 

 

최근 enable 해 주었는데요..

 

이게 설정된 시간 안에 재요청이 있을시 포트닫지 않은 상태이기 때문에 뭔가 전송에 유리하다고 합니다.

 

실사례로 이런 상황이 언제 벌어지는 건지 궁금합니다.

 

너무 길게 유지시키면 공격등에 의한 피해가 우려된다고 해서 

Keep-Alive: timeout=5 

 

이렇게 설정햇는데요..

 

 

 

  • ?
    keep alive는 http 1.0의 connectionless 방식의 비효율성을 극복하기 위해 http/1.1부터 적용된 방식입니다.
    원래 http 프로토콜은 사용자가 요청하는 모든 리소스에 대해서 개별적으로 연결을 맺고 끊는것을 반복하기 때문에 부하가 심해지는데, keep alive 이를 하나의 연결로 많은 리소스를 요청하여 부하를 줄이기 위해 적용된 기술입니다.

    최근에는 사용하는것이 당연시되고 있고 실제로 적용하면 http1.0 방식보다 효율이 극대화되는게 맞습니다.
    첫 3way 핸드쉐이크 과정을 거친 ESTABLISH 연결이 설정한 시간동안 지속되면서 그 사이에 요청되는 리소스는 새로 연결을 맺는게 아니라 기존 연결 터널을 통해서 내려주게 됩니다.

    그냥 간단하게 말하면 각 리소스 요청마다 새로 연결을 맺고 끊는게 아니라 연결된 세션을 통해서 요청을 처리하기 때문에 그 오버헤드 만큼의 이득이 있다고 보시면 됩니다.

    설정은 서버 상황에 따라 다르고, 그래도 보통은 15초정도는 설정하는 편인걸로 알고 있습니다. 어차피 해당 연결동안 무한정으로 주고받는건 아니고 또 리소스 몇개의 요청 이후에는 강제로 종료하는 옵션도 있는걸로 압니다.
  • ? profile

    어떠한 상황인지가 궁금합니다. 저희 서버는 서버튜닝해 주신분이 어떤 이유인지 사용을 하지 않는거로 해 두셔서 제가 엇그제 사용하게 전환했구요.

    일반적인 페이지 열람시 어떠한 효과가 있는지 궁금합니다. 연결을 끊지 않고 추가적인 요청이라는게

    예를 들어 1페이지에 이미지가 5개가 있다면 keep alive가 활성화 되지 않았다면 5번의 open 과 close 가 있고
    keep alive를 사용한다면 1번의 open만 있어도 되는건지 이런게 궁금합니다.

    갯수는 저희는 100개 한거로 .. 어제 했는데 기억이 ㅋ

     

     

    확인해보니 

     

    Max Requests    Per Child: 0 - Keep Alive: on - Max Per Connection: 100
    Timeouts    Connection: 30 - Keep-Alive: 2

     

    이렇게 했군요. 30초동안 신호가 없으면 끊어지는거고 유지시간은 2초로 해 놓았네요. 

  • profile ?
    생각하시는게 맞습니다. 이미지만 있겠습니까 사실 css랑 js도 전부 하나의 요청입니다.
    그런 요청들이 있을때마다 open과 close가 반복되니 얼마나 부하가 심하겠나요. 그걸 설정한 시간동안, 설정한 갯수만큼
    하나의 open과 close로만 처리하게 되는겁니다.

    실제로 주고받는 패킷을 보면 헤더에 keep-alive를 달고 들어가고요.
    같은 tcp stream에 요청되는 모든 자료가 연속해서 찍힙니다. 이러면 이득이죠.
  • ? profile
    최초 서버설치할때 나름 하시는분이 하셨는데 이거는 미쳐 못보고 넘겼나보네요. 이제 개념이 확실히 잡히는거 같네요. 자세한 설명 감사합니다.
  • ?
    공격에 대해서 말씀하셔서 사족을 좀 달면 keep alive를 이용한다고 특별히 공격에 취약해지거나 그런건 없습니다. 이거 이용한다고 공격받는 환경은 뭘해도 똑같아요.

    syn flooding이나 slow dos계열 공격이 이런거랑 관계있는 공격들인데 (연결 큐를 가득차게 만들어서 가용성을 떨어뜨리는..)

    이런 ddos류는 대규모로 공격받으면 어차피 답은 없잖아요. 방어장비도 한계가 있는 판국인데요.
  • profile

    웹지기님은 클라우드플레어를 사용하시니까 서버에서 Keep-Alive를 쓰든 말든 큰 차이는 없습니다. CSS, JS, 대부분의 이미지는 클라우드플레어에서 캐싱되기 때문에 실제로 서버에서 전송해 줘야 하는 건 HTML 딱 하나...

     

    RAM이 넉넉하지 않은 가상서버에서 아파치 + mpm_prefork + mod_php 조합으로 Keep-Alive를 높게 해두면 아파치 프로세스가 너무 많이 생성되어 서버 부하가 높아지거나 오히려 접속 지연이 발생하기도 하기 때문에, 일부러 꺼두는 경우도 종종 있습니다. 예전에 설치해드린 분이 꺼두셨다면 아마 그 때문일 거예요.

  • profile profile
    아.. 잠시 클라우드 플레어 잠시 사용 안하고 있어서요. http/2 도 적용하고 하다보니 keep alive 도 설정하라고 경고 뜨고 해서 해주고 있어요.
  • profile
    간단히
    동접이 많으면 off
    그렇치 않으면 on