Nginx禁止IP或者未绑定域名访问

18 Dec, 2011

在配置博客运行环境时发现,由于VPS使用的是独立IP,这样就可以通过IP地址直接访问博客,这点还是勉强可以接受的,不过这个IP可能是以前别人使用过并绑定过域名的,这就不好了,别人可以通过其他域名访问自己的博客,这就太不好了。

于是网上找了一下方法,试了一下都比较有问题,于是自己想了一个办法。主要就是使用default_server的方法。主要想法是,将自己的博客作为一个虚拟主机,而IP等访问则是访问default_server,而default_serverv我们可以让它跳转到博客或者直接让它出错。

还是看下面的Nginx.conf吧。

server {
        listen 80;
        server_name serholiu.com;

        # Allow file uploads
        client_max_body_size 50M;

        location ^~ /static/ {
            root /home/blog/app;
            if ($query_string) {
                expires max;
            }
        }
        location = /favicon.ico {
            rewrite (.*) /static/favicon.ico;
        }
        location = /robots.txt {
            rewrite (.*) /static/robots.txt;
        }
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://frontends;
    }
}

这个是我博客的配置文件,没什么好说的,使用Nginx做反向代理。如果只是这一个Server的话,访问IP或者其他绑定了这个IP的域名也会直接访问本博客,现在只需要一个Default Server就可以了,见下面:

server {
       listen  80 default_server;
       server_name  _;

        location / {
            root   /home/www;
            index  index.html index.htm;
        }
    }

这样,通过IP或者其他未指定的域名就会访问/home/www里的资源了,当然,可以直接让它报错。