0

我已经将 Nginx 设置为 fastcgi_pass 到 Django,并且不想从“/”为 Django 提供服务。我想在 URL 前加上“/django/sample/”之类的前缀,然后让 Nginx 在该前缀被传递给 Django 之前删除该前缀——这样 Django 的内部就会像它实际上是从“/”提供服务一样。

我尝试更新 Django 应用程序以在路由的 URL 中包含前缀,如下所示:

urlpatterns = patterns('',
  '^', include(base_urlpatterns), # iff you wish to maintain the un-prefixed URL's too
  '^your_prefix/', include(base_urlpatterns),
)

我目前像这样做一个 fastcgi_pass :

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

但这不是一个优雅的解决方案,因为我的 django 应用程序中的任何 URL 都必须确保包含像“/django/sample”这样的前缀。这也意味着当我在服务器上本地运行 VS 时,URL 可能需要不同。

我构建了相当多的 django 应用程序,它们将从一台服务器运行,并且不想总是对 URL 进行这种愚蠢的操作,并记得更新 Django 中的所有 URL。

我已经在谷歌上搜索了一段时间,试图弄清楚如何用 nginx 做到这一点,但没有看到任何东西。

因此,我希望使用 Nginx 在请求中删除“/django/sample”,然后再将其传递给 Django。以前有人做过吗?

4

1 回答 1

0

你正在以错误的方式接近这个。没有理由在传递给 Django 之前删除前缀:只要您正确配置服务器,Django 就会意识到它,并会自动在{% url %}标签和reverse()调用之类的东西中使用它(当然你正在使用它)您的 URL 在内部引用)。

使用 FastCGI 进行部署的文档提供了一些有关如何设置前缀的详细信息,特别是如果您无法以任何其他方式使其工作的建议,您可以显式设置FORCE_SCRIPT_NAME为您的前缀的值。

于 2013-09-30T18:16:06.850 回答