我已经将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
前缀的值显式设置为前缀的值。