环境配置
- 操作系统: Ubuntu 16.04
- 反向代理服务器: nginx: 1.16.0
- 程序服务器: Gunicorn: 19.9.0
- Web程序: 基于Django的CMS框架Wagtail
出错原因
Gunicorn服务器没有sockets文件所在目录的读写权限
解决
- 访问网站出现502 bad gateway
- 查看nginx error log, 发现套接字无法连接
- 检查Gunicorn服务器是否正常启动, 检查Sockets是否正常
systemctl status gunicorn.service
- 检查nginx配置文件是否正常
- 检查Sockets文件所在目录权限是否正确
发现Gunicorn的用户和组是song和www-data, 而Sockets文件所在目录权限是root和root - 给文件目录授权
sudo chown song:www-data /home/tmp/
Sockets
- Sockets(套接字)是一种特殊的文件类型, 类似于TCP/IP套接字的双向管道, 提供受文件系统访问控制保护的进程间网络通信。
- Unix域套接字的特殊之处在于,它们的地址不是IP地址和端口号,而是文件名。这允许其他不了解网络的应用程序打开文件并读或写,数据被发送到服务器而不是磁盘.
- nginx服务器监听并接受来自客户机的连接,然后可以通过sock文件与Gunicorn程序服务器通信。
- 我们不需要去创建Sockets文件, 服务器程序自己会创建, 它只是代表服务器之间交换信息的地址