天行健,君子以自强不息;地势坤,君子以厚德载物
当前位置:网站首页 > 网络运维 > 正文

Nginx只允许域名访问网站,禁止使用IP 访问80,443端口

作者:jinxijing发布时间:2020-03-08分类:网络运维浏览:110评论:0


导读:Nginx只允许域名访问网站,禁止使用IP访问80,443端口  一、背景为了避免别人把未备案的域名解析到自己的服务器ip而导致服务器被断网,需要在nginx...

Nginx只允许域名访问网站,禁止使用IP 访问80,443端口

 

 

一、背景

为了避免别人把未备案的域名解析到自己的服务器ip而导致服务器被断网,需要在nginx上设置禁止通过ip访问服务器,只能通过域名访问。

 

二、解决方法

如果网站只配置了 80 端口,那么按以下nginx配置:

新添加一个 server:

server{
listen80default;
server_name_;
return403;
}

 

重载nginx配置文件,然后用IP访问,显示如下:

 

果还配置了 443 端口,还需要加点配置:

server{
listen80default;
listen443default_server;
server_name_;
return403;

ssl_certificate/usr/local/nginx/cert/hello.pem;
ssl_certificate_key/usr/local/nginx/cert/hello.key;
ssl_session_cacheshared:SSL:10m;
ssl_session_timeout5m;
ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocolsTLSv1TLSv1.1TLSv1.2;
ssl_prefer_server_cipherson;
}

 

为什么要加上ssl证书的配置?

Nginx 上对于使用 SSL协议的虚拟主机,如果不配置SSL证书的时候访问会出现协议错误,哪怕端口上配置了其它网站也会报错。解决方法就是随便生成一个证书配置进去。

就是说 443端口如果也跟 80端口那样子的配置,使用https方式访问正常的域名也会被拒绝连接。

 

重载nginx配置文件,然后用IP访问,显示如下:

 

使用IP访问80、443返回 403 Forbidden,使用域名访问正常。

还有一种解决方法,就是在server里加上一段正则匹配:

listen80;
server_namewww.xxxxxxxx.com;
if($host!='www.xxxxxxxx.com'){
return403;
}

标签:Nginx443Linux


持是利
坚就胜