18

我让 Django 在 Nginx 后面运行fastcgi_pass。我在子路径上运行 Django,例如/django/sample.

location /django/sample {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:8025;
}

FORCE_SCRIPT_NAME在 Django 设置模块中使用,它似乎解决了我在子路径上运行时遇到的所有问题。

在 settings.py 中:

FORCE_SCRIPT_NAME = "/django/sample/"

我去这里以管理员身份登录(并正确获取管理员 UI):

http://server/django/sample/admin

但是当我提交时,它会重定向到:

http://server/django/sample/django/sample/admin

真正奇怪的是,如果我更改FORCE_SCRIPT_NAME=""登录工作。

但是,那么管理页面中的所有链接都是/admin,不是/django/sample/admin/

我到底错过了什么?设置FORCE_SCRIPT_NAME="/django/sample/"似乎可以解决除管理员登录之外的所有问题。

有任何想法吗?

更新:

我也尝试过fastcgi_split_path_info在 nginx conf 中使用(并在设置中取出FORCE_SCRIPT_NAME)。同样,这解决了除了管理员登录重定向之外的所有路径问题。

像这样的conf:

location /django/sample {
    fastcgi_split_path_info ^(/django/sample)(.*)$;
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:8025;
}
4

2 回答 2

9

仅供参考,我放弃了。所有文档都说它应该很容易。但是处理起来太痛苦了。相反,我要求我们的 Django 应用程序使用子域并使用服务器设置虚拟主机。这样 Django 可以在文档根目录“/”处运行

于 2013-10-18T15:01:00.207 回答
4

FWIW,当我在使用 wsgi 的 Django 服务器前面有一个代理服务器时,我在另一个线程中编写了一个对我有用的解决方案。

我记得很久以前对此进行了故障排除......您看到了不同步的行为,因为 Django 管理员设置和处理next表单提交上的参数的方式。

根据我的经验,Django 站点绝对应该FORCE_SCRIPT_NAME用来修改后端生成链接的方式,并且您的代理服务器还应该去掉路径的子文件夹(即脚本名称)部分。

另一个线程:

在子文件夹上托管 Django

于 2018-12-14T20:21:21.480 回答