开篇说明:此方法和网上其他的方法不同,我觉得更好理解,步骤我写的很详细。
百度大力提倡使用https,然而自家的产品却还在使用http,例如百度分享、百度站内搜索等,但是没办法,该用还是得用(此处应该有无数只草泥马在奔腾)。
今天吴昊博客开始使用百度站内搜索,发现提示不安全脚本,无法显示搜索框,因为吴昊博客走的是https协议,所以浏览器屏蔽了百度站内搜索代码。
全网搜索了很久,几乎就那么两种方法,并且网上的方法也是过去式了,代码还需要调整,而且全部都一模一样的(此处也应该有草泥马奔腾)。
就在一筹莫展时,突然想到为何不用Nginx做个反向代理呢,直接配置个https安全的域名反向代理到http://znsv.baidu.com,这样一切不就解决了。
看到此处,如果你不是小白,根据这个思路你已经知道怎么解决了(但是你还是要看完本文,因为有些问题)!!!
通过Nginx反向代理完美解决百度站内搜索不支持https的问题:
1、申请https证书
我这里申请的是阿里的免费证书,申请证书流程这里不细说了,如果不会请百度。
2、Nginx反向代理配置
证书申请好后,开始配置nginx,nginx安装过程略,nginx配置内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 443 ssl http2; #证书 ssl_certificate ssl/2079611_so.whsir.com.pem; ssl_certificate_key ssl/2079611_so.whsir.com.key; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; server_name so.whsir.com ; location / { proxy_pass http://znsv.baidu.com; } } |
我这里使用so.whsir.com域名反向代理到http://znsv.baidu.com。
3、配置百度站内搜索代码
在https://zn.baidu.com配置好域名,使用嵌入式,PC嵌入1:简约灰,最后查看代码。
方法一:
百度站内搜索默认代码如下:
1 |
<script type="text/javascript">(function(){document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E'));var bdcs = document.createElement('script');bdcs.type = 'text/javascript';bdcs.async = true;bdcs.src = 'http://znsv.baidu.com/customer_search/api/js?sid=17619810895336209718' + '&plate_url=' + encodeURIComponent(window.location.href) + '&t=' + Math.ceil(new Date()/3600000);var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(bdcs, s);})();</script> |
更改后的百度站内搜索代码:
1 |
<script type="text/javascript">(function(){document.write(unescape('%3Cdiv id="bdcs"%3E%3C/div%3E'));var bdcs = document.createElement('script');bdcs.type = 'text/javascript';bdcs.async = true;bdcs.src = 'https://so.whsir.com/customer_search/api/js?sid=17619810895336209718' + '&plate_url=' + encodeURIComponent(window.location.href) + '&t=' + Math.ceil(new Date()/3600000);var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(bdcs, s);})();</script> |
其中仅是将http://znsv.baidu.com替换成https://so.whsir.com。
以wordpress为例,自定义侧边栏小工具,选择文本(不要选可视化),将代码添加进来并发布。
访问https://blog.whsir.com,不断的刷新,你会发现下图所示内容,偶尔显示搜索框,偶尔不显示,显示搜索框时,浏览器提示非完全安全,不显示搜索框时提示加载不安全脚本。
方法一功能可以实现百度站内搜索了,但是很不稳定,并且浏览器也不显示安全的锁了。
方法二:
通过代码实现
我这里还是通过https://so.whsir.com域名反向代理,只不过代理的后端换成http://zhannei.baidu.com,此时nginx反向代理location内容如下
1 2 3 |
location / { proxy_pass http://zhannei.baidu.com; } |
wordpress侧边栏添加小工具,代码如下,请将以下代码添加到自定义HTML中,value值自行更换下,注意:是添加到自定义HTML中!
1 2 3 |
<form id="cse-search-box" class="search-form" action="https://so.whsir.com/cse/search" target="_blank"><input name="s" type="hidden" value="17619810895336209718" /> <input name="q" type="text" class="form-control" id="q" placeholder="搜索..." size="28" /> <input id="go" class="btn" type="submit" value="搜索" /></form> |
以上内容配置完成后平滑重启nginx,wordpress中发布代码内容。
访问https://blog.whsir.com,刷新博客首页发现此时已显示安全的连接
我这里再试下搜索功能,由于在加密的网页中引入了不安全的连接,搜索部分内容无法显示了,其中http://i7.baidu.com/地址显示403,图片无法正常显示,如下图所示
方法二实现绿锁,但是搜索结果图片不显示,你难道会认为这样我就满足了吗,当然是不可能的,于是继续尝试修改!
方法三:
因为nginx反向代理的地址是http://zhannei.baidu.com,于是我想403应该是百度那边的原因。
配置百度站内搜索做CNAME解析,在百度站内搜索结果页管理中,配置CNAME域名,注意我这里使用了一个新的域名。
由于域名托管于阿里云,所以我需要在阿里云域名解析中配置CNAME别名到zhannei.baidu.com,如下图所示
然后还是通过https://so.whsir.com域名反向代理,此时代理的后端地址换成http://search.whsir.com,nginx反向代理location内容如下
1 2 3 |
location / { proxy_pass http://search.whsir.com; } |
wordpress侧边栏自定义HTML中的代码不需要更改,因为我这里只是更换了一个后端的域名。
访问https://blog.whsir.com,刷新博客首页发现此时已显示安全的连接。
继续查看百度站内搜索页,虽然还是没显示绿锁,但是图片已经没问题了,可以看到http://i7.baidu.com状态已显示200
综上几种方法,无疑最后一种是最好的,虽然在搜索页还残留http协议连接,但是图片什么的都可以正常显示了,正常使用百度站内搜索已无问题了。
总结:百度一个https配置就可以搞定的事情,最后饶了这么一大圈,博主也是实属无奈,文章首发于吴昊博客,如果觉得本文帮助到了你,期待你的赞赏。
原文链接:独家完美解决百度站内搜索不支持https问题,转载请注明来源!