将 Redis Unix 域套接字连接到 Django

将 Redis Unix 域套接字连接到 Django

我有一个 Django 网站通过nginx用户下www-datagunicorn用户myuser绑定下运行/run/gunicorn.sock

nginx运行良好;它充当 Unix 域套接字的代理gunicorn。我没有遇到任何问题nginx

redis-server也运行正常。它的域套接字位于/var/run/redis/redis-server.sock

当我在 Django 设置文件中启用 CACHES 时,出现以下异常gunicorn

Error 13 connecting to unix socket: /run/redis/redis-server.sock. Permission denied.

使用ps aux | grep redis,我发现 正在用户/usr/bin/redis-server下运行redis,我认为这是完全可以预料到的,也是可以接受的。我已将其添加myuserredis组,并重新启动了服务器。我继续收到该异常。

我做错了什么?如何让两个守护进程一起工作:gunicornredis-server

答案1

我使用了默认redis.conf文件,/etc/redis并且只是取消了与 Unix 套接字相关的示例的注释。

它包含以下信息:

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 700

我注释掉了该unixsocketperm行并添加了这一行:

unixsocketperm 660

它立即就起作用了。我非常兴奋,迫不及待地想看看使用缓存服务器的结果。

它之所以有效是因为权限中的中间数字是 6,它适用于组权限。在我更新之前,该redis组对套接字文件的权限为 0。在我更新之后,它现在对套接字文件具有读写权限。我读到过某处说套接字文件不需要用户的执行权限,所以为了安全起见我删除了该权限。

相关内容