公司app后端服务用阿里云服务器,图片和style存储在阿里云oss上,app主体采用webview加载h5。按照网上解决方案,服务器开启ipv6,注册tunnelbroker.net添加隧道,添加aaaa解析,dns更换成dns.he.net等提交苹果审核N次都过不了,都是因为ipv6无法访问。后来发狠解决,终于通过,下面记录下重点几条:
1. 后端服务器及域名
域名解析采用万网的(dns服务器不支持ipv6没关系),升级到企业版,勾选海外线路解析。
2. 配置海外服务器转发
在Linode上购买台5$的服务器,支持ipv6,机房选择美国的,安装nginx如下:
wget http://nginx.org/download/nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --prefix=/usr/soft/install/nginx112 --with-ipv6 --with-http_stub_status_module --with-http_sub_module --add-module=/usr/soft/install/ngx_http_substitutions_filter_module
make
make install
配置如下:
server {
listen 80;
listen [::]:80;
server_name a.domain.cn;
location / {
proxy_pass http://a.domain.cn;
}
}
3.后端服务器添加aaaa记录解析到上面海外服务器
在http://ipv6-test.com/validate.php测试前面测试通过如下
4. oss style及图片转发
oss style及图片域名是cname到oss上,cname不能和aaaa同时共存,需要将oss绑定的域名c.domain.cn替换成另个域名cipv6.domain.cn,然后cipv6.domain.cn 解析aaaa记录到海外服务器,海外服务器在代理到oss c.domain.cn 上。具体解决方案如下:
4.1 在应用服务器ngixn上将响应内容c.domain.cn 全部替换成 cipv6.domain.cn,
subs_filter_types *;
subs_filter c.domain.cn cipv6.domain.cn g;
proxy_pass http://jettyserver;
proxy_set_header Accept-Encoding "";
4.2 将cipv6.domain.cn 添加a和aaaa记录解析到 Linode海外服务器
4.3 在Linode海外服务器上配置代理到阿里云oss上,缓存需要开启下
server {
listen 80;
listen [::]:80;
server_name cipv6.domain.cn;
location / {
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://c.domain.cn;
expires 1d;
}
}