Nginx에서 limit_conn의 적용 방법에 관해 궁금합니다.
CMS/프레임워크 | WordPress |
---|---|
개발 언어 | PHP 8.0 |
안녕하세요.
이전에 모니터링 도구를 통해 웹사이트가 무작위로 짧은 시간 다운이 된다는 질문 글을 올렸습니다.
당시 엑세스 로그를 통해 확인하라는 답변을 받고, 엑세스 로그를 활성화 시켜보니, 악성 봇이 초당 과도한 요청? 을 보내는 바람에 php-fpm에서 해당 트래픽을 처리하느라 웹사이트가 표시되지 않는걸 보았습니다.
이 문제를 해결하기 위해 nginx에 초당 요청수를 제한하기 위해 다음의 코드를 적용시키기고 fail2ban으로 해당 ip를 밴 시키도록 만들었습니다.
limit_conn_zone $conn_limit zone=conn_limit_per_ip:10m;
limit_conn conn_limit_per_ip 35;
limit_conn conn_limit_per_ip 35;
코드가 작동은 잘 됩니다만, 가끔씩 웹사이트를 접속해을때 정상적인 css나 js 등의 파일을 불러오지 못하는 일이 발생합니다 ;;
최대 동시 접속자 수가 많지 않아, 35도 충분히 큰 값이라고 생각합니다만....
제가 limit_conn의 사용법을 잘못 이해하고 있는건지, 혹은 다른 방법이 있는지 궁금합니다.
감사합니다.
댓글 2
이제는 수십 개의 리소스를 동시에 전송할 수 있는 HTTP/2가 주류이기 때문에, HTTP/1.1 시절에 만들어진 limit_conn 기능은 크게 의미가 없습니다. 커넥션보다는 실제 부하를 일으키는 요청을 통제해야 합니다. CSS, JS 등 일반 파일은 제외하고, PHP 요청을 처리하는 location 블럭 안에서 limit_req를 써보시는 것을 추천합니다.
늘 알려주셔서 정말 감사합니다!!