Суть проблемы.
При срабатывании limit_conn в nginx клиенту отдается 503 ошибка, но соединения продолжают висеть в conntrack табице ОС.
Таким образом даже при настроенных параметрах limit_conn единственный клиент с помощью например ab может исчерпать всю таблицу conntrack соединений.
Предлагаю сделать параметр limit_conn_action с двумя возможными значениями:
Действие error (по умолчанию) - выдает стандартную 503 (Service Temporarily Unavailable)
Действие drop - сбрасывает TCP сессию с клиентом на которой произошло срабатывание limit_conn.