2013-09-30 36 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你的前綴的價值的建議。