记一次配置 nginx 禁止 ip 访问 https 链接的爬坑经验

记一次nginx https爬坑经验

前提:我想要让我的nginx服务器禁止ip访问、只允许使用域名访问

问题:80端口可以正常屏蔽ip访问,可是443端口一旦设置,连域名都无法正常访问

上代码

   01  屏蔽80端口的ip访问 正常使用没有问题
   server {
       listen 80 default; 
       server_name _;
       return 502;
   }
   02  屏蔽443端口的ip访问
   server {
       listen       443 default_server;
       server_name  _; 
       return 502;
   }
   03  对外提供的域名访问设置
   server {
       listen       443 ssl;
       server_name  www.huangyingsheng.com;
       ssl on;

       ssl_certificate 2592983_www.huangyingsheng.com.pem;
       ssl_certificate_key 2592983_www.huangyingsheng.com.key;
       ssl_session_timeout 5m;

       charset utf-8;
       location / {
             echo "123"; 
       }
       location ~* \.(gif|png|jpg|swf|flv)$ {
             echo "456"; 
       }
       upstream tuling {
            server 127.0.0.1:8050       weight=5;
            server 127.0.0.1:8060       weight=1;
        }
   }

该设置完成后,02设置中(屏蔽443端口的ip访问)的配置会导致03配置也无法正常的被访问,(Nginx规则:首先查找配置文件里有无匹配的域名,如未找到,则查找default_server,如default_server未设置,则默认匹配配置文件排序后的第一个)

解决办法:为Nginx的443端口设置默认域名default_server,并拒绝访问,修改02配置中的方法:

   02  屏蔽443端口的ip访问
   server {
       listen       443 default_server;
       server_name  _;
       ssl on;

       ssl_certificate 2592983_www.huangyingsheng.com.pem;
       ssl_certificate_key 2592983_www.huangyingsheng.com.key;
       return 502;
   }

注意:

ssl_certificate 随便设置一个ssl证书;
ssl_certificate_key 随便设置一个ssl证书的key;

这两行配置必须要有,否则Nginx会拒绝所有443的连接(正常开启https的域名也会无法访问,大坑)


网上也有一些其他的配置方式,测试后发针对开启https的站点现并不是很好用,但是也许能有一些帮助,分享一下

cnblogs(运维那些破事)

Nginx 负载均衡演示之 upstream 参数 & location 参数

Nginx 服务器安装及配置文件详解


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!