2013-09-30 29 views
0

我已经将Nginx设置为fastcgi_pass到Django并且不想从“/”服务Django。我想在URL前添加类似“/ django/sample /”的内容,但是在Nginx传递给Django之前,Nginx会移除该前缀 - 这样Django的内部就会像“/”一样提供服务。Nginx + FastCGI + Django在传递给Django之前删除URL前缀

我试着更新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; 
} 

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

我构建了一些django应用程序,它们将从一台服务器上运行,并且不希望总是使用URL来做这些事情,并且记得更新Django中的所有URL。

我一直在谷歌搜索一段时间,试图找出如何用nginx做到这一点,但没有看到任何东西。

所以,我希望使用Nginx的以前被传递给Django的在要求删除“/ Django的/样本”。任何人之前做过?

回答

0

你正在接近这个错误的方向。在传递给Django之前,没有理由删除前缀:只要您正确配置服务器,Django就会知道它,并且会自动将它用于诸如{% url %}标记和reverse()调用(您当然使用对于你所有的URL引用)。

与FastCGI的部署文档提供的how to set the prefix一些细节,特别是如果你不能得到它的工作任何其他方式,你可以明确地设置FORCE_SCRIPT_NAME你的前缀的价值的建议。