nginx+FastCGI+Django在传递给Django之前删除URL前缀



我已经将Nginx设置为fastcgi_pass Django,并且不想从"/"为Django提供服务。我想用"/django/sample/"之类的前缀来前缀URL,然后让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 之前删除请求中的"/django/sample"。以前有人这样做过吗?

你以

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

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

最新更新