Nginx禁止IP访问以及Server_name的特性

如果您的nginx没有设置禁止ip访问,后果还是很严重的,很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。

官方文档中提供的方法:

If you do not want to process requests with undefined “Host” header lines, you may define a default server that just drops the requests:

server {
listen 80 default_server;
server_name _;
return 444;
}

也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:

server {
listen 80 default_server;
server_name _;
rewrite ^ http://www.domain.com?request_uri?;
}

如果你在使用nagios或者cacti监控nginx的状态,其他的用ip访问的所有请求都被跳转到域名上,还得修改如下:

server

listen 80 default_server;

server_name _;

location /server-status {

stub_status on;

access_log off;

}

location /{

rewrite ^ http://www.domain.com?request_uri?;

}

注意事项:

如果是一下设置:

server {
listen 80 default;
rewrite ^(.*) http://www.jbxue.com permanent;
}

别人使用IP不能访问,但是如果在应用server_name后跟多个域名的时候,其中有域名不能访问。

比如:

server {

listen 80;

server_name www.domain.com domain.com

}

这样的话,使用domain.com不能访问网站,而www.domain.com可以访问,使用Nginx -t检查配置文件会提示warning:

[warn]: conflicting server name “domain.com” on 0.0.0.0:80, ignored
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

只能通过在listen 80 default后面再加server_name _;解决。

完整的配置如下

server

listen 80 default_server;

server_name _;

location /server-status {

stub_status on;

access_log off;

}

location /{

rewrite ^ http://www.domain.com?request_uri?;

}

此条目发表在Nginx分类目录。将固定链接加入收藏夹。