Nginx ipv6 HTTPS反向代理ipv4。
问题背景
APP接口的生产环境部署在一台只支持ipv4的服务器上A,域名为api.yourdomain.com
,同时支持HTTP和HTTPS。现需要上架App Store,由于苹果审核时是在纯ipv6环境下,且要求使用HTTPS协议。另购了一台同时支持ipv4和ipv6的服务器B。
解决思路
另配一域名 app.yourdomain.com
,域名解析添加AAAA记录指向B服务器,A记录指向A服务器。B服务器上配置Nginx反向代理api.yourdomain.com
。B服务器部署的HTTPS证书是app.yourdomain.com
的。测试完成后,接口改用app.yourdomain.com
域名,这样既可以兼容新老版本的APP,又满足苹果审核的要求。
nginx文件配置如下:
server
{
#listen 80; #取消注释可支持ipv4 80端口
#listen 443; #取消注释可支持ipv4 443端口
listen [::]:80;
listen [::]:443 ssl;
server_name app.yourdomain.com;
access_log /www/wwwlogs/app.yourdomain.com.log;
error_log /www/wwwlogs/app.yourdomain.com.error.log;
ssl_certificate "/www/server/nginx/app.yourdomain.com.pem";
ssl_certificate_key "/www/server/nginx/app.yourdomain.com.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host api.yourdomain.com:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://api.yourdomain.com:80;
}
}
测试时最好另找一台支持ipv6的电脑,最好是纯ipv6。