Nginx+Gunicorn+Django配置時出現“Bad Request (400)”解決方法

在配置 Nginx+Gunicorn+Django 時,我用Nginx作了反向代理,但是沒有設置轉發後request的host,發現所有請求都是返回“Bad Request (400)”,現在來分享這個問題的解決方法。

配置Nginx+Gunicorn+Django時,發現所有請求都是返回“Bad Request (400)”。
最開始,很直觀地想到是Django的settings.py中配置的ALLOWED_HOSTS,檢查了一下我的配置已經爲:ALLOWED_HOSTS = [‘*’]表示允許所有的host。注:如果DEBUG=True,則不檢查request header中的HTTP_HOST;只有關閉DEBUG模式才有這個檢查。 這樣的情況下,我就很奇怪了~~
後來找了好一陣子才忽然發現,我用Nginx作了反向代理,但是沒有設置轉發後request的host,所以關鍵要要加上“proxy_set_header Host $host;”的設置;後來,我是將proxy相關的信息放到proxy.conf文件中,然後在nginx.conf中“include proxy.conf”來引用。proxy.conf示例:https://github.com/smilejay/other-code/blob/master/config/nginx-proxy.conf

代碼如下
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 20m;
client_body_buffer_size 256k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;


這樣配置了“proxy_set_header Host $host;”後,問題就解決了。
但是,還有一點兒沒想得太明白,爲啥 ALLOWED_HOSTS = [‘*’] 這個設置沒有匹配上通過代理過來的請求;看文檔是說通過 HttpRequest.get_host() 獲得host,我打開DEBUG,不加”proxy_set_header Host $host;”,獲得到了 request.get_host() 是我在nginx中通配置的”music_server”(因爲配置爲:proxy_pass http://music_server;)。

更多相關文章
  • DeDeCMS v5後台上傳圖片時出現錯誤的解決方法使用DeDe CMS v5.5的網站在後台上傳圖片時出現如下錯誤:作爲web生手的我很是迷茫.印象裏之前並沒有做什麽改動,于是百思不得其解.Google.百度.DeDe官網搜索了一大圈,發現有這個問題的人不少,但是沒有一個給出解決的辦法.只好自己試
  • 文章總結了關于mysql導入數據庫時出現40101錯誤,不能成功把數據庫入的解決辦法,有需要學習的朋友可參考一下.導入錯誤:40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTE
  • 網站出現service unavailable的解決方法
    網站出現service unavailable多半是連接數過多或iis伺服器資源配置的問題,下面我來介紹網站出現service unavailable的解決方法,各位朋友可參考.昨天一小段時間網站出現了service unavailable,于是筆者緊急的解決了此問題,據悉Service Unava ...
  • ASP.NET在IIS上注冊出現0x800702e4錯誤解決方法 有碰到相同問題的朋友可參考本文章來處理.sqlserver/42852.htm target=_blank >1.--404.3 not found2
  • nginx 502多關的原因是資源不足或nginx配置的一些問題導致的,下面我來給提供了一個利用nginx輪詢php服務池狀態然後進行相關處理,希望例子能幫助你解決問題.站經常會出現502錯誤,可以從一下幾個方面著手查:先從FastCGI配置入手:1.查看FastCGI進程是否已經啓動NGINX 5
  • sql2008 附加數據庫時出現5123 錯誤解決辦法
    今天我在重新安裝了系統了,再想把以前的數據庫給附加過來,但是操作時發現提示了5123錯誤提
  • 用mysqldump導出的數據文件,再用source導進去的時候常常有一些報錯 ariable sql_mode cant be set to the value of NULL,百度了好幾回,終于找到是mysql導
  • Mysql中出現 errno:145的解決方法
    本文章是告訴你關于怎麽來把在使用mysql時出來 errno:145錯誤的解決方法,有碰到想同問題的朋友可以嘗試一下下哈.俗話說常在河邊走哪能不濕鞋呢,mysql用多了也會出現很多莫名其妙的問題Can’t open file: ‘×××.MYI’ (errno: 145),這個錯誤一般就是你的數據庫
一周排行
  • 將SQL Server數據遷移到MySQL的方法
    將SQL Server數據遷移到MySQL的方法我們如果對于複雜的數據庫可以使用程序自己一 ...
  • 紅米note2如何截圖截屏 紅米note2截圖方法
    截屏对于安卓手机来讲除了系统自带的截屏功能,其实手机本身也会开发一些截屏功能了,这里一聚教 ...
  • Java 設計模式之工廠方法(Factory Method)
    本文章給各位java愛好詳細介紹關于Java 設計模式之工廠方法(Factory Meth
  • 解決編譯PHP找不到libc-client.a的問題,小編以前在編輯安裝時碰到過,但是沒有重點介紹過,這裏一聚教程小編爲各位再整理了一篇文章各位進來看看.最近PHP爆出漏洞,老高也在升級PHP版本,並加入一些支持,但
  • php教程 pcre正則表達式完全教程預定義常量preg_pattern_order結果按照”規則”排序, 僅用于preg_match_all, 即$matches[0]是完整規則的匹配結果, $matches[1]
  • 代碼如下 function get_csv_contents( $file_target ){ $handle = fopen( $file_target, 'r'); while ($data = fgetcsv(
  • 下面我來給各位整理兩款在thinkphp中導出Excel文件的兩種方法一種是原生態的輸出xls文件,外一種是使用PHPExcel來實現下面我們來看看例子.其中要注意幾點:1.必須要有 spl_autoload_reg
  • mysql報錯ERROR 1201 (HY000):Could not initialize master info structure錯誤許多朋友不知道如何解決,下面小編來爲各位整理一下.在做mysql主從複制時遇 ...
  • 星際的戰鬥達到後面,地圖裏面的部隊很多,如果我們把每個兵的圖像動畫和屬性值作爲一個對象的話,系統的記憶體裏會消耗極大我們在玩的時候會發現,因爲星際裏面的種族只有三個,其實兵種只有幾十個.雖然每個獨立的士兵剩余的血不同
  • 本文章詳細的介紹了在IE6.IE7.IE8.Firefox中關于如何利用CSS HACK來解決各浏覽器這間的兼容性問題有需要的同學可以參考一下本文章.1.區別IE和非IE浏覽器 代碼如下 #tip {backgrou ...