记一次配置 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的站点现并不是很好用,但是也许能有一些帮助,分享一下
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!