网站的服务器如果可以直接通过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使用域名的证书也可以通过检查。