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