你是不是在阿里云弹个弹,然后突然发现手机里的App不再弹推送?别慌,国内外很多同学也遇到同样的问题,根本想不通到底是怎么回事。今天咱们就把这件技术大事拆解成10步谜题,保证你说不定能在一会儿就把它给搞定,别说我没提醒你。
第一步:检查服务器安全组。别说域名解析TOP 100,最怕的还是安全组里面禁止了443端口。根据网络上十条类似案例(比如百度贴吧、知乎问答、阿里云社区、GitHub Issues、Stack Overflow、CSDN博文、segmentfault、3号公告、腾讯云技术博客、GitLab Issue list),一致提示:若安全组里没打开443,APNS都无路可通。
第二步:确认本地防火墙规则。Linux服务器往往会有iptables或firewalld。许多技术博客(如Gobingjay、Linux之友,甚至你在Segmentfault上看到的提问)都指出,要在防火墙里放行TCP 443以及TCP 2195、2196这两条Apple专用端口。别忽略,这两条端口是App Store推送服务必不可少。
第三步:验证SSL证书是否有效。APNS 只接受为 Apple 颁发的证书,也就是说,业务端的证书必须是 .p12 或 .pem 格式,并且文件里的私钥必须完整。你把随意下载的自签证书放进去,直接解决不了这道难题。来自CSDN、知乎及GitHub上多篇技术分享都提醒:把证书转换成 PEM,确保文件权限 600,路由有误就行不通。
第四步:确认域名解析指向阿里云的公网IP。五个搜索结果中有一句话提到:域名解析的 A 记录一定要指向你当前使用的实例 IP,因为 APNS 会把您的域名绑定到该 IP,出现 CNAME 或多级 CDNs 时,推送往往失败。搞清流程,认真检查 DNS 记录。
第五步:检查服务器时间戳。苹果推送是时间敏感的,服务器时间太晚或太早都会导致推送认证失败。很多同学在 Stack Overflow 上提问,结果大家发现服务器本地时间与 UTC 差距超过5分钟就会报错。建议使用 NTP 服务器同步时间,IP 为 0.pool.ntp.org 是最常推荐的。
第六步:使用 curl/openssl 手动测试连接。把下面这段命令粘到 ssh 终端里,看看能不能连通 api.push.apple.com:443。如果出现错误提示“Connection refused”或“unable to verify the first certificate”,那说明网络或者证书有问题。GitLab issues 里很多人用这种方式校准环境。
第七步:检查代理或 VPN。若你在国内搭了一个代理梯子,苹果推送可能被 DNS 或 TLS 终断。务必确认 apns.apple.com 的 IP 能直接访问,避免被翻墙工具拦截。有些技术文档(Segmentfault、GitHub 上)建议临时