何时以及如何为 uWSGI、nginx 和 Django 堆栈创建 .sock 文件
When and how is the .sock file created for a uWSGI, nginx and Django stack
我知道有几十个关于这个的问题,大多源于关注官方uWSGI guide。我也遇到过权限问题,但其他答案已经涵盖了这些问题。我想更好地了解 Unix socket/socket 文件是如何以及何时创建的。仅供参考,这是在 AWS ec2 实例 运行ning Amazon Linux 2 AMI 上。
uWSGI 指南指导您安装 nginx、Django 和 uwsgi。然后隔离测试Django开发服务器和nginx。然后在 this section 测试 uWSGI 和 nginx 与 tcp/ip 套接字一起工作以进行通信。之后,仍然完全不涉及Django项目,他们描述了如何使用Unix sockets而不是tcp/ip socket进行nginx和uWSGI之间的通信。按照所有 nginx/uWSGI 配置,您 运行 来自主目录的命令(至少对于我的特定文件结构和 Django 项目,~/test_project
):
uwsgi --socket test_project/test_project.sock --wsgi-file test.py
一旦处理了一些权限问题,这就可以正常工作。我的问题是:什么是 test_project.sock
,它是什么时候创建的,是哪个进程创建的。我目前最好的理解是 uWSGI 创建了它,但是为什么我们需要合并 Django 项目(这里 test_project
)呢?为什么不直接在 Django 项目文件夹之外创建套接字?我们是否使用 python 语法并且它是某个 test_project
对象或模块的成员?
我知道 test_project.sock
与 Unix 套接字有关。我认为这将是一个真实的文件,但它似乎不是。即使当我在后台 运行 uWSGI 并查看适当的目录时,它也不存在。它是如此短暂,以至于它仅在请求实际从 nginx 传递到 uWSGI 时才存在吗?
此外,在无法实际看到文件 (test_project.sock
) 的情况下,我怎么知道访问它需要哪些权限?我 运行 进行了一些测试,现在怀疑它与 ~/test_project/test_project/wsgi.py
文件的权限有关,但我没有任何直接证据。
您可以在 Django 项目之外创建套接字,*.sock
文件。当你这样做时,文件将在 uWSGI 进程结束后保留。然后您可以查看该文件并确定权限。
我很困惑,因为很多教程,包括[官方 uWSGI]1 教程,都让用户将 *.sock
文件放入 Django 项目中。我仍然不确定为什么这是必要的以及为什么文件在那种情况下不存在。
我知道有几十个关于这个的问题,大多源于关注官方uWSGI guide。我也遇到过权限问题,但其他答案已经涵盖了这些问题。我想更好地了解 Unix socket/socket 文件是如何以及何时创建的。仅供参考,这是在 AWS ec2 实例 运行ning Amazon Linux 2 AMI 上。
uWSGI 指南指导您安装 nginx、Django 和 uwsgi。然后隔离测试Django开发服务器和nginx。然后在 this section 测试 uWSGI 和 nginx 与 tcp/ip 套接字一起工作以进行通信。之后,仍然完全不涉及Django项目,他们描述了如何使用Unix sockets而不是tcp/ip socket进行nginx和uWSGI之间的通信。按照所有 nginx/uWSGI 配置,您 运行 来自主目录的命令(至少对于我的特定文件结构和 Django 项目,~/test_project
):
uwsgi --socket test_project/test_project.sock --wsgi-file test.py
一旦处理了一些权限问题,这就可以正常工作。我的问题是:什么是 test_project.sock
,它是什么时候创建的,是哪个进程创建的。我目前最好的理解是 uWSGI 创建了它,但是为什么我们需要合并 Django 项目(这里 test_project
)呢?为什么不直接在 Django 项目文件夹之外创建套接字?我们是否使用 python 语法并且它是某个 test_project
对象或模块的成员?
我知道 test_project.sock
与 Unix 套接字有关。我认为这将是一个真实的文件,但它似乎不是。即使当我在后台 运行 uWSGI 并查看适当的目录时,它也不存在。它是如此短暂,以至于它仅在请求实际从 nginx 传递到 uWSGI 时才存在吗?
此外,在无法实际看到文件 (test_project.sock
) 的情况下,我怎么知道访问它需要哪些权限?我 运行 进行了一些测试,现在怀疑它与 ~/test_project/test_project/wsgi.py
文件的权限有关,但我没有任何直接证据。
您可以在 Django 项目之外创建套接字,*.sock
文件。当你这样做时,文件将在 uWSGI 进程结束后保留。然后您可以查看该文件并确定权限。
我很困惑,因为很多教程,包括[官方 uWSGI]1 教程,都让用户将 *.sock
文件放入 Django 项目中。我仍然不确定为什么这是必要的以及为什么文件在那种情况下不存在。