这是我所编写的插件(包含Wordpress插件、PHPWind8.7插件、Discuz插件)在搜集用户反馈的使用中遇到的各种问题后,所做的一些排查的分享。希望能对大家有用,也希望大家在使用本人或者其它作者编写的插件时遇到问题后,先按帖子所描述的一些常见 问题排查原因,为自己、为开发者节省时间。
通常,OSS插件实现上传的功能需要这几个过程:
上载,
获取object URL(将URL直接写库)或者path(将路径写库,每次访问时拼凑生成一次URL)。
而上传功能,问题也可能发生最多。通常表现为:文件上传不了,OSS的BUCKET中无文件。
遇到这个问题,首先在SSH上排查下OSS的接口域名是否能PING通:
SSH执行
老接口
ping storage.aliyun.com
新接口
ping oss.aliyuncs.com
内网 老接口
ping storage-vm.aliyun-inc.com
内网 新接口
ping oss-internal.aliyuncs.com
若返回 name resolve faild之类,则是DNS解析不了。 解决办法:vi /etc/hosts将IP与OSS域名映射下即可。
若timeout,则通常是你的服务器与OSS接口服务器连接不通。这个通常是防火墙或者线路抽风导致的,如果有防火墙权限把OSS的接口地址、IP解封即可。如果没有权限 或者并非防火墙原因,就只能换服务器、线路了。
如果完全可以PING通,并且响应时间在200ms内,那么恭喜,你可以进入下一步了:
在SSH上执行:
老接口
curl http://storage.aliyun.com
新接口
curl http://oss.aliyuncs.com
内网 老接口
curl http://storage-vm.aliyun-inc.com
内网 新接口
curl http://oss-internal.aliyuncs.com
如果返回类似于:
<?xml version="1.0" encoding="UTF-8"?>
AccessDenied
Anonymous access is forbidden for this operation.
506ED3064AA1C34B2960F6E4
storage.aliyun.com
这样的数据,那么理论上与OSS的访问是无阻的了。如果能PING通,但获取不了数据,那可以试试OSS接口的8080端口:
老接口
curl http://storage.aliyun.com:8080
新接口
curl http://oss.aliyuncs.com:8080
内网 老接口
curl http://storage-vm.aliyun-inc.com:8080
内网 新接口
curl http://oss-internal.aliyuncs.com:8080
如果80不能使用,而8080可以使用,就可以将接口地址替换为8080端口的(造成80不通通常原因是防火墙导致)。
如果OSS能正常访问,并且提供的KEY/SECRET/BUCKET/OBJECT合法,但请求失败(会返回数据),得考虑下以下情况 :
1.WEB服务器与OSS服务器时差过大。
使用PHP代码检测:
<?php
date_default_timezone_set('Asia/Shanghai');//设置时区为中国时间
$time=date("H:i:s"); //用data()取得时间
echo $time;
?>OSS官方文档有介绍:使用OSS签名的时间与OSS服务器时间(标准北京时间)误差不得大于正负15分钟。否则将返回“SignatureExpired”。若检测到WEB服务器时间与北京时间误差超过15分钟,务必修正时间误差。
同时开发者需要注意,尽量获取北京时间来计算signature,避免因签名冲突导致请求失败。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。