Я использую разные пулы PHP-FPM с конкретными пользователями каждый. Я просто переключил memcached на использование сокета вместо портов tcp / udp (по многим причинам, включая недавние атаки на порт 11211).
Я соответствующим образом изменил файл модуля systemd:
ExecStart=/usr/bin/memcached -s /var/run/memcached/memcached.socket -a 0770 -o modern
Сокет создан с правильными разрешениями:
$ ls -la /var/run/memcached/memcached.socket
srwxrwx--- 1 memcached memcached 0 Jul 5 15:41 /var/run/memcached/memcached.socket
Затем я включил пользователя пула php-fpm в группу memcached, чтобы php мог подключаться к сокету:
$ gpasswd pooluser memcached
Убедился, что это:
$ groups pooluser
pooluser memcached
И, наконец, я настроил скрипт php:
$memcached->addServer('/var/run/memcached/memcached.socket', 0)
Единственная причина, по которой я могу думать, это то, что PHP-FPM использует другого пользователя для установления соединения. Расширение php не может получить доступ к сокету:
var_dump($memcached->addServer('/var/run/memcached/memcached.socket', 0))
// bool(true)
var_dump($memcached->set('key', 'value')
// bool(false)
Если я изменю маску на 0777
тогда он может подключиться, так что это не проблема конфигурации, это проблема разрешений.
Я использую другой сокет unix для подключения PDO()
в mariadb (mysql), я проверил и mysql.socket
имеет 0777
по умолчанию (по крайней мере, для mariadb я ничего не настраивал).
Так следует ли отдавать сокеты unix 0777
разрешения или нет? В любом случае хотелось бы разобраться, почему php-memcached не может получить доступ к сокету.