1. 问题描述
我们的一些站点可以通过 IP 地址直接访问,虽然没有安全问题,但是通过 IP 地址直接访问,却会带来其他问题。比如,在 SEO 中,开启 IP 访问,如果有其他域名解析到我们的主机上,那对方的域名也是可以打开的,这样百度上就会出现两个一模一样的网站,就会被认为是垃圾站,一起被降权。
因此,我们希望禁止禁止这种形式的访问,并且“禁止”的含义为不做任何响应,就好像我们并不存在。
该笔记将记录:在 Nginx 中,如何禁止通过 IP 地址访问的请求,以及常见问题的处理。
2. 解决方法
2.1. 方法一、返回 404 或者重定向
在多数情况下,我们可以返回 404 或者重定向到我们的主域名:
server {
listen 80 default_server;
server_name ""; # 不重要
return 404;
}
server {
listen 80;
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
default_server:表示该 server 为默认 server(用于处理通过 IP 地址访问的请求,以及那些没有绑定的域名)。如果没有 server {} 使用 default_server 指令,则使用首个 server 配置。
2.2. 方法二、完全不响应请求
server {
listen 80 default_server;
server_name _; # 不重要
return 444;
}
return 444:该响应码表示不响应请求,并立即关闭连接。
通过 curl 测试,将返回 curl: (52) Empty reply from server 信息。
3. 参考文献
Module ngx_http_core_module / listen(http://nginx.org/en/docs/http/ngx_http_core_module.html#listen)
Nginx / Server names(http://nginx.org/en/docs/http/server_names.html)
Blocking IPs with Nginx – DreamHost Knowledge Base(https://help.dreamhost.com/hc/en-us/articles/216456127-Blocking-IPs-with-Nginx)
How to block access using the Server IP in NGINX? | DigitalOcean(https://www.digitalocean.com/community/questions/how-to-block-access-using-the-server-ip-in-nginx)
nginx - how to disable direct access to a web site by ip address - Stack Overflow(https://stackoverflow.com/questions/29104943/how-to-disable-direct-access-to-a-web-site-by-ip-address )
本文暂时没有评论,来添加一个吧(●'◡'●)