pure-authd очень удобный механизм для внешней аутентификации. Но при большой нагрузке это может стать реальной проблемой: он однопоточный. Да, он все запросы складывает в свой backlog, но легче от этого не становится. И вы можете ждать своей очереди на аутентификацию и минуту и две и больше. Но у большинства ftp-клиентов таймаут на аутентификацию стоит в 20 секунд, поэтому это не вариант на высоких нагрузках.
Но что же делать? Выход простой – паралелить pure-authd внешними средствами такими как haproxy/nginx. Ниже приведу настройки для обоих из них, но удобнее и быстрее всё-таки haproxy.
nginx
stream { upstream backend { server unix:/tmp/ftpd1.sock; server unix:/tmp/ftpd2.sock; } server { listen unix:/var/run/ftpd-nginx.sock; proxy_pass backend; } }
haproxy
chroot /var/lib/haproxy ... listen pure-auth bind /var/run/ftpd-haproxy.sock mode 666 balance roundrobin mode tcp server ftp1 "unix@ftpd1.sock" check server ftp2 "unix@ftpd2.sock" check
При этом, сами сокеты ftpd1, ftpd2 должны быть в папке /var/lib/haproxy, иначе будете получать ошибку:
Socket error, info: "General socket error (No such file or directory)",
Либо, можете убрать опцию chroot и тогда пусть к сокетам можно давать полностью:
listen pure-auth bind /var/run/ftpd-haproxy.sock mode 666 balance roundrobin mode tcp server ftp1 "/var/run/ftpd1.sock" check server ftp2 "/var/run/ftpd2.sock" check