开发者社区> 问答> 正文

归纳下使用OSS插件时,通常遇到问题的状况

这是我所编写的插件(包含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"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Anonymous access is forbidden for this operation.</Message>
  <RequestId>506ED3064AA1C34B2960F6E4</RequestId>
  <HostId>storage.aliyun.com</HostId>
</Error>
这样的数据,那么理论上与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,避免因签名冲突导致请求失败。



2.上传的文件过大,超出max_execute_time
通过OSS插件上传文件,通常需要经过两次上传:1是上传到WEB服务器,2是中转到OSS
如果上传的文件过大,可能导致在上传到WEB服务器时,超出PHP的 max_upload_size 而导致上传失败。 此时需要编辑PHP.INI对应参数以避免此问题出现。





如若upload_max_filesize和post_max_size其一小于上传的文件体积,均可造成上传失败。


如果上传文件上传到了WEB服务器,但中转到OSS时失败,通常是因为文件比较大,导致上传时间相比小文件要消耗更久,触发了PHP.ini的max_execute_time参数,导致程序中止。可以通过下面代码来设置超时时间。
@ini_set('max_execution_time', 0);




3.OSS账户欠费
在OSS账户欠费时,将导致所有BUCKET不再可用,并且所有请求将返回UserDisabled的错误。
解决办法:充值,恢复服务。

*在OSS被禁用后,长时间不充值恢复服务,数据将会被抹去。

展开
收起
enj0y 2012-10-05 20:33:57 12632 0
4 条回答
写回答
取消 提交回答
  • Re归纳下使用OSS插件时,通常遇到问题的状况
    我晕的是无论我怎么样上传都不行,我的论坛是utf8
    可以帮我解决的话Q324444144
    2012-11-01 16:10:00
    赞同 展开评论 打赏
  • Re归纳下使用OSS插件时,通常遇到问题的状况
    对啊,最常发生的是文件上传不了
    2012-10-10 13:51:30
    赞同 展开评论 打赏
  • 回 1楼(coderandroid) 的帖子
    还没写完哩亲。。。
    2012-10-07 12:03:21
    赞同 展开评论 打赏
  • Re归纳下使用OSS插件时,通常遇到问题的状况
    Q&A?
    2012-10-07 07:15:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载