小米华为苹果推送相关Nginx转发推送配置## 标题
1.1推送类型及涉及的推送url
目前涉及到的推送类型包括:
1)、APNS苹果推送
2)、华为厂商推送
3)、小米厂商推送
4)、魅族厂商推送
5)、极光推送
APNS苹果推送协议有新旧两种,它们都是tcp协议。
基于socket二进制老的apns服务涉及的域名和端口是:
域名: gateway.push.apple.com
gateway.sandbox.push.apple.com
端口:2195
基于http/2协议新的apns服务涉及的域名和端口是:
域名:api.push.apple.com
api.development.push.apple.com
端口:443
华为厂商推送涉及2个url,一个是获取华为token的url,一个是推送的url,它们都是https协议,端口默认是443。
获取token的url:https://login.vmall.com/oauth2/token
推送消息的url:https://api.push.hicloud.com/pushsend.do
小米厂商推送涉及一个url,是https协议,端口默认是443
推送消息url:https://api.xmpush.xiaomi.com/v3/message/regid
魅族厂商推送涉及2个url,一个是通知消息url,一个是透传消息url,它们都是http协议,端口号默认80
通知消息url : http://server-api-mzups.meizu.com/ups/api/server/push/varnished/pushByPushId
通知消息url :http://server-api-mzups.meizu.com/ups/api/server/push/unvarnished/pushByPushId
极光推送涉及一个url,是https协议,端口默认是443
推送url:https://api.jpush.cn/v3/push
1.2Nginx转发规则配置
1.2.1Nginx转发推送请求说明
由于通知服务一般部署在内网,不能直接访问外网,导致上述推送的url都不能访问,现阶段是将推送请求转发到一个专门的web应用,由应用去转发推送请求。
为了不用额外的应用,可以将通知服务的推送请求转发到Nginx服务器,由Nginx服务器再转发到外网的第三方推送服务器。
由于推送服务的地址都是域名,要想将推送请求先转发到Nginx,再由Nginx转发到原外网地址,有2种方式:
1)、将原推送地址域名(可能写在第三方jar包中)改成Nginx的ip和监听端
口(原地址在jar中的,如苹果、小米、魅族、极光,需要改源码,再编译放到原jar包中)。
2)、修改通知服务所在服务器的hosts文件,将推送的域名如gateway.push.apple.com映射为Nginx的服务器ip。
然后在Nginx中监听原推送服务的端口,如2195端口,再路由到真正的推送外网服务域名和端口。是http/https协议的,需要配置location节点来转发,是tcp协议的,需要配置upstream节点来转发。
注:Nginx默认安装是不支持转发tcp和https请求的,需要在编译时加上–with-stream --with-stream_ssl_module --with-http_ssl_module参数。另外由于Nginx中配置监听https的443端口需要https证书,为了简化流程,通知服务转发推送请求到Nginx时,https协议最好都改成http协议(涉及改源码中http协议的有小米推送、极光推送)。
3.2.2Nginx转发具体改动点
基于二进制socket老的apns推送
添加如下hosts配置:
在nginx中增加stream节点,侦听2195端口:
基于http/2协议新的apns推送
添加如下hosts配置:
基于pushy框架开发新的apns推送时,可以自定义指定服务器的ip和端口,ip我们可以用框架中的 api.push.apple.com即可,端口可以随意指定,不要和其他推送服务端口冲突即可,如定义为2196,然后在nginx中像老的apns协议配置一样,监听2196端口,配置一个upstream和server节点:
华为推送
添加如下hosts配置:
将代码中的https协议修改为http协议即可:
然后在Nginx中侦听80端口:
小米推送
添加如下hosts配置:
修改源码中的Constants类如下:
如果不想改源码,在调用推送代码前,也可以加一行代码,将https协议改为http协议:
然后在Nginx中侦听80端口,加入location:
魅族推送
添加如下hosts配置:
魅族推送本身是http协议,只要在Nginx中侦听80端口,加入location即可:
极光推送
添加如下hosts配置:
修改源码中ClientConfig类
然后在Nginx中侦听80端口,加入location:
通知服务服务器总的hosts文件修改示例
10.1.0.0 gateway.push.apple.com
注:如果推送原https协议都改成了http协议,则只要监听80端口即可:
Nginx路由规则配置示例: