让百度蜘蛛/360蜘蛛/winxp用户不访问https页面

2017-01-09发布在 SEO297 次访问

spiderrobot

友情提醒:纯个人技术兴趣文章,外贸类读者可跳过~

写这篇文章的时候总觉得标题很拗口,但是总算是能看懂。

先说说百度搜索和360搜索。众所周知,百度对 https 一直不太友好,基本不怎么抓取。自从料网开启 https 之后,新的页面百度就没有继续抓取收录了。虽然 Sam 在百度站长平台的站点属性中已经提交了 https 站点,但已经过去半个月了,依然新页面不怎么收录,于是就想着一定要想点办法解决这个问题。

思考了一下,判断一下 http_user_agent 即可。http 80 端口,https 443 端口,两个端口做判断,各自重定向。让百度蜘蛛/360蜘蛛来的时候不访问 https 页面,还是访问原来的 http 页面,这样就能保证正常抓取了。让正常浏览用户访问的时候访问 https 页面。

OK,说干就干。

修改 lnmp下的网站 nginx 配置文件 /usr/local/nginx/conf/vhost/www.xyz.com.conf

注意两个 server 段都要写网站路径 root /home/wwwroot/…..

判断访问的是搜索引擎蜘蛛还是正常浏览用户,把蜘蛛重定向到http页面

server
 {
 listen 80; 
 server_name www.liaosam.com liaosam.com;
 root /home/wwwroot/www.liaosam.com;
 
 # 如果 http_user_agent 不匹配百度蜘蛛、360蜘蛛,则正常跳转 https(若需要加入更多,请以分隔符隔开)
 if ($http_user_agent !~* "BaiduSpider|360Spider") {
 return 301 https://www.liaosam.com$request_uri;
 }

}

server
 { 
 listen 443 ssl http2;

ssl_certificate /etc/letsencrypt/live/liaosam.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/liaosam.com/privkey.pem;

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;
 ssl_session_cache shared:SSL:10m;
 
 server_name www.liaosam.com liaosam.com;
 root /home/wwwroot/www.liaosam.com;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
 # add_header Strict-Transport-Security max-age=15768000;
 
 # OCSP Stapling ---
 # fetch OCSP records from URL in ssl_certificate and cache them
 ssl_stapling on;
 ssl_stapling_verify on;
 resolver 8.8.8.8 8.8.4.4 valid=300s;
 resolver_timeout 5s;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;

index index.html index.htm index.php default.html default.htm default.php;
 
 include wordpress.conf;
 #error_page 404 /404.html;
 include enable-php.conf;  (请勿参考本人443端口配置详情,不一定适合你)
 
 # 如果 http_user_agent 匹配到百度蜘蛛、360蜘蛛等访问,则跳转到http(若需要加入更多,请以分隔符隔开)
 if ($http_user_agent ~* "BaiduSpider|360Spider") {
 return 301 http://www.liaosam.com$request_uri;
 }

# 此处是安全措施,禁止任何 uploads里的php文件执行 
location /wp-content/uploads/ { 
 location ~ .*\.(php)?$ { 
 deny all; 
 } 
 }

location ~ [^/]\.php(/|$)
 {
 try_files $uri =404;
 fastcgi_pass unix:/tmp/php-cgi.sock;
 fastcgi_index index.php;
 include fastcgi.conf;
 }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
 {
 expires 30d;
 }

location ~ .*\.(js|css)?$
 {
 expires 12h;
 }

location ~ /\.
 {
 deny all;
 }

access_log off;
 }

保存,上传覆盖原 .conf ,重启 nginx。这样就OK了。

WinXP系统浏览器不支持 ssl https

我用的是 xp 系统,用 360 浏览器怎么打不开 https 开头的网站呐?

XP 系统的浏览器对 https 就是天生没有预设开启支持。你可以让你的网站浏览者在他的浏览器设置里手动设置一下,支持 ssl。但你不可能告知所有 XP 的潜在浏览者。

今天就碰到了这个问题,有料友反映料网无法访问。

winxp-support

经过一番设置,解决了问题。还是通过 http_user_agent 来判断。增加上判断浏览者的系统是否是 XP 系统,如果是,让他们去访问 http 的页面就可以了。

在判断条件那里加上 XP 系统条件:

server 80 段

# 如果 http_user_agent 不是百度、360、XP系统等访问请求(正常访问者),则正常跳转 https

 if ($http_user_agent !~* "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 2.0.50727;\ .NET\ CLR\ 3.0.4506.2152;\ .NET\ CLR\ 3.5.30729\|Windows\ NT\ 5.2|BaiduSpider|360Spider") {
 return 301 https://www.liaosam.com$request_uri;
 }

server 443 段

# 如果 http_user_agent 识别到匹配到百度、360、XP系统等访问请求,则跳转到 http

 if ($http_user_agent ~* "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 2.0.50727;\ .NET\ CLR\ 3.0.4506.2152;\ .NET\ CLR\ 3.5.30729\|Windows\ NT\ 5.2|BaiduSpider|360Spider") {
  return 301 http://www.liaosam.com$request_uri;
 }

最后,覆盖 .conf ,重启 nginx。

注意:

1)如果 XP系统条件你只写了 Windows\ NT\ 5.1|Windows\ NT\ 5.2 那么很可能是不成功的。因为 XP 版本较多,必须写全。

2)两个 server 段必须写上网站目录

思考

既然蜘蛛的访问我们可以用 http_user_agent 来引导,那么 mobile 的访问应该也可以用 http_user_agent 来引导。如果需要对手机访问网站的浏览者做一些重定向,那么应该也是可以的。我想了一下,好像我没什么需求,就不去试验了。

 

 

本站所有文章除注明“转载”的文章之外,均为原创。未经本站允许,请勿随意转载或用作任何商业用途,否则依法追究侵权者法律责任的权利。

分享到微信朋友圈

LiaoSam
LiaoSam
外贸综合症患者

抢沙发

发表我的评论

取消评论

邮箱白名单说明:最近料网自动提醒邮件经常会被一些邮件服务商拦截。为了您顺利并及时地收取留言被回复的提醒邮件,请在您邮箱中把料网 liaosam.com 加入白名单域名。

已读说明
设为私密评论
添加表情

Hi,您需要填写昵称和邮箱!

您的邮箱地址不会公开,仅仅用于收取回复。建议填写QQ邮箱,不宜填写工作邮箱。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (没有就留空)