公司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;
? }
}