首页 > 代码库 > 解决Django 1.5非域名访问产生的500错误

解决Django 1.5非域名访问产生的500错误

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;
    }
}


参考:

http://stackoverflow.com/questions/17149435/avoiding-djangos-500-error-for-not-allowed-host-with-nginx


解决Django 1.5非域名访问产生的500错误