应用研发平台EMAS中,请问emas有办法解决代理问题吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在应用研发平台 EMAS 中,代理问题确实可以通过一些特定的配置和优化方法来解决。以下是针对代理问题的详细解决方案:
当存在中间 HTTP 代理时,客户端发起的请求中请求行会使用绝对路径的 URL。如果开启 HTTPDNS 并采用 IP URL 进行访问,中间代理可能会将 IP 信息作为真实访问的 HOST 信息传递给目标服务器,导致目标服务器无法处理无真实 HOST 信息的 HTTP 请求。
方法一:使用原生 DNS 解析
在代理模式下关闭 HTTPDNS 功能,改用原生 DNS 解析以规避该问题。
方法二:修改服务端配置
使用类似于 WAP 网关的方式,在 Header 字段中增加私有字段(如 X-Online-Host
),服务端根据该字段进行验证。例如:
connection.setRequestProperty("X-Online-Host", "www.example.com");
注意:在绝大多数场景下,建议检测当前设备是否开启了网络代理,并在代理模式下不使用 HTTPDNS 进行域名解析。
在云构建或下载依赖时,如果遇到海外资源下载慢或超时的问题,可以通过以下方式优化:
修改 /etc/hosts
文件
在构建命令之前添加代理配置,确保关键域名能够正确解析。例如:
## 代理 dl.google.com
sudo - sh -c "echo '220.181.174.33 dl.google.com' >> /etc/hosts"
## 代理 jcenter.bintray.com
sudo - sh -c "echo '34.95.74.180 jcenter.bintray.com' >> /etc/hosts"
执行构建命令
修改完成后,继续执行构建任务:
cd $EMAS_RUNNER_CODE_DIR
echo "building..."
chmod +x ./gradlew
./gradlew clean assembleRelease
优先使用阿里云 Maven 仓库
建议按照以下顺序配置 Maven 仓库,以减少对海外资源的依赖:
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/central' }
离线集成 SDK
如果代理仍然不稳定,可以选择离线集成 SDK 的方式,避免因网络问题导致构建失败。
在 HTTPS 服务中,本地认证证书环节需要确认访问域名与证书一致。如果使用 IP URL 发起请求,系统网络库会使用 IP 信息进行验证,可能导致异常。
方法一:关闭 HTTPDNS 功能
在 HTTPS 场景下,建议关闭 HTTPDNS 功能以避免证书验证问题。
方法二:修改客户端验证逻辑
可参考以下文档调整客户端验证逻辑:
启用安装缓存
在云构建配置中,打开安装缓存功能可以显著提升构建速度。如果启用了精确匹配,则不会使用低版本 build.gradle
对应的缓存。
克隆代码慢的处理
如果从 Gitee 克隆代码较慢,可以在克隆前添加自定义脚本:
sudo - sh -c "echo '212.64.63.190 gitee.com' >> /etc/hosts"
通过上述方法,您可以有效解决 EMAS 中的代理问题,包括 HTTPDNS 在代理环境下的使用、海外资源下载优化、HTTPS 场景下的代理问题等。建议优先使用阿里云提供的资源和服务,并在必要时结合代理配置和离线集成方式进一步优化。