【问题标题】:How to setup django with lighttpd?如何使用 lighttpd 设置 django?
【发布时间】:2023-02-12 18:27:19
【问题描述】:

我有一个在 lighttpd 下运行的实时网站。我现在有一个子域,我想在 django 下运行。我不想迁移到 Apache,因为我目前没有资源来支持两个生产 Web 服务器。 django 部分实际上与 django 内置开发服务器配合得很好,所以现在我只需要将它移植到生产环境中。

似乎所有使用 lighttpd 设置 django 的文档都有 10 多年的历史,并且使用 fastcgi,据我所知,它已被弃用并从 django 中删除。新文档指出在 lighttpd 下使用 wscgi - scgi。但即便如此,也很难获得任何文档。

我是否需要运行 uwsgi 并使用它来为 mod_scgi 提供页面?还是我应该使用 gunicorn?我有点不知所措。

欢迎提出建议!

【问题讨论】:

    标签: django gunicorn uwsgi lighttpd


    【解决方案1】:

    在 Lighttpd 下为 Django 应用程序提供服务时,您可以考虑几个不同的选项。一种流行的选择是使用mod_proxy将请求转发到运行 Django 应用程序的单独进程,例如独角兽或者uWSGI.

    独角兽可以使用 mod_proxy 轻松地与 Lighttpd 集成。您可以在后台将 Gunicorn 作为守护进程运行,并配置 Lighttpd 以使用 mod_proxy 将请求转发给它

    uWSGI也可以使用 mod_proxy 与 Lighttpd 集成,uWSGI 相对于 Gunicorn 的主要优势在于其可扩展性和性能,但设置起来可能更复杂。

    如果你是新手,我建议先尝试设置 Gunicorn,因为它是更简单的选项,然后再转向 uWSGI如果您需要更多性能

    更新: 正如您在评论中提到的,您想使用 mod_fastcgi 将 Lighttpd 连接到您的 Django 应用程序,因此您需要使用 flup 提供的 FastCGI 进程管理器启动 Django。

    如何使用 flup 启动 Django 应用程序:

    #!/bin/bash
    
    # activate your virtual environment
    source /path/to/venv/bin/activate
    
    # Start the FastCGI process manager
    python -m flup.server.fcgi -d -m django.core.servers.fastcgi
    

    您还需要配置 Lighttpd 以使用 mod_fastcgi 并将其指向由 flup 创建的套接字,以便连接到 Django 应用程序

    fastcgi.server = ( "/" =>
        ( "localhost" =>
            (
                "socket" => "/tmp/fcgi.sock",
                "check-local" => "disable",
            )
        )
    )
    

    【讨论】:

    • 您也可以使用 mod_scgi 或 mod_fastcgi 将 Lighttpd 直接连接到 Django,但这种方法不太常见,也不太受支持。
    • 我最初尝试使用 mod_fastcgi,就像我之前使用 flup 所做的那样。但是在那种情况下我该如何启动 django 呢?
    • @NoleKsum 我根据你的评论编辑了我的答案,我想你知道 flup 是一个第三方包,不包含在 Django 的核心中,它可能不会被积极维护。相反,您可能会考虑使用其他选项,如 Gunicorn 或 uWSGI,它们得到更积极的维护和广泛使用。
    • @Nova,仅供参考:我认为您会发现通过 unix 域套接字连接到 uWSGI 的 lighttpd mod_scgi 最简单并且提供最佳性能。它也不需要 flup 作为中介。
    【解决方案2】:

    lighttpd 支持 uwsgi mod_scgiscgi.protocol = "uwsgi"

    scgi.protocol = "uwsgi"
    scgi.server = ( "/" =>
        (
            (
                "socket" => "/tmp/scgi.sock",
                "check-local" => "disable",
                "fix-root-scriptname" => "enable"
            )
        )
    )
    

    使用mod_scgi 和 uwsgi 协议与 Django 服务器进行通信可能比使用 gunicorn(并使用 lighttpd mod_proxy 进行通信)更快并且使用更少的资源

    How to use Django with uWSGI

    那里链接的 uWSGI 文档建议将 Web 服务器配置为提供静态文件,而不是将这些请求发送到 Django。

    【讨论】:

    • 我实际上最终使用了这个解决方案并且它有效。但是,我添加了一个URL问题as another question
    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2010-11-14
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多