用nginx proxy_pass 将IPv6请求转发到阿里云云服务器ECS
看到云友“yangpengp ”在帖子里希望使用“专有网络”网络类型的云服务器ECS也能通过IPv6地址访问到内容,能通过苹果APP的审核。
注意:如是苹果APP上架申请因无法IPv6-only访问被拒,请重点检查APP代码,苹果公司的参考文档并没有要求APP服务需要有IPv6地址:https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html
场景:
a. 阿里云国内地域的云服务器ECS没有分配有效的公网IPv6地址,但苹果APP审核时,可能会要求内容能通过IPv6地址访问
b. 国外服务商tunnelbroker.net,可以提供IPv6的隧道地址,使用的协议是6in4
c. 阿里云国内地域的云服务器ECS有“经典网络”和“专有网络”的网络类型,“经典网络”环境里可以使用tunnelbroker.net提供的隧道地址,“专有网络”则不可以,因为阿里云工程师确认在“专有网络”环境下不支持41协议 (更新:专有网络也可以使用he.net提供的隧道地址来设置了)
环境:
a. 国外配有IPv6地址的VPS
b. 阿里云“专有网络”的ECS
过程:
1.将域名(如liujia.anqun.org)分别做A和AAAA记录,A记录解析到阿里云ECS的公网IP(如121.40.22.38),AAAA记录解析到国外VPS的IPv6地址(如2602:ffc5:20::1:ebde)
2.在国外的VPS,配置虚拟主机配置文件,内容如下:
server {
listen [::]:80; # 监听IPv6的80端口
server_name liujia.anqun.org; # 站点域名
location / {
proxy_pass https://liujia.anqun.org/; # IPv4的站点访问地址
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3.重启nginx后,生效
4.在 http://ipv6-test.com/validate.php 测试,可以看到前两项通过。在 http://www.ipv6proxy.net/ 测试,可以看到页面内容
期望的结果是,如此设置,IPv4访问到阿里云的ECS,访问速度快,IPv6访问是经国外转发请求,可以通过苹果的APP审核。成本方面,国外的VPS有的较便宜,一年100元以下的也有不少商家可以选择。
参考:
- List of IPv6 tunnel brokers - https://en.wikipedia.org/wiki/List_of_IPv6_tunnel_brokers
- https://ipv6.he.net/certification/faq.php
- Nginx As Reverse Proxy IPV6 to IPV4 Website - https://www.kutukupret.com/2011/05/02/nginx-as-reverse-proxy-ipv6-to-ipv4-website/
- http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_proxy_module.html#proxy_pass