gpt4 book ai didi

django - 如何在 nginx 后面的 suburl 下部署 django

转载 作者:行者123 更新时间:2023-12-03 11:26:10 24 4
gpt4 key购买 nike

我在 http://localhost:12345 上运行了一个 django 应用程序.
我希望用户通过 url http://my.server.com/myapp 访问它.
我使用 nginx 反向代理它,如下所示:

... ...
server_name my.server.com;
location /myapp {
rewrite /myapp(.*) $1 break;
... ... # proxy param
proxy_pass http://localhost:12345;
}
... ...

问题是,当像上面那样配置时,如何使我的响应页面中的 url 具有前缀“/myapp”,以便 nginx 可以将它们正确地定向到 myapp。例如,像“/foo/far”这样的页面中的 url 应该更改为“/myapp/foo/bar”以允许 nginx 代理到 myapp。
什么是正确的 nginx 配置用来实现这一目标?

我可以使用 django 的设置变量来指定根 url 前缀,但我认为它不灵活,因为必须根据不同的 nginx 配置修改变量(比如有一天 nginx 可能将 suburl 从“/myapp”更改为“/另一个应用程序”)。

最佳答案

由于前缀是在 Nginx 中设置的,托管 Django 应用程序的 Web 服务器无法知道 URL 前缀。正如 orzel 所说,如果您使用 apache+mod_wsgi 甚至 nginx+gunicorn/uwsgi(带有一些额外配置),您可以使用 WSGIScriptAlias 值,该值由 Django 自动读取。

当我需要使用一个 URL 前缀时,我通常把它自己放在我的根 urls.py 中,我只有一行,以前缀为前缀并包括另一个 urls.py

(r'^/myapp/', include('myapp.urls')),

但我想这与在 settings.py 中设置前缀具有相同的瓶颈,您在 nginx 和 Django 中有冗余配置。

您需要在托管 Django 应用程序的服务器中执行某些操作:12345。您可以在那里设置前缀,然后使用 WSGIScriptAlias 或 mod_wsgi 之外的等效项将其传递给 Django。我无法提供更多信息,因为我不知道您的 Django 应用程序是如何运行的。此外,也许您应该考虑使用 uWSGI 或 gunicorn 直接从 Django 运行您的 Django 应用程序。

要将前缀从网络服务器传递给 Django,您可以使用以下命令:
proxy_set_header SCRIPT_NAME /myapp;

更多信息 here

关于django - 如何在 nginx 后面的 suburl 下部署 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com