【问题标题】:When and how is the .sock file created for a uWSGI, nginx and Django stack何时以及如何为 uWSGI、nginx 和 Django 堆栈创建 .sock 文件
【发布时间】:2019-02-13 04:07:39
【问题描述】:

我知道有很多关于这个的问题主要来自于关注官方uWSGI guide。我也遇到了权限问题,但其他答案已经涵盖了它们。我想更好地了解如何以及何时创建 Unix 套接字/套接字文件。仅供参考,这是在运行 Amazon Linux 2 AMI 的 AWS ec2 实例上。

uWSGI 指南指导您安装 nginx、Django 和 uwsgi。然后单独测试Django开发服务器和nginx。然后在this section 测试 uWSGI 和 nginx 是否与 tcp/ip 套接字一起工作以进行通信。之后,仍然完全不涉及 Django 项目,他们描述了如何使用 Unix 套接字而不是 tcp/ip 套接字在 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 文件的权限有关,但我没有任何直接证据。

【问题讨论】:

  • 这是一个 Unix 套接字,由 uwsgi 创建。我不明白你关于“涉及 Django 项目”的问题。
  • @DanielRoseman 你是绝对正确的。我只是假设需要在 Django 项目中创建套接字,但事实并非如此。谢谢!

标签: python django sockets nginx uwsgi


【解决方案1】:

您可以在 Django 项目之外创建套接字 *.sock 文件。当你这样做时,文件将在 uWSGI 进程结束后持续存在。然后您可以查看文件并确定权限。

我很困惑,因为很多教程,包括 [official uWSGI]1 tutorial,让用户将 *.sock 文件放入 Django 项目中。我仍然不确定为什么这是必要的,以及为什么文件在这种情况下不存在。

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多