nginx禁止IP直接访问
网站的服务器如果可以直接通过IP访问到那肯定是有隐患的,所以大部分的网站都会将服务器的IP直接访问给禁掉。
http访问
网站如果没有开启https访问,我们只需要添加一个简单的默认server即可。
server {
listen 80 default_server;
server_name _;
return 403;
}
server_name
不填都可以,主要就是利用nginx的默认server来实现,匹配规则时如果没有匹配到我们配置的正常规则就会使用默认的server,然后返回设置的code。code为403则会返回一个nginx的403页面,返回其他非常规http code则会直接与客户端断开连接。
https访问
网站如果开启了https访问就需要在监听80端口的同时监听443端口,否则使用https加IP还是能直接访问到网站。但是这次就不是简单的加个监听443端口就可以的,还需要将https证书也配置上,否则nginx将无法启动。
server {
listen 80 default_server;
listen 443 default_server;
server_name _;
#ssl证书配置,可以使用域名的证书配置
ssl_certificate cert/yourcrt.crt;
ssl_certificate_key cert/yourkey.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
return 403;
}
遭遇的坑
我之前就是以为http的监听80端口,加个443端口就可以同时把两种访问方式都禁掉,事实是我异想天开了,也是对nginx了解的不够深入。于是就一直启动不起来,查看日志提示信息是下面的内容。
no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/nginx.conf:40
经过一番查阅资料得知只要是对https的处理都需要证书,还发现让IP的server使用域名的证书也可以通过检查。