Nginx 如何禁止未绑定域名或 ip 直接访问
最近通过百度统计发现很多访问我网站的入口页面竟然不是我自己的域名,我进去一看,除了域名,网站内容与我的一模一样。通过查资料和分析得知,是有人把域名解析到了我的服务器IP上。我猜目的可能是利用我网站内容来养他的域名,这样既不用买服务器,也不用投入时间搞内容就能把域名的权重提上去。为此,我查询资料并总结以下方法来解决此问题:
一、禁止所有未绑定域名或 ip 直接访问网站
http 80 端口 Nginx 配置如下:
server {
listen 80 default_server;
server_name _;
return 403;
}
https 443 端口 Nginx 配置如下:
# 注意:ssl_certificate ssl_certificate_key 这两行配置必须要有,否则 Nginx 会拒绝所有443的连接
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate cert/2546685_www.678fly.cn.pem;
ssl_certificate_key cert/2546685_www.678fly.cn.key;
return 403;
}
二、rewrite 所有未绑定域名或 ip 到自己的域名网站
当然,除了禁止,我们还可以重写URL,将链接跳转到我们自己绑定的域名网站(个人推荐方法)
http 80 端口 Nginx 配置如下:
server {
listen 80 default_server;
server_name _;
rewrite ^(.*) http://www.678fly.cn;
}
https 443 端口 Nginx 配置如下:
# 注意:ssl_certificate ssl_certificate_key 这两行配置必须要有,否则 Nginx 会拒绝所有443的连接
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate cert/2546685_www.678fly.cn.pem;
ssl_certificate_key cert/2546685_www.678fly.cn.key;
rewrite ^(.*) https://www.678fly.cn;
}
What more ?
你以为这样就结束了,别人就解析不了你的网站了吗?
嗯,绝大多数情况是这样的。但是,如果你的网站是通过nginx反向代理的,当别人知道你的实际应用端口(80,443只是代理端口,以上方法可以禁止)还是可以通过我的ip+实际端口 或者他的解析到我ip的域名+实际端口解析到我的网站。那么,该如何禁止呢?
本博客被恶意解析,如图所示:
![](https://img.haomeiwen.com/i7221327/08a3ee24c5461a17.png)
通过谷歌查找资料,得到一些启发:通常经过nginx代理的一些应用里面的配置,都有可以将当前应用的访问IP绑定在本服务器(localhost或者127.0.0.1)的配置项,外部ip无法直接访问到本应用,但是可以经过我们的nginx代理访问到,而我们的nginx只代理80和443端口(经过以上文档,这两个端口是无法被未绑定域名和ip直接访问的,哈哈),这样就完美的避免了我们的域名被恶意解析了。
elasticsearch 的解决方法
![](https://img.haomeiwen.com/i7221327/a2123ebd62a4f7d3.png)
Tomcat 的解决方法
![](https://img.haomeiwen.com/i7221327/4d9ea5e21993762b.png)
Leanote(蚂蚁笔记)的解决方法
![](https://img.haomeiwen.com/i7221327/eaef2a0e9fbf4644.png)
#------------------------
## leanote config
#------------------------
## http.addr=0.0.0.0 # listen on all ip addresses 可以看到原配置是允许所有ip直接访问的
http.addr=127.0.0.1 # 这里绑定localhost,只能通过本服务器内部转发(nginx代理)访问
http.port=9000
网友评论