2011-03-29 84 views
3

正如所描述的標題,Django不斷將我的URL從/localhost/更改爲/127.0.0.1:8080/,它不斷讓我的服務靜態文件被Nginx搞亂。任何想法爲什麼這樣做?謝謝!Django不斷地將URL從http:// localhost /更改爲http://127.0.0.1:8080/

/* *EDIT* */ 這裏是Nginx的配置:

server { 

    listen 80; ## listen for ipv4 
    listen [::]:80 default ipv6only=on; ## listen for ipv6 

    server_name localhost; 

    access_log /var/log/nginx/localhost.access.log; 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ 
    { 
      root /srv/www/testing; 
    } 

    location/{ 
      proxy_pass   http://127.0.0.1:8080/; 
      proxy_redirect  off; 
    } 

    location /doc { 
     root /usr/share; 
     autoindex on; 
     allow 127.0.0.1; 
     deny all; 
    } 

    location /images { 
     root /usr/share; 
     autoindex on; 
    } 

這裏是Apache的配置文件:

<VirtualHost *:8080> 

    ServerName testing 
    DocumentRoot /srv/www/testing 

    <Directory /srv/www/testing> 
     Order allow,deny 
     Allow from all 
    </Directory> 

    WSGIScriptAlias//srv/www/testing/apache/django.wsgi 

</VirtualHost> 
+1

你是如何建立你的網址是什麼? – Jerzyk 2011-03-29 07:43:19

回答

4

EDIT2 :

http://wiki.nginx.org/HttpProxyModule#proxy_redirect

http://wiki.nginx.org/HttpProxyModule#proxy_pass

我認爲正在發生的事情,當你用你的httpresponseredirect,該HTTP_HOST頭給它127.0.0.1:8080,因爲你proxy_pass設置爲。

Django's HttpResponseRedirect seems to strip off my subdomain?

的Django有它總是 適用於響應的一些方法。其中之一是 django.utils.http.fix_location_header。 這確保了重定向 響應始終包含絕對的 URI(根據HTTP規範的要求)。

+0

在我的所有鏈接和表單中使用相對URL。我使用Nginx將所有請求(除了靜態文件)轉發到Apache上,它是127.0.0.1:8080。我知道127.0.0.1與localhost相同,即使我只使用127.0.0.1,我的css文件也能正常工作。它只是每當我在我的應用程序發佈形式,它重定向到8080端口這打亂了我的CSS – vol4life27 2011-03-29 05:38:44

+0

編輯您的文章,包括你的nginx/apache的confs這可能是一個設置問題 – DTing 2011-03-29 06:05:34

+0

我可能需要指出的是,它只做當我使用HttpResponseRedirect是它改變它/本地主機/到/127.0.0.1:8080/ – vol4life27 2011-03-29 23:48:38

1

有同樣的問題(django重定向到瀏覽器與「:8080」追加)。進一步搜索後,我發現了一些nginx信息。以下固定它...

在你的nginx的配置,替換...

proxy_redirect off; 

與....

proxy_redirect http://127.0.0.1:8080/ http://127.0.0.1/; 

記得重新啓動你的nginx的守護進程。這會導致nginx將從Apache返回的數據包上的8080剝離回瀏覽器。例如,通過apache從django重定向,http://127.0.0.1:8080/my/test/file.html將在nginx發送回客戶端後變成http://127.0.0.1/my/test/file.html

現在您不必修改您的django代碼。

6

如果你使用虛擬主機,你需要設置USE_X_FORWARDED_HOST = true在您的settings.py

這裏的參考:Django Doc for Settings.py

USE_X_FORWARDED_HOST新在Django 1.3。1:請參閱發行 筆記

默認值:false

指定是否使用X - 轉發,主機頭在 偏好主機的頭一個布爾值。只有在設置此標頭的代理 正在使用時才能啓用此功能。

下面是一些示例代碼:

import os, socket 
PROJECT_DIR = os.path.dirname(__file__) 

on_production_server = True if socket.gethostname() == 'your.productionserver.com' else False 

DEBUG = True if not on_production_server else False 
TEMPLATE_DEBUG = DEBUG 

USE_X_FORWARDED_HOST = True if not on_production_server else False 
+1

+1:這是任何正確的答案,其HTTP服務器配置正確,但其Django的服務器不是 – 2014-01-27 22:15:00

+0

這是正確的答案。 – Ilja 2015-05-06 13:53:37

相關問題