2014-01-28 105 views
24

我按照這個教程:http://blog.wercker.com/2013/11/25/django-16-part3.html,我只是想使它現在在本地與流浪漢工作。我不想使用韋克爾。不良要求400:nginx/gunicorn

安裝完成後,我嘗試訪問網站,但每次都收到錯誤的請求(400)錯誤。我不知道這是由於nginx還是gunicorn中的問題。

他們都有一個日誌條目,所以至少我知道請求一直通過gunicorn,並沒有停止在nginx級別。

問題在哪裏? Gunicorn? nginx的?

這裏是gunicorn和nginx的日誌。

我看到favicon缺失,但只是不應該停止顯示頁面正確嗎?

Gunicorn:

>>> cat /var/local/sites/hellocities/run/gunicorn.error.log 
10.0.0.1 - - [28/Jan/2014:07:05:16] "GET/HTTP/1.0" 400 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 
10.0.0.1 - - [28/Jan/2014:07:09:43] "GET/HTTP/1.0" 400 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 

Nginx的:

>>> cat /var/log/nginx/hellocities-access.log 
10.0.0.1 - - [28/Jan/2014:07:05:16 +0000] "GET/HTTP/1.1" 400 37 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 
10.0.0.1 - - [28/Jan/2014:07:05:20 +0000] "GET /favicon.ico HTTP/1.1" 404 200 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 
10.0.0.1 - - [28/Jan/2014:07:09:43 +0000] "GET/HTTP/1.1" 400 37 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 
10.0.0.1 - - [28/Jan/2014:07:09:44 +0000] "GET /favicon.ico HTTP/1.1" 404 200 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" 

>>> cat /var/log/nginx/hellocities-error.log 
2014/01/28 07:05:20 [error] 13886#0: *1 open() "/var/local/sites/hellocities/static/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.200" 
2014/01/28 07:09:44 [error] 13886#0: *3 open() "/var/local/sites/hellocities/static/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: _, request: "GET /favicon.ico HTTP/1.1", host: "10.0.0.200" 
+14

你設置您的settings.py中的ALLOWED_HOSTS? https://docs.djangoproject.com/zh/dev/ref/settings/#allowed-hosts –

+0

嗡嗡聲我想我是的。我用這個命令運行劇本:''ansible-playbook site.yml --extra-vars「source_location = $ REMOTE_SOURCE_DIR hostname = $ HOSTNAME」-u root''其中''HOSTNAME''爲''127.0.0.1' '。然後在tuto的腳本中,通過'export DJANGO_ALLOWED_HOST = {{hostname}}''和''ALLOWED_HOSTS = [os.environ.get('DJANGO_ALLOWED_HOST','127.0.0.1')]設置變量。 '' – Michael

+1

好吧,你是對的,它是''DJANGO_ALLOWED_HOST''變量。 我在設置文件中設置了''ALLOWED_HOSTS = ['*']'',它工作正常。 但是我不明白在使用當地流浪漢的時候應該放置什麼樣的價值......? ''127.0.0.1''不起作用... 非常感謝。 – Michael

回答

49

我有同樣的問題,並增加ALLOWED_HOSTS = ("yourdomain.com",)來設置固定它。

UPDATE:還有一些其他的可能性:

  1. Nginx的(或任何Web服務器使用)的$主機變量不傳遞給應用
  2. 主機包含突出

見詳細信息:https://blog.anvileight.com/posts/how-to-fix-bad-request-400-in-django/

+1

或ALLOWED_HOSTS =(「*」,)並啓動apache(服務apache2重啓) –

+1

@HalilKaskavalci:請注意,該問題指定gunicorn/nginx,而不是Apache2。就個人而言,我會建議避免使用ALLOWED_HOSTS =(「*」,)。 –

+0

哦,我的壞。我沒有注意到那個。感謝您的糾正。 –

5

由於我遇到了同樣的問題(當試圖與流浪股份共享時出現400錯誤代碼),我stu在這個問題上。答案和評論是正確的,因爲明顯的解決方案是設置ALLOWED_HOSTS列表,但我已經正確設置了它(我認爲)。

爲我跑這對我的Apache2不能nginx的說話,但這裏是解決該問題:

  1. 看看在ALLOWED_HOSTS doc找到什麼是最適合你的情況。

  2. 隨着流浪者,你可能會發現它有用接受所有vagrantshare.com子域,所以只需添加'.vagrantshare.com'(注意點)到ALLOWED_HOSTS列表。

  3. 不知道是否真的是必要的,但我由於我使用的Apache2改變wsgi.py文件

    touch wsgi.py 
    
  4. 的修改日期,我需要重新啓動該服務。

    sudo service apache2 restart 
    

然後它的工作。

-2

在Django的1.8.7,我不得不這樣做實際上是兩件事情來解決這個問題:

  • 首先,添加我的域名在settings.py以ALLOWED_HOSTS列表爲ALLOWED_HOSTS = ["mydomain.com",]
  • 其次,到底在settings.py模塊的只是改變ALLOWED_HOSTS = ip_addresses()ALLOWED_HOSTS += ip_addresses()(注意+號)

這解決了我的問題