我使用不同的 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)
如果我将 umask 更改为,0777
那么它就可以连接,所以这不是配置问题,而是权限问题。
我正在使用另一个 unix 套接字连接PDO()
到 mariadb(mysql),并且我已经检查过并且默认情况下mysql.socket
具有0777
(至少我没有为 mariadb 配置任何东西)。
那么我是否应该授予 unix 套接字0777
权限?无论如何,我想弄清楚为什么 php-memcached 无法访问套接字。