Nginx配置网站下,http请求使用https请求会乱

出现的问题:

我在nginx中配置了多个门户网站,有配置https的和http网站的。在启动后一切访问都是正常的,但在百度抓取时就不正常了,本来抓取http网站时,却抓取了https的内容。然后我经过尝试将http网站用https的方式访问,居然能呈现出https网站内容。

这就让我感觉不可思议了,案例来说,我配置的是http网站,如果用https应该无法访问才对的。

原因:

原理:在nginx配置多个server时,如果http网站采用https访问时,nginx由于匹配不到https所以就会重定向转发为当前服务器IP:443进行访问,从而从本地nginx中进行查找443的serve,注意:此时已经重定向了,server_name的限制已经不存在了,只查找ip:443的网站,如果没有显式声明 default server 则第一个 server 会被隐式的设为 default server。

访问流程:

  1. 匹配网址和访问类型,如果都能匹配上,则返回
  2. 类型匹配不上,则由nginx进行转发当前ip:443
  3. nginx匹配当前默认的443网站,如果没有配置则查找第一个443网站内容进行返回

解决办法:

提示:配置一个默认的https 也就是http ssl 443 default_server,只要不是相同类型访问的,统一都访问到当前server去,并且可以直接return 500

例如:

server {
	listen 80 default_server;
	listen 443 ssl http2;
	 server_name _;
    return 403; # 403 forbidden
}

当然也可以直接给http网站配置一个SSL证书进去,这样也不会出现这种情况了。
至于获取免费的SSL证书和配置可查看:链接: 证书获取和配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值