Django 1.5開始提供了一個新的,而且是必需開啓的特性:通過設置ALLOWED_HOSTS,來限制訪問的域名。只有通過綁定好的域名才能訪問站點,而通過IP地址或非綁定到此站點的方式,則會被拒絕(默認會產生一個500錯誤)。
這是一個非常棒的特性,但他也有一個副作用,那就是會產生一大堆的500錯誤,而如果不懷好意的人,通過掃描IP等方式騷擾你的服務器的話,會讓你不敢其擾,而且在一定程度上也拖慢了系統的反應能力。畢竟產生500錯誤也是要消耗一些計算資源的,而且是昂貴的django資源!
解決的辦法就是,在前端服務器上將非域名訪問直接阻止掉,不讓他透傳到django上。如。在nginx上可以通過以下方式解決:
server {
listen 80 default;
location / {
# or show another site
return 403 "Forbidden";
}
}
server {
listen 80;
server_name $your_domain;
location / {
uwsgi_pass unix:$your_django_sock;
include uwsgi_params;
}
}
參考: