尝试在AWS EC2上运行模拟apns服务。
使用apns2库,curl和简单的go程序的连接效果很好。
但是,当使用pushy时,查询会通过HTTP 1/1 400 Bad Request在负载均衡器处停止。因此,无法访问模拟apsn服务。
看来pushy正在尝试协商使用http2,但它也在解析主机名的CNAME以发出该请求。 EC2实例的主机名没有SSL证书,并且AWS不允许EC2实例拥有自己的证书。 SSL通过负载平衡器完成。这就是为什么我猜它会收到Bad Request错误的原因。
是否有某种方法可以使pushy.apns直接进入h2,而无需进行协商。 apple APNS服务的工作原理很简单,只需替换curl和我正在使用的示例中的主机名即可。
请求请求的日志输出类似于
https 2018-10-12T08:19:30.301789Z app/pushproxy/7ba468ea0d0278b2 86.172.XX.230:61136 - -1 -1 -1 400 - 0 288 "- https://pushproxy-XXXXXXX.eu-west-2.elb.amazonaws.com:443- -" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 - "-" "-" "arn:aws:acm:eu-west-2:914858662894:certificate/XXXXXX-d957-4e9d-bda6-00c2f42a6e3a" - 2018-10-12T08:19:30.286000Z "-" "-"
卷曲请求看起来像
h2 2018-10-12T08:13:43.142341Z app/pushproxy/7ba468ea0d0278b2 86.172.XX.230:60860 172.31.27.35:443 0.000 0.002 0.000 200 200 239 78 "POST https://pushproxy.mycompany.com:443/3/device/a9001c6cbf953a9b2820f4da9c7f8d37e84338460304a2ce0a04a32e85ca2532 HTTP/2.0" "curl/7.61.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:eu-west-2:914858662894:targetgroup/pushProxy/252675c1a61756ea "Root=1-5bc057b7-a61a4ca4d5880b40f00d17c0" "pushproxy.mycompany.com" "arn:aws:acm:eu-west-2:914858662894:certificate/XXXXXXX-a34f-415b-b687-8789cf21197f" 0 2018-10-12T08:13:43.140000Z "forward" "-"
curl命令
curl -v -d '{"aps":{"alert":"<message>","badge":42}}' \
-H "apns-id: 45454554646445454433433334332344" \
-H "apns-topic: com.2mee.Bridge2Mee" \
-H "apns-priority: 10" --http2 \
--cert pushcert.pem https://pushproxy.mycompany.com/3/device/a9001c6cbf953a9b2820f4da9c7f8d37e84338460304a2ce0a04a32e85ca2532