爆款云主机低至25.83元/年
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 云聚517 · 好价翼起拼 NEW 爆款云主机低至25.83元/年,参与拼团享更多优惠,拼成得额外优惠券
  • 安全隔离版OpenClaw NEW OpenClaw云服务器专属“龙虾“套餐低至1.5折起
  • 聚力AI赋能 天翼云大模型专项 大模型特惠专区·Token Plan 轻享包低至9.9元起
  • 青云志云端助力计划 NEW 一站式科研助手,海外资源安全访问平台,助力青年翼展宏图,平步青云
  • 企业出海解决方案 NEW 助力您的业务扬帆出海,通达全球!
  • 天翼云信创专区 NEW “一云多芯、一云多态”,国产化软件全面适配,国产操作系统及硬件芯片支持丰富
  • 中小企业服务商合作专区 国家云助力中小企业腾飞,高额上云补贴重磅上线
  • 云上钜惠 爆款云主机全场特惠,2核4G只要1.8折起!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

息壤智算

领先开放的智算服务平台,提供算力、平台、数据、模型、应用“五位一体”智算服务体系,构建全流程的AI基础设施能力
AI Store
  • 算力市场
  • 模型市场
  • 应用市场
公共算力服务
  • 裸金属
  • 定制裸金属
训推服务
  • 模型开发
  • 训练任务
  • 服务部署
Token服务
  • 模型广场
  • 体验中心
  • 服务接入
应用托管
  • 应用实例
科研助手
  • 科研智能体
  • 科研服务
  • 开发机
  • 并行计算
大模型
  • DeepSeek-V4-Flash
  • GLM-5.1
  • Qwen3.5-122B-A10B
  • DeepSeek-V3.2(旗舰版)
  • GLM-5(正式版)
智算一体机
  • 智算一体机
智能体引擎
  • 智能体引擎
智算安全专区
  • 大模型安全评测
  • 大模型安全护栏
模型适配专家服务
  • 模型适配专家服务
算力服务商
  • 入驻算力服务商

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场进入AI Store创新解决方案公有云生态专区智云上海应用生态专区
建站工具
  • 新域名服务
  • SSL证书
  • 翼建站
企业办公
  • 安全邮箱
  • WPS 365 天翼云版
  • 天翼企业云盘(标准服务版)
灾备迁移
  • 云管家2.0
  • 翼备份(SaaS版)

定价

协助您快速了解云产品计费模式、价格详情,轻松预估上云成本
价格计算器
  • 动态测算产品价格
定价策略
  • 快速了解计费模式

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼信创云专区
  • 信创云专区
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
培训与认证
  • 天翼云学堂
  • 天翼云认证
开源社区
  • 魔乐社区
  • OpenTeleDB

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 服务保障
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家
我要反馈
  • 建议与反馈
  • 用户体验官
信息公告
  • 客户公告

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2026智能云生态大会
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 息壤智算
  • 产品
  • 解决方案
  • 应用商城
  • 定价
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      电信云远程医疗_相关内容
      • 配置定时备份告警与审计信息
        本章节主要介绍配置定时备份告警与审计信息。 操作场景 管理员可通过修改配置文件,实现定时备份FusionInsight Manager的告警信息、Manager审计信息以及所有服务的审计信息到指定的存储位置。 备份支持使用SFTP协议或FTP协议,FTP协议未加密数据可能存在安全风险,建议使用SFTP。 操作步骤 1.以omm用户登录主管理节点。 说明 用户只需在主管理节点执行此操作,不支持在备管理节点上配置定时备份。 2.执行以下命令,切换目录。 cd ${BIGDATAHOME}/omserver/om/sbin 3.执行以下命令,配置定时备份Manager告警、审计或者服务审计信息。 ./setNorthBound.sh t 信息类型 i 远程服务器IP p 服务器使用的SFTP或FTP 端口 u 用户名 d 保存信息的路径 c 时间间隔(分钟) m 每个保存文件的信息记录数 s 备份启停开关 e 指定的协议 例如: ./setNorthBound.sh t alarm i 10.0.0.10 p 22 u sftpuser d /tmp/ c 10 m 100 s true e sftp 此脚本将修改告警信息备份配置文件“alarmcollectupload.properties”。文件存储路径为“${BIGDATAHOME}/omserver/tomcat/webapps/web/WEBINF/classes/config”。 ./setNorthBound.sh t audit i 10.0.0.10 p 22 u sftpuser d /tmp/ c 10 m 100 s true e sftp 此脚本将修改审计信息备份配置文件“auditcollectupload.properties”。文件存储路径为“${BIGDATAHOME}/omserver/tomcat/webapps/web/WEBINF/classes/config”。 ./setNorthBound.sh t serviceaudit i 10.0.0.10 p 22 u sftpuser d /tmp/ c 10 m 100 s true e sftp 此脚本将修改服务审计信息备份配置文件“serviceauditcollectupload.properties”。文件存储路径为“${BIGDATAHOME}/omserver/tomcat/webapps/web/WEBINF/classes/config”。 4.根据界面提示输入用户的密码。密码将加密保存在配置文件中。 Please input sftp/ftp server password: 5.显示如下结果,说明修改成功。备管理节点将自动同步配置文件。 execute command syncfile successfully. Config Succeed.
        来自:
        帮助文档
        翼MapReduce
        用户指南
        FusionInsight Manager操作指导(适用于3.x)
        集群管理
        配置定时备份告警与审计信息
      • 如何确认Manager的主备管理节点
        本章节主要介绍如何确认Manager的主备管理节点。 背景信息 用户可以在Master节点登录到集群中的其他节点,同时登录Master节点后,可以确认Manager的主备管理节点,并在对应的管理节点中执行命令。 在主备模式下,由于Master1和Master2之间会切换,Master1节点不一定是Manager的主管理节点。 操作步骤 1.确认MRS集群的Master节点。 a.登录MapReduce服务管理控制台,选择“集群列表 > 现有集群”,选中一个运行中的集群并单击集群名,进入集群信息页面。查看指定的集群信息。 b.在“节点管理”中查看节点名称,名称中包含“master1”的节点为Master1节点,名称中包含“master2”的节点为Master2节点。 2.确认Manager的主备管理节点。 a.远程登录Master1节点,请参见登录集群节点。 Master节点支持CloudInit特性,Cloudinit预配置的用户名“root”,密码为创建集群时设置的密码。 b.执行以下命令切换用户。 sudo su root su omm c.执行以下命令确认主备管理节点: MRS 3.x之前版本集群执行命令: sh ${BIGDATAHOME}/om0.0.1/sbin/statusoms.sh MRS3.x及之后版本集群执行命令: sh ${BIGDATAHOME}/omserver/om/sbin/statusoms.sh 回显信息中“HAActive”参数值为“active”的节点为主管理节点(如下例中“mgtomsdatsh3011”为主管理节点),参数值为“standby”的节点为备管理节点(如下例中“mgtomsdatsh3012”为备管理节点)。 Ha mode double NodeName HostName HAVersion StartTime HAActive HAAllResOK HARunPhase 192168030 mgtomsdatsh3011 V100R001C01 20141118 23:43:02 active normal Actived 192168024 mgtomsdatsh3012 V100R001C01 20141121 07:14:02 standby normal Deactived 说明 如果当前登录的Master1节点是备管理节点,且需要登录到主管理节点时,请执行以下命令: ssh Master2节点IP地址
        来自:
        帮助文档
        翼MapReduce
        用户指南
        管理集群
        登录集群
        如何确认Manager的主备管理节点
      • 查询域名的IP列表/区域/运营商
        接口功能介绍 调用本接口查询域名的IP地址、ip对应的区域和运营商信息 使用说明 单个用户一分钟限制调用10000次,并发不超过100 接口详情 请求方式:post 请求路径:/auxiliarytools/queryvipsdetailbydomain 请求参数 参数 类型 名称 是否必传 说明 :::: domain list 域名列表 是 最多支持5个 响应参数 参数 类型 说明 ::: code int 状态码 message string 描述信息 result list 返回结果数组 result[].domain string 域名 result[].details list 域名对应的vip列表信息 result[].details[].vips string vip信息,多个用逗号“,”分割 result[].details[].cityName string 城市名称 result[].details[].nodename string 节点名称 result[].details[].provinceName string 省份名称 result[].details[].ispName string 运营商名称 示例 请求路径: 请求示例 { "domain": [ "ctyun.cn" ] } 正确响应示例 { "code": 100000, "message": "success", "result": [ { "domain": "ctyun.cn", "details": [ { "vips": "xx.xx.xx.xx,xx:xx:xx:xx::", "cityName": "呼和浩特市", "nodename": "xxx1", "provinceName": "内蒙古自治区", "ispName": "中国电信" }, { "vips": "xx.xx.xx.xx,xx:xx:xx:xx::", "cityName": "通州区", "nodename": "xxx2", "provinceName": "北京市", "ispName": "中国电信" } ] } ] }
        来自:
        帮助文档
        视频直播
        API参考
        API
        辅助工具
        查询域名的IP列表/区域/运营商
      • 弹性伸缩服务产品服务协议
        天翼云提供产品服务协议,请您点击查看。 中国电信天翼弹性伸缩服务是产品服务协议,详情请参见《天翼云弹性伸缩服务等级协议》。
        来自:
        帮助文档
        弹性伸缩服务 AS
        相关协议
        弹性伸缩服务产品服务协议
      • 云间高速相关术语解释
        什么是资源池互联专网? 资源池专网是中国电信建设的与公众互联网物理隔离的独立网络,用于连接全国天翼云资源池,为天翼云用户提供高可靠的跨域资源池之间的东西向高带宽能力。
        来自:
        帮助文档
        云间高速(尊享版)
        产品介绍
        云间高速相关术语解释
      • 开源组件Web站点
        本章主要介绍开源组件Web站点 。 场景介绍 MRS集群默认在集群的Master节点或Core节点创建并托管了不同组件的Web站点,用户可以通过这些Web站点查看组件相关信息。 访问开源组件Web站点步骤: 1. 配置访问方式。 MRS提供如下访问开源组件Web站点的方式: 通过弹性公网IP访问:推荐使用该方式,为集群绑定弹性公网IP,简便易操作。 通过Windows弹性云主机访问:需要创建单独的ECS并进行相关配置。 创建连接MRS集群的SSH隧道并配置浏览器:当用户和MRS集群处于不同的网络中时可以使用该方式访问。 2. 访问站点。请参考下表的地址进行访问。 Web站点一览 说明 对于开启Kerberos认证的集群,admin用户不具备各组件的管理权限,如需正常访问各组件的Web UI界面,请提前创建具有对应组件管理权限的用户。 详见下表: 开源组件Web站点地址 集群类型 站点类型 站点地址 全部类型 MRS Manager 适用于所有版本集群 说明 1. 确保本地机器与MRS集群网络互通。 2. 远程登录Master2节点,执行“ifconfig”命令,系统回显中“eth0:wsom”表示MRS Manager浮动IP地址,请记录“inet”的实际参数值。如果在Master2节点无法查询到MRS Manager的浮动IP地址,请切换到Master1节点查询并记录。如果只有一个Master节点时,直接在该Master节点查询并记录。 MRS 3.x之前版本集群 具体请参见访问MRS Manager(MRS 2.x及之前版本)。 MRS 3.x及以后版本请参见访问FusionInsight Manager(MRS 3.x及之后版本)。 分析集群 HDFS NameNode MRS 3.x之前版本集群,在集群详情页选择“组件管理> HDFS > NameNode WebUI > NameNode (主)” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> HDFS > NameNode WebUI > NameNode ( 主机名称 ,主)” HBase HMaster MRS 3.x之前版本集群,在集群详情页选择“组件管理> HBase > HMaster WebUI > HMaster (主)” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> HBase > HMaster WebUI > HMaster ( 主机名称 ,主)” MapReduce JobHistoryServer MRS 3.x之前版本集群,在集群详情页选择“组件管理> Mapreduce > JobHistoryServer WebUI > JobHistoryServer” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Mapreduce > JobHistoryServer WebUI > JobHistoryServer ( 主机名称 ,主)” YARN ResourceManager MRS 3.x之前版本集群,在集群详情页选择“组件管理> Yarn > ResourceManager WebUI > ResourceManager (主)” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Yarn > ResourceManager WebUI > ResourceManager ( 主机名称 ,主)” Spark JobHistory MRS 3.x之前版本集群,在集群详情页选择“组件管理> Spark > Spark WebUI > JobHistory” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Spark2x > Spark2x WebUI > JobHistory2x ( 主机名称 )” Hue MRS 3.x之前版本集群,在集群详情页选择“组件管理> Hue > Hue WebUI > Hue (主)” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Hue > Hue WebUI > Hue (主机名称 ,主)” Loader页面是基于开放源代码Sqoop WebUI的图形化数据迁移管理工具,由Hue WebUI承载。 Tez MRS 3.x之前版本集群,在集群详情页选择“组件管理> Tez > Tez WebUI > TezUI” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Tez > Tez WebUI > TezUI ( 主机名称 )” Presto MRS 3.x之前版本集群,在集群详情页选择“组件管理> Presto > Presto WebUI > Coordinator (主)” 在Manager页面选择“集群>服务> Presto > Coordinator WebUI > Coordinator(Coordinator)” Ranger MRS 3.x之前版本集群,在集群详情页选择“组件管理> Ranger > Ranger WebUI > RangerAdmin (主)” MRS 3.x及以后版本集群,在Manager页面选择“集群>服务> Ranger > Ranger WebUI > RangerAdmin” 流处理集群 Storm MRS 3.x之前版本集群,在集群详情页选择“组件管理> Storm > Storm WebUI > UI” 在Manager页面选择“集群>服务> Storm > Storm WebUI > UI (主机名称 )”
        来自:
        帮助文档
        翼MapReduce
        用户指南
        访问MRS集群上托管的开源组件Web页面
        开源组件Web站点
      • 操作指引
        本小节介绍漏洞扫描服务流程。 网络要求 非电信客户的应用系统网络与扫描器网络可达,即可提供扫描服务(内网需提供用于部署扫描器的内网主机,内外网需保证路由可达)。 服务流程 业务受理单 客户应如实填写以下信息(必须填满): 1. 被检测的IP主机信息。 2. 被检测主机的操作系统类型及版本。 3. 业务接口人联系方式,客户需指定一个具有对漏洞扫描方案及漏洞扫描过程中出现的问题有决定权的业务接口联系人。 4. 客户提供扫描资产时需对所提交资产所有权负责,保证资产归提交人合法所有。 5. 客户需签订漏洞扫描授权书。 审核阶段 对委托单位提交的受理单信息进行核查,核查内容: 1. 判断资产所在环境是公网还是内网。 若是公网需要保证被扫描资产路由可达。 若是内网环境,需确认委托单位提供可访问到内网主机的跳板机。 2. 受理单审核通过后进入漏洞扫描实施阶段。 业务受理单无问题进入下一阶段;如有问题返回客服,由客服继续与客户沟通,直到业务受理单填满无问题。 说明 确认过程需1个工作日。 实施阶段 1.漏洞扫描实施方案 业务受理单确认无误后进入实施阶段,漏洞扫描操作人员接到客服的业务受理单后确认受理单信息:IP、版本、授权等并就扫描计划和受理单内容与客户确认。扫描任务实施前,分析客户主机情况,制定扫描方案,明确漏洞扫描任务具体实施时间、目标范围、合理的扫描方式以及最佳扫描策略,并就扫描方案与客户进行沟通确认,由于在漏洞扫描期间客户方未关闭安全防护设备所造成的漏扫结果不准确,乙方不承担责任。 注意 确认过程0.5个工作日。 2.实施漏洞扫描 扫描实施前若客户网络环境公网不能直达,需部署扫描器,也可配合客户自己部署,策略模板由我们提供,部署时间预计1个工作日。 关于扫描进度,目前扫描器扫描一个C段地址大约需要6个小时左右时间,扫描期间实时就扫描过程中发生的问题与客户沟通,最后扫描的结果将存放到扫描结果专用堡垒机上。 漏洞扫描的风险规避,由于漏洞扫描属于黑盒测试,因此可能对被测试目标造成不可预知的风险;此外对于性能比较敏感的测试目标,如一些实时性要求比较高的系统,由于扫描可能引起网络流量的增加,因此可能会引起被扫描目标的服务质量降低。因此需进行如下的风险规避措施: 扫描时段选择:一般会选择在夜间或安排在业务量不大的时段进行漏洞扫描。 扫描策略选择:根据系统的具体情况配置合理的扫描策略。 3.编写扫描报告 漏洞扫描完成后输出漏洞扫描服务报告,报告编写时间2个工作日。 4.报告审核修订 由专人对输出的漏洞扫描服务报告进行审核修订,审核修订时间1个工作日。 5.报告提交 报告提交方式采取邮件回复的方式提交:客户通过邮件向天翼云漏洞扫描平台发起报告接收申请,漏洞扫描服务报告以回复邮件方式给客户。 6.质保服务 在客户收到漏洞扫描服务报告后,乙方参与漏扫项目的专家为客户持续提供3天时间用于咨询报告中的不明事项。 7.结束服务 在完成以上各阶段工作后,漏洞扫描项目经理告知客服此次漏扫服务结束。
        来自:
        帮助文档
        漏洞扫描
        用户指南
        操作指引
      • Java调用示例
        1. com.ffcs.ebp.ebpsdk.common.Response plaintext package com.ffcs.ebp.ebpsdk.common; import java.util.Map; public class Response { private int statusCode; private String body; private Map headers; public int getStatusCode() { return statusCode; } public void setStatusCode(int statusCode) { this.statusCode statusCode; } public String getBody() { return body; } public void setBody(String body) { this.body body; } public Map getHeaders() { return headers; } public void setHeaders(Map headers) { this.headers headers; } } 2. com.ffcs.ebp.ebpsdk.YunSign plaintext package com.ffcs.ebp.ebpsdk; import com.ffcs.ebp.ebpsdk.common.Response; import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.client.config.AuthSchemes; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.; import java.net.URLEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.; public class YunSign { private String url; private String body; private String ak; private String sk; private String uuId; private int temp; private String contentType; private String queryStr; private Map headerMap; private String afterQuery; public YunSign(String url, String ak, String sk, String uuId, String body, int temp, String contentType, String queryStr, Map headerMap) { this.url url; if(body.equals("{}")){ body ""; } this.body body; this.ak ak; this.sk sk; this.uuId uuId; this.temp temp; this.contentType contentType; this.queryStr queryStr; this.headerMap headerMap; } public Response toDo(String method, int connectTimeout, int connectionRequestTimeout, int socketTimeout) { Response response null; method method.toUpperCase(); switch (method) { case "POST": response doPost(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "GET": if (StringUtils.isNotEmpty(this.body)) { response sendJsonByGetReq(connectTimeout, connectionRequestTimeout, socketTimeout); } else { response doGet(connectTimeout, connectionRequestTimeout, socketTimeout); } break; case "DELETE": if (StringUtils.isNotEmpty(this.body)) { response sendJsonByDeleteReq(connectTimeout, connectionRequestTimeout, socketTimeout); } else { response doDelete(connectTimeout, connectionRequestTimeout, socketTimeout); } break; case "PUT": response doPut(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "PATCH": response doPatch(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "HEAD": response doHead(connectTimeout, connectionRequestTimeout, socketTimeout); break; } return response; } private String getSign(Date eopDate) { String calculateContentHash getSHA256(body); //报文原封不动进行sha256摘要 // System.out.println("calculateContentHash:" + calculateContentHash); SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); SimpleDateFormat DATEFORMATTER new SimpleDateFormat("yyyyMMdd"); String singerDate TIMEFORMATTER.format(eopDate); String singerDd DATEFORMATTER.format(eopDate); //header的key按照26字母进行排序, 以&作为连接符连起来 try { String CampmocalHeader String.format("ctyuneoprequestid:%sneopdate:%sn", this.uuId, singerDate); String sigture CampmocalHeader + "n" + this.afterQuery + "n" + calculateContentHash; // System.out.println("sigture:" + sigture); byte[] ktime HmacSHA256(singerDate.getBytes(), sk.getBytes()); // System.out.println("ktime:" + HexUtils.bytes2Hex(ktime)); byte[] kAk HmacSHA256(ak.getBytes(), ktime); // System.out.println("kAk:" + HexUtils.bytes2Hex(kAk)); byte[] kdate HmacSHA256(singerDd.getBytes(), kAk); // System.out.println("kdate:" + HexUtils.bytes2Hex(kdate)); String Signature Base64.getEncoder().encodeToString(HmacSHA256(sigture.getBytes("UTF8"), kdate)); // System.out.println("Signature:" + Signature); String signHeader String.format("%s Headersctyuneoprequestid;eopdate Signature%s", ak, Signature); // System.out.println("signHeader:" + signHeader); return signHeader; } catch (Exception e) { e.printStackTrace(); } return null; } / 在调用SSL之前需要重写验证方法,取消检测SSL 创建ConnectionManager,添加Connection配置信息 @return HttpClient 支持https / private static CloseableHttpClient sslClient() { try { // 在调用SSL之前需要重写验证方法,取消检测SSL X509TrustManager trustManager new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkClientTrusted(X509Certificate[] xcs, String str) { } @Override public void checkServerTrusted(X509Certificate[] xcs, String str) { } }; SSLContext ctx SSLContext.getInstance(SSLConnectionSocketFactory.TLS); ctx.init(null, new TrustManager[]{trustManager}, null); SSLConnectionSocketFactory socketFactory new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE); // 创建Registry RequestConfig requestConfig RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARDSTRICT) .setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)) .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build(); Registry socketFactoryRegistry RegistryBuilder. create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", socketFactory).build(); // 创建ConnectionManager,添加Connection配置信息 PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager(socketFactoryRegistry); CloseableHttpClient closeableHttpClient HttpClients.custom().setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig).build(); return closeableHttpClient; } catch (KeyManagementException ex) { throw new RuntimeException(ex); } catch (NoSuchAlgorithmException ex) { throw new RuntimeException(ex); } } public Response doGet(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); //创建HttpGet远程连接实例 HttpGet httpGet; if (StringUtils.isNotEmpty(this.afterQuery)) { httpGet new HttpGet(this.url + "?" + this.afterQuery); } else { httpGet new HttpGet(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpGet.setHeader("ContentType", this.contentType); httpGet.setHeader("ctyuneoprequestid", this.uuId); httpGet.setHeader("EopAuthorization", getSign(eopDate)); httpGet.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpGet.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpGet.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 httpGet.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(httpGet); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response sendJsonByGetReq(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { Response result new Response(); CloseableHttpClient client null; CloseableHttpResponse response null; try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL client sslClient(); } else { client HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpGetWithEntity远程连接实例 HttpGetWithEntity httpGetWithEntity; if (StringUtils.isNotEmpty(this.afterQuery)) { httpGetWithEntity new HttpGetWithEntity(this.url + "?" + this.afterQuery); } else { httpGetWithEntity new HttpGetWithEntity(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为HttpGetWithEntity实例设置配置 httpGetWithEntity.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpGetWithEntity.setHeader("ContentType", this.contentType); httpGetWithEntity.setHeader("ctyuneoprequestid", this.uuId); httpGetWithEntity.setHeader("EopAuthorization", getSign(eopDate)); httpGetWithEntity.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpGetWithEntity.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpGetWithEntity.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); HttpEntity httpEntity new StringEntity(body, Charset.forName("UTF8")); httpGetWithEntity.setEntity(httpEntity); //执行请求操作,并拿到结果(同步阻塞) response client.execute(httpGetWithEntity); //获取结果实体 HttpEntity entity response.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! client) { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPost(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpPost远程连接实例 HttpPost httpPost; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPost new HttpPost(this.url + "?" + this.afterQuery); } else { httpPost new HttpPost(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPost.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpPost.setHeader("ContentType", this.contentType); httpPost.setHeader("ctyuneoprequestid", this.uuId); httpPost.setHeader("EopAuthorization", getSign(eopDate)); httpPost.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPost.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPost.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPost.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPost); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPut(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpPut远程连接实例 HttpPut httpPut; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPut new HttpPut(this.url + "?" + this.afterQuery); } else { httpPut new HttpPut(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPut.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(20321900,01,05); httpPut.setHeader("ContentType", this.contentType); httpPut.setHeader("ctyuneoprequestid", this.uuId); httpPut.setHeader("EopAuthorization", getSign(eopDate)); httpPut.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPut.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPut.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPut.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPut); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPatch(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpPatch远程连接实例 HttpPatch httpPatch; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPatch new HttpPatch(this.url + "?" + this.afterQuery); } else { httpPatch new HttpPatch(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPatch.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpPatch.setHeader("ContentType", this.contentType); httpPatch.setHeader("ctyuneoprequestid", this.uuId); httpPatch.setHeader("EopAuthorization", getSign(eopDate)); httpPatch.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPatch.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPatch.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPatch.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPatch); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doDelete(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpGet远程连接实例 HttpDelete httpDelete; if (StringUtils.isNotEmpty(this.afterQuery)) { httpDelete new HttpDelete(this.url + "?" + this.afterQuery); } else { httpDelete new HttpDelete(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpDelete.setHeader("ContentType", this.contentType); httpDelete.setHeader("ctyuneoprequestid", this.uuId); httpDelete.setHeader("EopAuthorization", getSign(eopDate)); httpDelete.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpDelete.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpDelete.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 httpDelete.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(httpDelete); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response sendJsonByDeleteReq(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpGet远程连接实例 HttpDeleteWithBody delete; if (StringUtils.isNotEmpty(this.afterQuery)) { delete new HttpDeleteWithBody(this.url + "?" + this.afterQuery); } else { delete new HttpDeleteWithBody(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); delete.setHeader("ContentType", this.contentType); delete.setHeader("ctyuneoprequestid", this.uuId); delete.setHeader("EopAuthorization", getSign(eopDate)); delete.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { delete.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : delete.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); HttpEntity httpEntity new StringEntity(body, Charset.forName("UTF8")); delete.setEntity(httpEntity); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 delete.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(delete); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doHead(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpHead远程连接实例 HttpHead httpHead; if (StringUtils.isNotEmpty(this.afterQuery)) { httpHead new HttpHead(this.url + "?" + this.afterQuery); } else { httpHead new HttpHead(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpHead.setHeader("ContentType", this.contentType); httpHead.setHeader("ctyuneoprequestid", this.uuId); httpHead.setHeader("EopAuthorization", getSign(eopDate)); httpHead.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpHead.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpHead.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpHead实例设置配置 httpHead.setConfig(requestConfig); // 执行head请求得到返回对象 response httpClient.execute(httpHead); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } private String toHex(byte[] data) { StringBuilder sb new StringBuilder(data.length 2); byte[] var2 data; int var3 data.length; for (int var4 0; var4 2) { String encodeStr null; encodeStr URLEncoder.encode(s[1], "UTF8"); str s[0] + "" + encodeStr; afterQuery afterQuery + str; } else { String encodeStr ""; str s[0] + "" + encodeStr; afterQuery afterQuery + str; } } else { String[] s str.split(""); if (s.length > 2) { String encodeStr URLEncoder.encode(s[1], "UTF8"); str s[0] + "" + encodeStr; afterQuery afterQuery + "&" + str; } else { String encodeStr ""; str s[0] + "" + encodeStr; afterQuery afterQuery + "&" + str; } } } } } catch (Exception e) { e.printStackTrace(); } return afterQuery; } } 3. HexUtils.java plaintext package com.ffcs.ebp.ebpsdk; public class HexUtils { private static final char[] HEXES { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; / byte数组 转换成 16进制小写字符串 / public static String bytes2Hex(byte[] bytes) { if (bytes null bytes.length 0) { return null; } StringBuilder hex new StringBuilder(); for (byte b : bytes) { hex.append(HEXES[(b >> 4) & 0x0F]); hex.append(HEXES[b & 0x0F]); } return hex.toString(); } / 16进制字符串 转换为对应的 byte数组 / public static byte[] hex2Bytes(String hex) { if (hex null hex.length() 0) { return null; } char[] hexChars hex.toCharArray(); byte[] bytes new byte[hexChars.length / 2]; // 如果 hex 中的字符不是偶数个, 则忽略最后一个 for (int i 0; i headerMap new HashMap<>(); // headerMap.put("queryMetricDataInfo", "{"regionId":"cnsz1","dim":"instanceid,98cdcc8a8e544788ab9cc94ccee429c7","filter":"average","from":"1658473040","to":"1658473040","metricName":"netbitRecv","namespace":"AGT.ECS","period":"1"},"platform":"3"}"); // headerMap.put("platform", "3"); // headerMap.put("consoleUrl", " // headerMap.put("UserAgent", "3333433"); // headerMap.put("XForwardedFor", "1231313"); // headerMap.put("regionId", "100054c0416811e9a6690242ac110002"); // headerMap.put("prodInstId","9dcaf0157c604100af79bdb8271527bc"); //请求地址 String url " //query参数(?后面拼接的参数。没有就不填) aaaa&bbbb String queryStr "regionID41f64827xxxxxxxxxffa3a5deb5d15d"; //body参数(没有就不填) String body ""; //APPID String ak "9f82cacd3f8235c66edfs5e899f098e6"; //appkey String sk "MlgzESz430hJgTzA4lkjuJvDMMLTqwBQRicVqV62VM"; String uuId UUID.randomUUID().toString(); //连接超时 int connectTimeout 35000; //连接请求超时 int connectionRequestTimeout 35000; //socket超时 int socketTimeout 60000; YunSign yunSign new YunSign(url, ak, sk, uuId, body, temp, contentType, queryStr, headerMap); Response response yunSign.toDo(method, connectTimeout, connectionRequestTimeout, socketTimeout); System.out.println("应答头部 "); for (Map.Entry entry : response.getHeaders().entrySet()) { System.out.println(entry.getKey().toString() + ":" + entry.getValue().toString()); } System.out.println(); System.out.println("请求结果 "); System.out.println(response.getBody()); } }
        来自:
        帮助文档
        对象存储 ZOS
        API参考
        API(OpenAPI)
        如何调用API
        Java调用示例
      • 注册与登录
        天翼云学堂( 注册 在天翼云官网没有账号的用户,请先注册一个账号,注册地址为[]( 登录 1) 在天翼云官网已经登录成功的用户,访问天翼云学堂时将会自动跳转并登录。 2) 没有在天翼云官网登录的用户,点击进入天翼云学堂后系统会跳转至天翼云官网登录页面,登录成功后将会返回天翼云学堂首页,此时天翼云学堂已经自动登录。 第一次进入天翼云学堂系统会跳转至身份认证页面,如下图所以: 1) 个人学习用户:点击【下一步】按钮直接进入首页,无需验证; 2) 中国电信员工: 点击【下一步】按钮需要进行企业邮箱验证,验证通过后进入首页;(员工务必选择准确所属公司,以免对学习数据统计造成影响) 3) 天翼云代理商:点击【下一步】按钮需要输入对应的企业邮箱和编号进行验证,验证通过后进入首页。 用户可以选择不进行验证,直接点击网页左上角的“天翼云学堂”logo进入首页,后期想要进行身份验证的时候,可以在[个人设置安全设置修改](
        来自:
        帮助文档
        天翼云学堂
        操作指导
        注册与登录
      • 工信部增加备案短信验证功能通知
        工信部增加全国备案短信验证功能通知 “备案短信核验”问题集锦 根据《工业和信息化部关于开展互联网基础管理专项行动的通知》工信部信管函[2016]485号文件要求,工业和信息化部将对通过 ICP/IP地址/域名信息备案管理系统提交备案申请的主体负责人及网站负责人的手机号码进行短信验证。即:备案信息通过天翼云审核后,天翼云在将备案信息提交管局审核时,备案主体负责人和(或)网站负责人手机号码中,将会收到工信部发出的短信息验证码。需在24小时内完成短信验证,备案申请才能进入省通信管理局的审核程序。 目前适用省份: 根据工信部最新要求,自2020年8月17日起,各省市进行以下类型的备案申请时需通过工信部备案管理系统进行短信核验,详情如下所示。 短信验证平台: 您在备案信息中填写的手机号码收到工信部发出的验证码后,需及时访问《工业和信息化部政务服务平台ICP/IP地址/域名信息备案管理系统》网站(以下简称公共查询网站) 填写证件号码、验证手机号和验证码,完成验证。 验证码发送及短信核验原则: 备案类型 验证逻辑 备注 新增备案 验证主体负责人手机号和网站负责人手机号。 若主体负责人与网站负责人为同一人,只发送一个验证码。 新增网站备案 验证网站负责人手机号码。 若主体信息有变更,则需要验证。 新增接入备案 验证网站负责人手机号码。(注意:该手机号码是通过其他接入商在管局侧备案时所提供的号码) 1、如果您更换了手机号码,需先到原备案接入服务商处变更手机号码,再进行接入备案。 2、如果您的网站为空壳网站(即无接入服务商),无法到原接入服务商处变更手机号码。只能注销备案后,再重新提交新增网站备案。 变更备案信息 验证主体负责人手机号或网站负责人手机号。 1、若变更主体信息,则验证主体负责人手机号码。 2、若变更网站信息,则验证网站负责人手机号码。 3、若同时变更了主体和网站信息,那么主体和网站负责人手机号码均需验证。 注销主体 主体负责人验证。 暂时无需验证。验证开放时间待定。 注销网站 无需验证。 暂时无需验证。验证开放时间待定。 取消接入 无需验证。 暂时无需验证。验证开放时间待定。 验证码有效时长: 验证码 24 小时以内有效。您需在 24 小时内,访问公共查询网站,并输入证件号码、验证手机号和验证码进行验证。 手机号码短信验证通过后,您的备案信息将流转至管局审核。 若 24 小时内,没有进行验证或验证失败,备案信息将会自动退回至接入商(天翼云)。需您重新提交备案申请,再次进入短信验证流程。完成短信验证后,备案申请信息才能递交至省管局审核。 验证码发送号码: 电信、联通、移动用户收到的短信验证码的发送号码为短信验证码的发送号码为12381或10612381。 1. 填写信息:验证码、手机号码、证件号码后六位数,完成图形验证,再单击 提交 。验证通过后,系统提示核验完成。如果您的备案订单中,还有其他需验证的手机号,请继续成。 2. 验证通过后,系统提示核验完成。如果您的备案订单中,还有其他需验证的手机号,请继续完成。 注意: 1、如果您的信息输入错误,或输入的三条信息(证件号码、手机号码、验证码)不匹配,则系统找不到对应的订单。系统提示找不到记录。请核实信息后,重新输入。 2、如果负责人证件号码输错 3 次以后,系统提示短信核验失败。您的备案申请信息将被工信部系统退回。 未收到验证短信,怎么办? 在天翼云将您的备案信息提交管局审核的后,请注意查收工信部发出的验证短信。一般在 5 分钟内即可收到验证短信。若 5 分钟后仍然没有收到验证短信,请检查: 1、您的手机网络信号是否正常。 2、您是否设置了短信拦截或安装了垃圾短信拦截软件。 解决方法: 1、如果因手机网络信号不正常导致无法接收短信,请移到信号好的地方;或访问公共查询网站进行手动重发送验证短信。 2、如果因您设置了垃圾短信拦截,或安装了拦截软件,请关闭拦截。如果无法关闭拦截,建议您将您的 SIM 卡换至其他手机。 3、如果您误删了验证短信,可访问公共查询网站,进行手动重发。 4、如果您 24 小时未完成短信验证,备案系统会自动退回您的备案申请。您需重新提交备案申请。 如何操作手动重发验证码短信? 访问公共查询网站,单击网站页面上“短信核验”按钮。 单击 短信重发 ,进入核验短信重发页面。填写您需验证的手机号码和证件号码后 6 位数,然后单击 提交。 发送成功通知:您的短信已发送成功。
        来自:
        帮助文档
        ICP备案
        法律法规及公告
        公告
        工信部增加备案短信验证功能通知
      • 添加防护对象
        后续配置 添加防护对象后,网站访问流量将经过WAF保护,您还需要完善以下防护配置,才能实现针对性的网站防护。 配置 说明 相关文档 Web基础防护 覆盖OWASP常见安全威胁,支持SQL注入、XSS、文件包含、远程命令执行、目录穿越、文件上传、CSRF、SSRF、命令注入、模板注入、XML实体注入等攻击检测和拦截。 Web基础防护 CC防护 CC防护支持默认防护策略及灵活的自定义防护策略。自定义策略支持依托精准访问控制规则进行特征识别,并根据访问源IP/ SESSION控制访问频率,恶意流量通过阻断、人机验证等处置手段有效缓解CC攻击。 CC防护 BOT防护 提供公开类型、协议特征、自定义会话特征等多种判定维度的防护策略,支持根据BOT会话行为特征设置BOT对抗策略,对BOT行为进行处理,有效防护搜索引擎、扫描器、脚本工具等爬虫攻击。 BOT防护 精准访问控制 支持基于IP、URL、Referer、UserAgent等请求特征进行多维度组合,定义访问匹配条件过滤访问请求,实现针对性的攻击阻断。 精准访问控制 IP黑白名单 支持添加始终拦截与始终放行的黑白名单IP/IP地址段,增强防御准确性。 IP黑白名单 地域访问控制 支持针对地理位置的黑名单封禁,可指定需要封禁的国家、地区,阻断该区域的来源IP的访问。 地域访问控制 防敏感信息泄露 支持对网站返回的内容进行过滤(拦截、脱敏展示),过滤内容包括敏感信息、关键字和响应码。 防敏感信息泄露 网页防篡改 通过缓存页面和锁定访问请求,可避免页面被恶意篡改而带来的负面影响,对重点静态页面进行保护。 网页防篡改 Cookie防篡改 通过对Cookie中的字段增加完整性校验保护,WAF会新增一个Cookie字段用于篡改校验。 Cookie防篡改 隐私屏蔽 通过设置隐私屏蔽规则,可屏蔽用户隐私信息,避免用户隐私信息出现在系统记录的日志中。 隐私屏蔽
        来自:
      • 监控Agent概览
        监控Agent简介 通过在主机上安装云监控Agent,为您提供主机的系统监控、进程监控等服务。 系统要求 目前只支持Linux操作系统和Windows操作系统。支持的系统如下: 操作系统 版本 Linux 天翼云提供的公共Linux镜像均支持 Windows 天翼云提供的公共Windows镜像均支持 在部分区域,对于使用标准公共版本镜像的服务器,可以在云主机详情页监控 单击“一键安装监控Agent”来实现一键安装新的监控。 安装位置 监控Agent在云主机上的安装位置如下: Linux:/usr/bin/telegraf Windows:C:Program Filesctyuntelegraftelegraf 端口说明 云主机监控Agent通过TCP协议访问远程服务器的 10063和10064 端口, 用于心跳检测与监控数据上报,以及用于查看配置和更改日志级别等。 性能说明 资源 性能说明 CPU 当监控插件稳定运行时,一般CPU的消耗小于1% 内存 当监控插件稳定运行时,一般内存的占用小于64M 插件安装包 64M 支持安装监控Agent的地区及Agent安装包下载路径 地区名称 Agent安装包下载路径 华北2 Linux: Windows: 西南2 Linux: Windows: 青岛20 Linux: Windows: 上海15 Linux: Windows: 南昌5 Linux: Windows: 华南2 Linux: Windows: 广州6 Linux: Windows: 西南1 Linux: Windows: 芜湖4 Linux: Windows: 贵阳42 Linux: Windows: 沈阳8 Linux: Windows: 杭州7 Linux: Windows: 北京9 Linux: Windows: 西安7 Linux: Windows: 西安5 Linux: Windows: 太原4 Linux: Windows: 郑州5 Linux: Windows: 常州69 Linux: Windows: 上海32 Linux: Windows: 武汉41 Linux: Windows: 华东1 Linux: Windows: 南宁23 Linux: Windows: 上海36 Linux: Windows: 上海7 Linux: Windows: 内蒙6 Linux: Windows: 北京5 Linux: Windows: 九江 Linux: Windows: 拉萨3 Linux: Windows: 杭州2 Linux: Windows: 长沙42 Linux: Windows: 中卫5 Linux: Windows: 石家庄20 Linux: Windows: 南京5 Linux: Windows: 晋中 Linux: Windows: 贵州3 Linux: Windows: 辽阳1 Linux: Windows: 福州25 Linux: Windows: 合肥2 Linux: Windows: 注意 除以上地区外,若需要下载监控Agent安装包,请参考云监控Agent管理。
        来自:
        帮助文档
        弹性云主机 ECS
        用户指南
        监控
        监控Agent概览
      • Java调用示例(1)
        1. com.ffcs.ebp.ebpsdk.common.Response plaintext package com.ffcs.ebp.ebpsdk.common; import java.util.Map; public class Response { private int statusCode; private String body; private Map headers; public int getStatusCode() { return statusCode; } public void setStatusCode(int statusCode) { this.statusCode statusCode; } public String getBody() { return body; } public void setBody(String body) { this.body body; } public Map getHeaders() { return headers; } public void setHeaders(Map headers) { this.headers headers; } } 2. com.ffcs.ebp.ebpsdk.YunSign plaintext package com.ffcs.ebp.ebpsdk; import com.ffcs.ebp.ebpsdk.common.Response; import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.client.config.AuthSchemes; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.; import java.net.URLEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; import java.util.; public class YunSign { private String url; private String body; private String ak; private String sk; private String uuId; private int temp; private String contentType; private String queryStr; private Map headerMap; private String afterQuery; public YunSign(String url, String ak, String sk, String uuId, String body, int temp, String contentType, String queryStr, Map headerMap) { this.url url; if(body.equals("{}")){ body ""; } this.body body; this.ak ak; this.sk sk; this.uuId uuId; this.temp temp; this.contentType contentType; this.queryStr queryStr; this.headerMap headerMap; } public Response toDo(String method, int connectTimeout, int connectionRequestTimeout, int socketTimeout) { Response response null; method method.toUpperCase(); switch (method) { case "POST": response doPost(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "GET": if (StringUtils.isNotEmpty(this.body)) { response sendJsonByGetReq(connectTimeout, connectionRequestTimeout, socketTimeout); } else { response doGet(connectTimeout, connectionRequestTimeout, socketTimeout); } break; case "DELETE": if (StringUtils.isNotEmpty(this.body)) { response sendJsonByDeleteReq(connectTimeout, connectionRequestTimeout, socketTimeout); } else { response doDelete(connectTimeout, connectionRequestTimeout, socketTimeout); } break; case "PUT": response doPut(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "PATCH": response doPatch(connectTimeout, connectionRequestTimeout, socketTimeout); break; case "HEAD": response doHead(connectTimeout, connectionRequestTimeout, socketTimeout); break; } return response; } private String getSign(Date eopDate) { String calculateContentHash getSHA256(body); //报文原封不动进行sha256摘要 // System.out.println("calculateContentHash:" + calculateContentHash); SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); SimpleDateFormat DATEFORMATTER new SimpleDateFormat("yyyyMMdd"); String singerDate TIMEFORMATTER.format(eopDate); String singerDd DATEFORMATTER.format(eopDate); //header的key按照26字母进行排序, 以&作为连接符连起来 try { String CampmocalHeader String.format("ctyuneoprequestid:%sneopdate:%sn", this.uuId, singerDate); String sigture CampmocalHeader + "n" + this.afterQuery + "n" + calculateContentHash; // System.out.println("sigture:" + sigture); byte[] ktime HmacSHA256(singerDate.getBytes(), sk.getBytes()); // System.out.println("ktime:" + HexUtils.bytes2Hex(ktime)); byte[] kAk HmacSHA256(ak.getBytes(), ktime); // System.out.println("kAk:" + HexUtils.bytes2Hex(kAk)); byte[] kdate HmacSHA256(singerDd.getBytes(), kAk); // System.out.println("kdate:" + HexUtils.bytes2Hex(kdate)); String Signature Base64.getEncoder().encodeToString(HmacSHA256(sigture.getBytes("UTF8"), kdate)); // System.out.println("Signature:" + Signature); String signHeader String.format("%s Headersctyuneoprequestid;eopdate Signature%s", ak, Signature); // System.out.println("signHeader:" + signHeader); return signHeader; } catch (Exception e) { e.printStackTrace(); } return null; } / 在调用SSL之前需要重写验证方法,取消检测SSL 创建ConnectionManager,添加Connection配置信息 @return HttpClient 支持https / private static CloseableHttpClient sslClient() { try { // 在调用SSL之前需要重写验证方法,取消检测SSL X509TrustManager trustManager new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkClientTrusted(X509Certificate[] xcs, String str) { } @Override public void checkServerTrusted(X509Certificate[] xcs, String str) { } }; SSLContext ctx SSLContext.getInstance(SSLConnectionSocketFactory.TLS); ctx.init(null, new TrustManager[]{trustManager}, null); SSLConnectionSocketFactory socketFactory new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE); // 创建Registry RequestConfig requestConfig RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARDSTRICT) .setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST)) .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build(); Registry socketFactoryRegistry RegistryBuilder. create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", socketFactory).build(); // 创建ConnectionManager,添加Connection配置信息 PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager(socketFactoryRegistry); CloseableHttpClient closeableHttpClient HttpClients.custom().setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig).build(); return closeableHttpClient; } catch (KeyManagementException ex) { throw new RuntimeException(ex); } catch (NoSuchAlgorithmException ex) { throw new RuntimeException(ex); } } public Response doGet(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); //创建HttpGet远程连接实例 HttpGet httpGet; if (StringUtils.isNotEmpty(this.afterQuery)) { httpGet new HttpGet(this.url + "?" + this.afterQuery); } else { httpGet new HttpGet(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpGet.setHeader("ContentType", this.contentType); httpGet.setHeader("ctyuneoprequestid", this.uuId); httpGet.setHeader("EopAuthorization", getSign(eopDate)); httpGet.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpGet.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpGet.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 httpGet.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(httpGet); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response sendJsonByGetReq(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { Response result new Response(); CloseableHttpClient client null; CloseableHttpResponse response null; try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL client sslClient(); } else { client HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpGetWithEntity远程连接实例 HttpGetWithEntity httpGetWithEntity; if (StringUtils.isNotEmpty(this.afterQuery)) { httpGetWithEntity new HttpGetWithEntity(this.url + "?" + this.afterQuery); } else { httpGetWithEntity new HttpGetWithEntity(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为HttpGetWithEntity实例设置配置 httpGetWithEntity.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpGetWithEntity.setHeader("ContentType", this.contentType); httpGetWithEntity.setHeader("ctyuneoprequestid", this.uuId); httpGetWithEntity.setHeader("EopAuthorization", getSign(eopDate)); httpGetWithEntity.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpGetWithEntity.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpGetWithEntity.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); HttpEntity httpEntity new StringEntity(body, Charset.forName("UTF8")); httpGetWithEntity.setEntity(httpEntity); //执行请求操作,并拿到结果(同步阻塞) response client.execute(httpGetWithEntity); //获取结果实体 HttpEntity entity response.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! client) { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPost(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpPost远程连接实例 HttpPost httpPost; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPost new HttpPost(this.url + "?" + this.afterQuery); } else { httpPost new HttpPost(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPost.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpPost.setHeader("ContentType", this.contentType); httpPost.setHeader("ctyuneoprequestid", this.uuId); httpPost.setHeader("EopAuthorization", getSign(eopDate)); httpPost.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPost.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPost.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPost.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPost); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPut(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpPut远程连接实例 HttpPut httpPut; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPut new HttpPut(this.url + "?" + this.afterQuery); } else { httpPut new HttpPut(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPut.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(20321900,01,05); httpPut.setHeader("ContentType", this.contentType); httpPut.setHeader("ctyuneoprequestid", this.uuId); httpPut.setHeader("EopAuthorization", getSign(eopDate)); httpPut.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPut.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPut.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPut.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPut); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doPatch(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse httpResponse null; Response result new Response(); try { // 创建httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建HttpPatch远程连接实例 HttpPatch httpPatch; if (StringUtils.isNotEmpty(this.afterQuery)) { httpPatch new HttpPatch(this.url + "?" + this.afterQuery); } else { httpPatch new HttpPatch(this.url); } // 配置请求参数实例 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 设置连接请求超时时间 .setSocketTimeout(socketTimeout)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpPatch.setConfig(requestConfig); // 设置请求头 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpPatch.setHeader("ContentType", this.contentType); httpPatch.setHeader("ctyuneoprequestid", this.uuId); httpPatch.setHeader("EopAuthorization", getSign(eopDate)); httpPatch.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpPatch.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpPatch.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 为httpPost设置封装好的请求参数 StringEntity data new StringEntity(body, Charset.forName("UTF8")); httpPatch.setEntity(data); // httpClient对象执行post请求,并返回响应参数对象 httpResponse httpClient.execute(httpPatch); // 从响应对象中获取响应内容 HttpEntity entity httpResponse.getEntity(); result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : httpResponse.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! httpResponse) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doDelete(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpGet远程连接实例 HttpDelete httpDelete; if (StringUtils.isNotEmpty(this.afterQuery)) { httpDelete new HttpDelete(this.url + "?" + this.afterQuery); } else { httpDelete new HttpDelete(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpDelete.setHeader("ContentType", this.contentType); httpDelete.setHeader("ctyuneoprequestid", this.uuId); httpDelete.setHeader("EopAuthorization", getSign(eopDate)); httpDelete.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpDelete.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpDelete.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 httpDelete.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(httpDelete); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response sendJsonByDeleteReq(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpGet远程连接实例 HttpDeleteWithBody delete; if (StringUtils.isNotEmpty(this.afterQuery)) { delete new HttpDeleteWithBody(this.url + "?" + this.afterQuery); } else { delete new HttpDeleteWithBody(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); delete.setHeader("ContentType", this.contentType); delete.setHeader("ctyuneoprequestid", this.uuId); delete.setHeader("EopAuthorization", getSign(eopDate)); delete.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { delete.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : delete.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); HttpEntity httpEntity new StringEntity(body, Charset.forName("UTF8")); delete.setEntity(httpEntity); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpGet实例设置配置 delete.setConfig(requestConfig); // 执行get请求得到返回对象 response httpClient.execute(delete); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Response doHead(int connectTimeout, int connectionRequestTimeout, int socketTimeout) { CloseableHttpClient httpClient null; CloseableHttpResponse response null; Response result new Response(); try { // 通过址默认配置创建一个httpClient实例 if (temp 0) {//绕过SSL httpClient sslClient(); } else { httpClient HttpClients.createDefault(); } String query this.queryStr; this.afterQuery encodeQueryStr(query); // 创建httpHead远程连接实例 HttpHead httpHead; if (StringUtils.isNotEmpty(this.afterQuery)) { httpHead new HttpHead(this.url + "?" + this.afterQuery); } else { httpHead new HttpHead(this.url); } // 设置请求头信息,鉴权 SimpleDateFormat TIMEFORMATTER new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); Date eopDate new Date(); httpHead.setHeader("ContentType", this.contentType); httpHead.setHeader("ctyuneoprequestid", this.uuId); httpHead.setHeader("EopAuthorization", getSign(eopDate)); httpHead.setHeader("Eopdate", TIMEFORMATTER.format(eopDate)); if (this.headerMap ! null) { for (String key : this.headerMap.keySet()) { if (StringUtils.isNotEmpty(key)) { httpHead.setHeader(key, this.headerMap.get(key).toString()); } } } System.out.println("请求头部 "); for (Header header : httpHead.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println(); // 设置配置请求参数 RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(connectTimeout)// 连接主机服务超时时间 .setConnectionRequestTimeout(connectionRequestTimeout)// 请求超时时间 .setSocketTimeout(socketTimeout)// 数据读取超时时间 .build(); // 为httpHead实例设置配置 httpHead.setConfig(requestConfig); // 执行head请求得到返回对象 response httpClient.execute(httpHead); // 通过返回对象获取返回数据 HttpEntity entity response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result.setBody(EntityUtils.toString(entity, "UTF8")); result.setStatusCode(response.getStatusLine().getStatusCode()); Map headerMap new HashMap (); for (Header header : response.getAllHeaders()) { headerMap.put(header.getName(), header.getValue()); } result.setHeaders(headerMap); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null ! response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null ! httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } private String toHex(byte[] data) { StringBuilder sb new StringBuilder(data.length 2); byte[] var2 data; int var3 data.length; for (int var4 0; var4 2) { String encodeStr null; encodeStr URLEncoder.encode(s[1], "UTF8"); str s[0] + "" + encodeStr; afterQuery afterQuery + str; } else { String encodeStr ""; str s[0] + "" + encodeStr; afterQuery afterQuery + str; } } else { String[] s str.split(""); if (s.length > 2) { String encodeStr URLEncoder.encode(s[1], "UTF8"); str s[0] + "" + encodeStr; afterQuery afterQuery + "&" + str; } else { String encodeStr ""; str s[0] + "" + encodeStr; afterQuery afterQuery + "&" + str; } } } } } catch (Exception e) { e.printStackTrace(); } return afterQuery; } } 3. HexUtils.java plaintext package com.ffcs.ebp.ebpsdk; public class HexUtils { private static final char[] HEXES { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; / byte数组 转换成 16进制小写字符串 / public static String bytes2Hex(byte[] bytes) { if (bytes null bytes.length 0) { return null; } StringBuilder hex new StringBuilder(); for (byte b : bytes) { hex.append(HEXES[(b >> 4) & 0x0F]); hex.append(HEXES[b & 0x0F]); } return hex.toString(); } / 16进制字符串 转换为对应的 byte数组 / public static byte[] hex2Bytes(String hex) { if (hex null hex.length() 0) { return null; } char[] hexChars hex.toCharArray(); byte[] bytes new byte[hexChars.length / 2]; // 如果 hex 中的字符不是偶数个, 则忽略最后一个 for (int i 0; i headerMap new HashMap<>(); // headerMap.put("queryMetricDataInfo", "{"regionId":"cnsz1","dim":"instanceid,98cdcc8a8e544788ab9cc94ccee429c7","filter":"average","from":"1658473040","to":"1658473040","metricName":"netbitRecv","namespace":"AGT.ECS","period":"1"},"platform":"3"}"); // headerMap.put("platform", "3"); // headerMap.put("consoleUrl", " // headerMap.put("UserAgent", "3333433"); // headerMap.put("XForwardedFor", "1231313"); // headerMap.put("regionId", "100054c0416811e9a6690242ac110002"); // headerMap.put("prodInstId","9dcaf0157c604100af79bdb8271527bc"); //请求地址 String url " //query参数(?后面拼接的参数。没有就不填) aaaa&bbbb String queryStr "regionID41f64827xxxxxxxxxffa3a5deb5d15d"; //body参数(没有就不填) String body ""; //APPID String ak "9f82cacd3f8235c66edfs5e899f098e6"; //appkey String sk "MlgzESz430hJgTzA4lkjuJvDMMLTqwBQRicVqV62VM"; String uuId UUID.randomUUID().toString(); //连接超时 int connectTimeout 35000; //连接请求超时 int connectionRequestTimeout 35000; //socket超时 int socketTimeout 60000; YunSign yunSign new YunSign(url, ak, sk, uuId, body, temp, contentType, queryStr, headerMap); Response response yunSign.toDo(method, connectTimeout, connectionRequestTimeout, socketTimeout); System.out.println("应答头部 "); for (Map.Entry entry : response.getHeaders().entrySet()) { System.out.println(entry.getKey().toString() + ":" + entry.getValue().toString()); } System.out.println(); System.out.println("请求结果 "); System.out.println(response.getBody()); } }
        来自:
      • 快速部署DeepSeek的最佳实践
        加载更多版本模型 若需加载其他版本DeepSeek模型,可登录虚拟机,执行以下命令。 ollama pull deepseekr1:14b 将deepseekr1:14b换成想要的模型,可访问 加载完成后,可在webUI页面切换不同模型使用,如下图所示。 调整deepseek参数 访问webUI,进入设置页面。 点击“管理员设置”。 点击“模型”,找到想要调整参数的模型,点击进入具体配置页面。 找到“高级参数”,点击“显示”。 按需调整各种参数,如上下文长度、最长token数等。 常见FAQ 1、存储容量不够怎么办? 如果您在使用过程中发现磁盘空间不足,可参考扩容云硬盘进行磁盘扩容。 2、已购资源配置性能不能满足我的使用怎么办? 如果您在使用过程中,发现CPU、内存或GPU性能不能满足您的需求,可参考升级实例进行虚拟机配置升级。 3、不同版本DeepSeek适用场景? 模型 适用场景 特点 1.5B 轻量级任务,如短文本生成、基础问答、边缘计算设备(如工业控制终端、智能家居中枢)。 资源消耗低,适合低配设备,响应速度快。 7B/8B 中等复杂度任务,如文案撰写、表格处理、统计分析、个人开发者工作站。 性能与资源消耗平衡,适合对响应速度有一定要求且硬件资源有限的场景。 14B 复杂任务,如长文本生成、数据分析、企业级合同分析、报告生成。 适合对模型性能有一定要求但硬件条件有限的场景。 32B 高精度专业领域任务,如医疗咨询、法律分析、多模态任务预处理。 适合硬件条件较好的场景,能够处理高精度和复杂任务。 70B 高复杂度任务,如金融预测、大规模数据分析、科研机构的复杂计算。 性能最强,适合对准确性和复杂度要求极高的专业领域。 4、如何查看模型精度? 登录虚拟机,依次执行以下命令,即可查看模型精度(quantization)。 ollama list ollama show [modelname]
        来自:
        帮助文档
        智能边缘云
        最佳实践
        快速部署DeepSeek的最佳实践
      • 手动搭建LNMP环境
        禁止root远程登录,输入Y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press yY for Yes, any other key for No) : Y 是否删除test库和对它的访问权限,输入Y Dropping test database... Success. Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press yY for Yes, any other key for No) : Y 是否重新加载授权表,输入Y Success. All done! 安装PHP 1. 依次执行以下命令,安装PHP 7和一些所需的PHP扩展。 plaintext rpm Uvh Uvh yum/el7/webtaticrelease.rpm yum y install php70wtidy php70wcommon php70wdevel php70wpdo php70wmysql php70wgd php70wldap php70wmbstring php70wmcrypt php70wfpm 2. 执行以下命令,验证PHP的安装版本。 plaintext php v 回显如下类似信息: plaintext PHP 7.0.31 (cli) (built: Jul 20 2018 08:55:22) ( NTS ) Copyright (c) 19972017 The PHP Group Zend Engine v3.0.0, Copyright (c) 19982017 Zend Technologies 3. 执行以下命令,启动PHP服务并设置开机自启动。 plaintext systemctl start phpfpm systemctl enable phpfpm 4. 修改nginx配置文件以支持PHP。 执行以下命令打开配置文件“default.conf”。 plaintext vim /etc/nginx/conf.d/default.conf 按i键进入编辑模式。 修改打开的“default.conf”文件。 在所支持的主页面格式中添加php格式的主页,如下所示: plaintext location / { root /usr/share/nginx/html; index index.php index.html index.htm; } 取消如下内容的注释,并设置字体加粗部分为nginx的默认路径,如下所示: plaintext location ~ .php$ { root html; fastcgipass 127.0.0.1:9000; fastcgiindex index.php; fastcgiparam SCRIPTFILENAME /usr/share/nginx/html$fastcgiscriptname; include fastcgiparams; } 按Esc键退出编辑模式,并输入 :wq保存后退出。 执行以下命令,重新载入nginx的配置文件。 plaintext service nginx reload
        来自:
        帮助文档
        弹性云主机 ECS
        最佳实践
        搭建环境相关最佳实践
        手动搭建LNMP环境
      • 安装部署
        三、节点创建与许可绑定 操作条件 开启数据保护前,需完成++同步天翼云云主机++或者++新增非天翼云云主机++操作。 操作步骤 1. 登录天翼云,进入控制中心。 2. 单击管理控制台左上角的,选择区域。 3. 在服务列表选择“计算”“多活容灾服务”,进入多活容灾服务控制台。 4. 点击左侧菜单栏“资源同步管理”“数据源”“客户端管理”模块,进入客户端管理页面页面。 5. 点击操作列“开启数据保护”,进入开启数据保护页面。 6. 开启数据保护页面分为基础配置、节点角色配置、确认配置三部分。 认证码填写说明: 1、使用自动安装drnode客户端,认证码将自动回填。 2、使用手动安装drnode客户端,需手动填写认证码: 1)RHEL/CentOS/SUSE/AlmaLinux/KylinOS/UnionTechOS/openEuler系统:可使用cat /usr/drbksoft/drnode/etc/drid.conf查看认证码。 2)Windows:点击客户端右上角“设置”“代理设置”,或者进入安装目录下的/etc/drid.conf,可查看认证码ID。 7. 在基础配置模块,填写连接端口、用户名、密码和认证码后,点击认证码旁的“认证按钮”,完成节点认证。 8. 认证后,会自动回显节点数据地址,选择控制台和调度服务器地址为nodeproxymdr,选择当前节点需绑定的许可。 各配置项信息如下: 参数 是否必选 配置说明 连接端口 √ 填写远程连接端口,用于对资源进行连通性测试。 用户名 √ 填写主机用户名。 MDR程序所在的主机OS的登录账号,可以选择使用管理员账户或非管理员账户;也可以支持Windows平台域控用户的验证,Windows域用户名格式为: ;也可以填写安装时生成的文件认证用户名。 密码 √ 填写主机可完成正常登录的密码。 认证码 √ 填写安装部署[网络配置](
        来自:
        帮助文档
        多活容灾服务
        用户指南
        资源同步管理
        网络配置与drnode客户端安装
        安装部署
      • 添加防护对象
        后续配置 添加防护对象后,网站访问流量将经过WAF保护,您还需要完善以下防护配置,才能实现针对性的网站防护。 配置 说明 相关文档 Web基础防护 覆盖OWASP常见安全威胁,支持SQL注入、XSS、文件包含、远程命令执行、目录穿越、文件上传、CSRF、SSRF、命令注入、模板注入、XML实体注入等攻击检测和拦截。 Web基础防护 CC防护 CC防护支持默认防护策略及灵活的自定义防护策略。自定义策略支持依托精准访问控制规则进行特征识别,并根据访问源IP/ SESSION控制访问频率,恶意流量通过阻断、人机验证等处置手段有效缓解CC攻击。 CC防护 BOT防护 提供公开类型、协议特征、自定义会话特征等多种判定维度的防护策略,支持根据BOT会话行为特征设置BOT对抗策略,对BOT行为进行处理,有效防护搜索引擎、扫描器、脚本工具等爬虫攻击。 BOT防护 精准访问控制 支持基于IP、URL、Referer、UserAgent等请求特征进行多维度组合,定义访问匹配条件过滤访问请求,实现针对性的攻击阻断。 精准访问控制 IP黑白名单 支持添加始终拦截与始终放行的黑白名单IP/IP地址段,增强防御准确性。 IP黑白名单 地域访问控制 支持针对地理位置的黑名单封禁,可指定需要封禁的国家、地区,阻断该区域的来源IP的访问。 地域访问控制 防敏感信息泄露 支持对网站返回的内容进行过滤(拦截、脱敏展示),过滤内容包括敏感信息、关键字和响应码。 防敏感信息泄露 网页防篡改 通过缓存页面和锁定访问请求,可避免页面被恶意篡改而带来的负面影响,对重点静态页面进行保护。 网页防篡改 Cookie防篡改 通过对Cookie中的字段增加完整性校验保护,WAF会新增一个Cookie字段用于篡改校验。 Cookie防篡改 隐私屏蔽 通过设置隐私屏蔽规则,可屏蔽用户隐私信息,避免用户隐私信息出现在系统记录的日志中。 隐私屏蔽
        来自:
        帮助文档
        Web应用防火墙(原生版)
        用户指南
        接入WAF
        网站接入WAF防护(独享型接入)
        添加防护对象
      • 线下IDC通过专线和代理服务器接入HSS
        为代理服务器安装Nginx 1. 登录代理服务器 2. 检查yum源 检查yum源是否有nginx软件包,如果没有nginx软件包需完成yum源配置,并临时绑定公网IP,待安装结束之后再解绑公网IP。 远程登录代理服务器,执行以下命令检查yum源中是否存在nginx包。 EulerOS、CentOS、Red Hat等支持rpm安装软件的OS:yum list nginx Ubuntu、Debian等支持deb安装软件的OS:apt list nginx 3. 安装nginx 1. 执行以下命令使用yum安装nginx。 EulerOS、CentOS、Red Hat等支持rpm安装软件的OS:yum install y nginx Ubuntu、Debian等支持deb安装软件的OS:apt install –y nginx b.查看nginx是否安装成功。 EulerOS、CentOS、Red Hat等支持rpm安装软件的OS:自动执行安装,出现下图所示“Complete!”表示安装成功。 Ubuntu、Debian等支持deb安装软件的OS:执行命令pkg –l nginx,查看回显结果如下图所示,表示安装成功。 4. 配置Nginx 1. 执行以下命令进入nginx目录:cd /etc/nginx/ 2. 执行以下命令完成证书自签:openssl req new x509 nodes out server.pem keyout server.keydays 36500,命令执行后需填写证书相关信息,自定义填写即可。 5. 执行以下操作修改nginx.conf。 1. 依次执行以下命令修改nginx.conf:rm f nginx.conf;vi nginx.conf 2. 按“i”键进入编辑模式,并将以下内容复制粘贴到nginx.conf中。 3. plaintext user nginx; workerprocesses auto; errorlog /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/.conf; events { workerconnections 1024; } http { logformat main '$remoteaddr $remoteuser [$timelocal] "$request" ' '$status $bodybytessent "$httpreferer" ' '"$httpuseragent" "$httpxforwardedfor"'; accesslog /var/log/nginx/access.log main; sendfile on; tcpnopush on; tcpnodelay on; keepalivetimeout 65; typeshashmaxsize 2048; include /etc/nginx/mime.types; defaulttype application/octetstream;
        来自:
        帮助文档
        企业主机安全
        最佳实践
        线下IDC通过专线和代理服务器接入HSS
      • 产品优势
        本文为您介绍分布式消息服务MQTT的产品优势。 分布式消息服务MQTT(Message Queuing Telemetry Transport)是一种轻量级的、发布/订阅模式的消息传递协议,通常用于分布式消息服务和物联网(IoT)应用。以下是MQTT的一些优势: 轻量级协议: MQTT是一种非常轻量级的协议,适用于各种网络环境,包括低带宽、高延迟或不稳定的网络。这使得它非常适合在IoT设备之间传递消息,因为这些设备通常有限的资源和能源。 发布/订阅模式: MQTT采用发布/订阅模式,允许客户端订阅感兴趣的主题,以接收与这些主题相关的消息。这种模式具有灵活性,能够支持多对多的通信,而不需要直接点对点的连接。 异步通信: MQTT允许异步通信,客户端可以发布消息而不必等待接收方的响应。这有助于提高系统的响应速度和吞吐量。 保留消息: MQTT支持保留消息,这意味着最新的消息可以保留在主题中,以便新订阅者可以立即获取到最新数据,而不必等待下一个消息发布。 服务质量(QoS): MQTT允许设置不同级别的服务质量,从不保证消息送达(QoS 0)到确保消息送达且不重复传递(QoS 2)。这使得可以根据应用的需求选择适当的传递质量。 可伸缩性: MQTT协议可以在大规模分布式系统中轻松扩展,支持成千上万的客户端同时连接到Broker,使其适用于大型IoT解决方案。 消息过滤: MQTT支持使用通配符来订阅主题,这允许客户端根据特定模式匹配多个主题,以接收相关消息。 支持遗愿消息: MQTT支持遗愿消息(Will Messages),允许客户端指定在异常断开连接时发送一条预定义消息。这对于检测设备在线状态非常有用。 跨平台和多语言支持: MQTT具有广泛的跨平台和多语言支持,因此可以在各种设备和编程语言上使用,使得它非常灵活。 安全性: MQTT可以与安全机制(如TLS/SSL)结合使用,确保消息在传输过程中的安全性和隐私。 总的来说,MQTT是一种高效、灵活和可靠的协议,特别适用于分布式消息传递和IoT应用,因此在物联网、远程监控、实时通信等领域得到广泛应用。它的轻量级特性和异步通信使得它成为连接数众多的设备的理想选择。
        来自:
        帮助文档
        分布式消息服务MQTT
        产品介绍
        产品优势
      • 查询域名的IP列表、区域、运营商
        接口描述:调用本接口查询域名的IP地址,及ip对应的区域,运营商信息 请求方式:post 请求路径:/auxiliarytools/queryvipsdetailbydomain 使用说明: 单个用户一分钟限制调用10000次,并发不超过100 请求参数说明(json): 参数 类型 是否必传 名称 描述 domain list 是 域名列表 最多支持5个 返回参数说明: 参数 类型 是否必传 名称及描述 code int 是 状态码 message string 是 描述信息 result list 是 返回结果数组 result[].domain string 是 域名 result[].details list 是 域名对应的vip列表信息 result[].details[].vips string 是 vip信息,多个用逗号“,”分割 result[].details[].cityName string 是 城市名称 result[].details[].nodename string 是 节点名称 result[].details[].provinceName string 是 省份名称 result[].details[].ispName string 是 运营商名称 示例: 请求路径: 示例1: 请求参数: {     "domain": [         "ctyun.cn"     ] } 返回结果: {     "code": 100000,     "message": "success",     "result": [         {             "domain": "ctyun.cn",             "details": [                 {                     "vips": "xx.xx.xx.xx,xx:xx:xx:xx::",                     "cityName": "呼和浩特市",                     "nodename": "xxx1",                     "provinceName": "内蒙古自治区",                     "ispName": "中国电信"                 },                 {                     "vips": "xx.xx.xx.xx,xx:xx:xx:xx::",                     "cityName": "通州区",                     "nodename": "xxx2",                     "provinceName": "北京市",                     "ispName": "中国电信"                 }             ]         }     ] }
        来自:
        帮助文档
        安全加速(文档停止维护)
        API参考
        API
        统计分析
        查询域名的IP列表、区域、运营商
      • 查询域名的VIP列表,区域,运营商
        接口描述:调用本接口查询域名的IP地址,及ip对应的区域,运营商信息 请求方式:post 请求路径:/auxiliarytools/queryvipsdetailbydomain 使用说明: 单个用户一分钟限制调用10000次,并发不超过100 请求参数说明(json): 参数 类型 是否必传 名称 描述 domain list 是 域名列表 最多支持5个 返回参数说明: 参数 类型 是否必传 名称及描述 code int 是 状态码 message string 是 描述信息 result list 否 返回结果数组 result[].domain string 否 域名 result[].details list 否 域名对应的vip列表信息 result[].details[].vips string 否 vip信息,多个用逗号“,”分割 result[].details[].cityName string 否 城市名称 result[].details[].nodename string 否 节点名称 result[].details[].provinceName string 否 省份名 result[].details[].ispName string 否 运营商名称 示例: 请求路径: 请求参数: {         "domain":[             "aaa.ctyun.cn"     ] } 返回结果: {      "code": 100000,        "message": "success",         "result": [      {                  "domain": "aaa.ctyun.cn",                   "details": [                {                                         "vips": "xx.xx.xx.xx,xx:xx:xx:xx::",                                       "cityName": "呼和浩特市",                                        "nodename": "xxx1",                                       "provinceName": "内蒙古自治区",                                         "ispName": "中国电信"                 },                 {                                         "vips": "xx.xx.xx.xx,xx:xx:xx:xx::",                                         "cityName": "通州区",                                         "nodename": "xxx2",                                        "provinceName": "北京市",                                         "ispName": "中国电信"                 }             ]         }     ] } 错误码请参考:参数code和message含义
        来自:
      • 数据备份
        本页介绍天翼云TeleDB数据库数据备份。 操作场景 数据备份是指直接备份数据库所对应的数据文件甚至是整个磁盘。TeleDB实例创建成功后,您可根据业务需要设置备份策略。TeleDB可按照用户设置的自动备份策略对数据库进行备份。 操作步骤 1. 以用户名和密码登录分布式数据库TeleDB控制台,在左侧导航树中选择备份与恢复 > 备份与恢复。 2. 进入备份与修复 页面,将当前实例切换至目标实例。 3. 设置备份策略 1. 在数据备份页签,单击备份策略 ,出现备份策略 对话框。 2. 单击去设置 ,进入备份策略设置 对话框,打开备份开启状态 开关,根据如下内容填写备份策略基本信息。 备份开启时间:系统触发备份的时间,建议选择业务压力小的时间点。 备份间隔天数:间隔多少天触发一次备份,为防止数据丢失难以恢复,建议间隔时间不超过3天。 备份保留分数:系统保留的备份的份数,超过此数量,系统自动删除最旧的一次备份。保留份数取决于存储空间大小,建议选择大于2份。 增量备份开启状态:增量备份数据用于恢复到指定时间点,对于恢复及其重要,暂时不支持关闭增量备份。 3. 单击确定完成实例备份。 4. 如需再次修改备份策略设置,可重复以上操作即可。 4. 手动备份 1. 在数据备份 页签,单击备份策略 ,出现备份策略对话框。 2. 单击手动备份。 5. 查看备份详情 1. 在数据备份 页签,单击目标实例所在行详情 ,弹出备份详情 对话框。 2. 当处于备份过程中时,可单击刷新 查看节点备份状态的实时变化。 说明 备份目录:远程对象存储上的备份地址。备份时,系统会在对象存储上建立一个以实例id命名的桶,实例的所有备份数据都回存储在这个桶下面。这里备份地址是全量备份在桶下面的相对路径。 全量备份数据路径:实例名/basebkp年月日/。 增量备份数据路径:实例名/xlogbkp。 6. 删除备份 在数据备份页签,选择需删除的备份文件的目标实例,单击操作列的删除 按钮,在出现的对话框中单击确认即可删除指定的备份记录和备份数据。 注意 TeleDBX 支持删除一次备份记录,该备份记录对应在对象存储上的备份数据也会同步删除,请谨慎操作 。
        来自:
        帮助文档
        分布式融合数据库HTAP
        私有云产品历史版本
        V4.0.0版本产品文档
        管理平台使用手册
        备份与恢复
        数据备份
      • AnythingLLM 协同 Ollama 启用 DeepSeek 大模型最佳实践
        进入控制台,远程登陆即将安装AnythingLLM的云主机。 二、AnythingLLM 服务部署( docker 方式) 1. 获取 AnythingLLM docker image 文件。 由于国内无法访问 docker hub 网站,您需要修改 docker 的服务配置文件,添加国内可访问的源,以便能够顺利拉取 AnythingLLM docker image 文件。操作步骤如下: 向 docker 配置文件中添加国内可访问的 docker 镜像源 重启 docker 服务 拉取 AnythingLLM docker image plaintext Docker 守护进程( daemon )的配置文件。添加国内可访问镜像源。 sudo vi /etc/docker/daemon.json 重启 docker 服务 sudo systemctl restart docker 确认 docker 服务正常 sudo systemctl status docker 拉取 anythingllm 镜像 docker pull mintplexlabs/anythingllm daemon.json 文件添加的内容为: plaintext { "registrymirrors": [" " " } daemon.json 文件如下,仅供参考: 2. 启动 AnythingLLM 服务。 首先查看下载的 AnythingLLM 容器镜像的 tag 启动 AnythingLLM 服务 查看 AnythingLLM 服务状态 plaintext 查看当前的容器镜像列表 docker image list 启动 AnythingLLM 服务,下述 PROT 参数需要与第一部分开放的端口相对应 docker run d e PORT3001 e OLLAMABASEURL e ENABLESIGNUPtrue e ENABLEOPENAIAPIFalse addhosthost.docker.internal:hostgateway nethost v anythingLLM:/app/backend/data name anythingLLM restart always mintplexlabs/anythingllm:latest 查看 AnythingLLM 服务状态 docker ps a
        来自:
        帮助文档
        弹性云主机 ECS
        DeepSeek专题
        实践指南:DeepSeek驱动高效能云生态
        GPU云主机/弹性云主机:零基础搭建DeepSeek云端环境指南
        AnythingLLM 协同 Ollama 启用 DeepSeek 大模型最佳实践
      • 操作系统安全
        提升操作系统访问安全性 使用密钥对登录实例 密钥对由公钥和私钥组成,是一种安全的身份认证方式,相较于传统账号密码登录,具备更高安全性与便捷性,为提高安全性,建议使用密钥对登录实例。 天翼云密钥对默认采用 RSA2048 位加解密算法,密钥对的安全强度远高于常规密码,能有效杜绝暴力破解风险,避免因密码泄露导致的实例被非法登录。将公钥配置在 Linux 实例后,用户可在本地或其他实例中,通过私钥直接登录目标实例,无需重复输入密码,对于批量管理多台 Linux 实例场景,密钥对登录能大幅提升运维效率。 配置建议:创建实例时可直接指定密钥对,或在实例创建后绑定密钥对;建议在 SSH 配置文件中禁用密码登录,仅支持密钥对登录,进一步强化登录安全。更多信息,请参见++密钥对使用场景介绍++ 避免敏感端口 0.0.0.0/0 授权 未对端口授权进行管理的情况下,云主机允许任意来源的访问,可能导致网络中的攻击者在未经授权的情况下,通过Linux操作系统22端口(用于SSH连接)或Windows操作系统的3389端口(用于RDP远程桌面服务)登录到操作系统中,对系统进行攻击。安全组是一种网络安全防护机制,用于防止未经授权的访问和保护计算机网络免受恶意攻击。它是一种虚拟防火墙,用于限制入向和出向网络流量。安全组工作在网络层和传输层,它通过检查数据包的源地址、目标地址、协议类型和端口号等信息来决定是否允许通过。更多信息,请参见++安全组概述++。 安全加固操作系统
        来自:
        帮助文档
        弹性云主机 ECS
        安全合规
        操作系统安全
      • 自定义防护规则组
        本文为您介绍Web基础防护模块中,自定义防护规则组的配置方式。 云WAF的防护规则引擎支持用户自定义搭建防护规则组,为具体的防护场景创建有针对性的防护策略。在设置网站防护功能时,如果默认的防护规则组不能满足您的需求,建议您自定义防护规则组。 前提条件 已开通了Web应用防火墙,且实例版本为标准版及以上版本。 已完成网站接入。具体操作,请参见添加域名。 使用限制 基础版不支持自定义防护规则组,请升级到更高版本使用。 使用流程 防护规则组应用流程如下: 1. 新建规则组:为具体防护功能创建自定义防护规则组,形成有针对性的防护策略。 2. 应用规则组:添加自定义防护规则组后,您可以为网站域名应用自定义防护规则组。 操作步骤 1. 登录天翼云控制中心。 2. 单击页面顶部的区域选择框,选择区域。 3. 在产品服务列表页,选择“安全 > Web应用防火墙(原生版)”。 4. 在左侧导航栏,选择“防护配置 > 对象防护配置”,进入防护配置页面。 5. 在“防护配置”页面上方的“防护对象选择”下拉框,切换到要设置的域名。 6. 在“安全防护”页签定位到“Web基础防护”模块,在防护规则组后方点击“前去配置”。 7. 进入“规则组配置”页面,可以看到当前的规则组列表。规则组列表展示了系统默认防护规则组及自定义防护规则组。 8. 在规则组列表上方,点击“新建规则组”,进入新建规则组页面,完成以下信息配置。 配置项 说明 规则组名称 设置规则组的名称。规则组名称用于标识当前规则组,建议您使用有明确含义的名称。 规则组模板 选择要应用的规则组模板。可选项: 严格规则组 中等规则组 宽松规则组 其他自定义规则组 规则组模板可以多选,系统会将所选的规则组最大集作为模板,下一步基于该集合进行规则配置。 规则组描述 输入规则组的描述信息。 规则配置 选择当前规则组要应用的防护规则。当前规则列表默认展示您所选的规则组模板集合中的所有规则,您需要从中勾选适用的规则,将不适用或者可能造成误拦截的规则取消勾选。 您可以使用筛选和搜索功能查询规则,例如通过危险等级、防护类型筛选规则,或者输入规则名称、CVE编号、规则ID搜索规则。 危险等级:表示规则防御的Web攻击的危险等级,包括高危、中危、低危。 防护类型:表示规则防御的Web攻击类型,包括SQL注入、XSS、目录穿越、Java代码执行、PHP代码执行、ASP代码执行、通用代码执行、Java反序列化、PHP反序列化、本地文件包含、远程文件包含、文件上传、CSRF、SSRF、命令注入、信息泄露、模板注入、XML实体注入、Xpath注入、LDAP注入、自定义精准攻击、未知攻击。 9. 如您暂时无需应用新建的规则组,可以在完成以上配置后,点击“保存”,完成配置向导。后续需要应用该规则组的时候再配置即可。 10. (可选)点击“下一步,应用到防护对象”将规则组应用到域名。从“待接入防护对象”列表中选择要应用当前规则组的域名,添加到“已接入防护对象”列表,单击“保存”。 注意 每个防护对象只能应用一个防护规则组。 11. 完成操作后,您可以在规则组列表中查看新建的规则组,包括规则组的更新时间以及应用域名的情况。 12. 您可以根据需要调整应用防护规则组的域名,通过点击“应用到防护对象”进行操作即可。 13. 创建规则组后,您可以在防护规则组列表中查看规则组内置规则情况,点击“内置规则数”列的数字进入规则列表。
        来自:
        帮助文档
        Web应用防火墙(原生版)
        用户指南
        防护配置
        对象防护配置(安全防护)
        Web核心防护
        自定义防护规则组
      • 物理备份
        本页介绍天翼云TeleDB数据库物理备份相关操作。 操作场景 物理备份是指直接备份数据库所对应的数据文件甚至是整个磁盘。TeleDB实例创建成功后,您可根据业务需要设置备份策略。TeleDB可按照用户设置的自动备份策略对数据库进行备份。 操作步骤 1. 切换至TeleDB控制台,在左侧导航树中选择备份与恢复 > 物理备份与恢复。 2. 进入物理备份与修复 页面,将当前实例切换至目标实例。 3. 设置备份策略 1. 在数据备份页签,单击备份策略,出现备份策略对话框。 2. 单击去设置,进入备份策略设置对话框,打开备份开启状态开关,根据如下内容填写备份策略基本信息。 备份开启时间:系统触发备份的时间,建议选择业务压力小的时间点。 备份间隔天数:间隔多少天触发一次备份,为防止数据丢失难以恢复,建议间隔时间不超过3天。 备份保留分数:系统保留的备份的份数,超过此数量,系统自动删除最旧的一次备份。保留份数取决于存储空间大小,建议选择大于2份。 增量备份开启状态:增量备份数据用于恢复到指定时间点,对于恢复及其重要,暂时不支持关闭增量备份。 3. 单击确定完成实例备份。 4. 如需再次修改备份策略设置,可重复以上操作即可。 4. 手动备份 1. 在数据备份 页签,单击备份策略 ,出现备份策略对话框。 2. 单击手动备份。 5. 查看备份详情 1. 在数据备份页签,单击目标实例所在行详情,弹出备份详情对话框。 2. 当处于备份过程中时,可单击刷新 查看节点备份状态的实时变化。 说明 备份目录:远程对象存储上的备份地址。备份时,系统会在对象存储上建立一个以实例id命名的桶,实例的所有备份数据都回存储在这个桶下面。这里备份地址是全量备份在桶下面的相对路径。 全量备份数据路径:实例名/basebkp年月日/。 增量备份数据路径:实例名/xlogbkp。 6. 删除备份 在数据备份页签,选择需删除的备份文件的目标实例,单击操作列的删除按钮,在出现的对话框中单击确认即可删除指定的备份记录和备份数据。 注意 TeleDB 支持删除一次备份记录,该备份记录对应在对象存储上的备份数据也会同步删除,请谨慎操作。
        来自:
        帮助文档
        分布式融合数据库HTAP
        私有云产品历史版本
        V5.1.0版本产品文档
        管理平台使用手册
        控制台操作指南
        备份与恢复
        物理备份
      • 读写SQL_Server数据(tds_fdw)
        本小节主要介绍RDSPostgreSQL的tdsfdw插件使用方法。 操作场景 RDSPostgreSQL支持 tdsfdw插件,可以连接到使用表格数据流(TDS)协议的数据库,如Sybase数据库和Microsoft SQL Server。 前提条件 请确保您的实例内核大版本满足,本插件所支持的内核版本,请参考支持的版本插件列表。 注意事项 请确保目标数据库的网络与您的数据库实例互通。 插件使用 安装插件 sql CREATE EXTENSION IF NOT EXISTS tdsfdw; 卸载插件 sql DROP EXTENSION IF EXISTS tdsfdw; 使用示例 1.创建服务器,示例如下: CREATE SERVER mssqlsvr FOREIGN DATA WRAPPER tdsfdw OPTIONS (servername ' ', port 'SQLSERVERVPCDBPORT', database 'testdb', tdsversion '7.1'); 说明:服务器定义中的servername必须配置为SQL Server的内网地址,port必须配置为SQL Server的内网端口。 2.创建外部表。您可以通过多种方式创建外部表: 2.1使用tablename定义创建外部表,示例如下: CREATE FOREIGN TABLE mssqltable1 ( id integer, data varchar) SERVER mssqlsvr OPTIONS (tablename 'dbo.mytable', rowestimatemethod 'showplanall'); 2.2使用schemaname和tablename定义创建外部表,示例如下: CREATE FOREIGN TABLE mssqltable2 ( id integer, data varchar) SERVER mssqlsvr OPTIONS (schemaname 'dbo', tablename 'mytable', rowestimatemethod 'showplanall'); 2.3使用query定义创建外部表,示例如下: CREATE FOREIGN TABLE mssqltable3 ( id integer, data varchar) SERVER mssqlsvr OPTIONS (query 'SELECT FROM dbo.mytable', rowestimatemethod 'showplanall'); 2.4使用远程列名创建外部表,示例如下: CREATE FOREIGN TABLE mssqltable4 ( id integer, col2 varchar OPTIONS (columnname 'data')) SERVER mssqlsvr OPTIONS (schemaname 'dbo', tablename 'mytable', rowestimatemethod 'showplanall'); 2.5创建用户映射,示例如下: CREATE USER MAPPING FOR root SERVER mssqlsvr OPTIONS (username 'test', password 'Pgdb12%^'); 2.6导入外部模式,示例如下: IMPORT FOREIGN SCHEMA dbo EXCEPT (mssqltable) FROM SERVER mssqlsvr INTO public OPTIONS (importdefault 'true'); :SQL Server的内网地址。 :SQL Server的内网端口。
        来自:
        帮助文档
        关系数据库PostgreSQL版
        用户指南
        插件管理
        读写SQL_Server数据(tds_fdw)
      • 创建节点池
        操作场景 本章介绍了如何添加运行CCE集群的节点池以及对节点池执行操作。要了解节点池的工作原理,请参阅节点池概述。 操作步骤 将节点池添加到现有集群。 步骤 1 登录CCE控制台,在左侧导航栏中选择“资源管理 > 节点池管理”。 步骤 2 单击右上角的“创建节点池”。 步骤 3 在创建节点池页面中,参照如下说明设置节点池选型参数。 计费模式: 节点池仅支持“按需计费”的计费模式,该模式将根据实际使用的资源按小时计费。 节点池创建后,自建的节点池里的资源无法转包周期,默认节点池里的资源可以转包周期。您可以把自建节点池里的资源迁移到默认的节点池里后再进行转包周期的操作。如何迁移请参见迁移节点。 当前区域:指节点实例所在的物理位置。 请就近选择靠近您业务的区域,可减少网络时延,提高访问速度;不同区域的云服务产品之间内网互不相通。 节点池名称:新建节点池的名称,默认按“集群名nodepool随机数”生成名称,可自定义。 节点类型:目前仅支持虚拟机节点。 节点购买数量:该节点池下购买的节点数量,此处设置的节点数不能超过集群管理的最大节点规模,请根据业务需求和界面提示选择,如需更多配额,请单击提交工单申请扩大配额。 弹性扩缩容: − 默认不开启。 − 单击 开启后,节点池将根据集群负载情况自动创建或删除节点池内的节点,参数设置如下: 节点数上限和节点数下限:您可设置节点数的上限和下限,保证节点数在合理的范围内伸缩。 优先级:请根据业务需要设置相应数值,该数值表示节点池之间进行弹性扩缩容的优先级,数值越大优先级越高,如设置为4的节点池比设置为1的节点池优先启动弹性伸缩。若多个节点池的值设置相同,如都设置为2,表示这几个节点池之间不分优先级,系统将按最小资源浪费原则进行伸缩。 弹性缩容冷却时间:请设置时间,单位为分钟或小时。弹性缩容冷却时间是指当前节点池扩容出的节点多长时间不能被缩容。 说明: 节点池中的节点建议不要放置重要数据,以防止节点被弹性缩容,数据无法恢复。 为保证功能的正常使用,节点池开启弹性扩缩容功能后,请务必安装autoscaler。 可用区:可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 请根据业务需要进行选择。节点池创建之后不支持修改可用区属性,请谨慎选择。 如果您需要提高工作负载的高可靠性,建议您选择“随机可用区”,将节点随机均匀分布在不同可用区中。 节点规格:请根据业务需求选择相应的节点规格。 须知: 为确保节点稳定性,系统会自动预留部分资源,用于运行必须的系统组件,详细请参见节点预留资源计算公式 。 操作系统:请直接选择节点对应的操作系统。 须知:重装操作系统或修改操作系统配置将导致节点不可用,请务必谨慎操作。 虚拟私有云:跟随集群,不可变更。 所在子网:通过子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全。 可选择该集群虚拟私有云下的任意子网,集群节点支持跨子网。 请确保子网下的DNS服务器可以解析对象存储服务域名,否则无法创建节点。 系统盘:设置工作节点的系统盘空间。您可以设置系统盘的规格为40GB1024GB之间的数值,缺省值为40GB。 在默认情况下,系统盘可提供高IO、超高IO两种基本的云硬盘类型。 数据盘:设置工作节点的数据盘空间。您可以设置数据盘的规格为100GB32768GB之间的数值,缺省值为100GB。数据盘可提供的云硬盘类型与系统盘一致,此处不再赘述,详情参见系统盘中的云硬盘类型介绍。 须知: 若数据盘卸载或损坏,会导致docker服务异常,最终导致节点不可用。建议不要删除该数据盘。 登录方式:支持密码和密钥对。 −选择“密码”:用户名默认为“root”,请输入登录节点的密码,并确认密码。 登录节点时需要使用该密码,请妥善管理密码,系统无法获取您设置的密码内容。 −选择“密钥对”:在选项框中选择用于登录本节点的密钥对,并单击勾选确认信息。 密钥对用于远程登录节点时的身份认证。若没有密钥对,可单击选项框右侧的“创建密钥对”来新建,创建密钥对操作步骤请参见。 步骤 4 云服务器高级设置:(可选),单击 展开后可对节点进行如下高级功能配置: 安装前执行脚本:请输入脚本命令,大小限制为0~1000字符。 脚本将在Kubernetes软件安装前执行,可能导致Kubernetes软件无法正常安装,需谨慎使用。常用于格式化数据盘等场景。 安装后执行脚本:请输入脚本命令,大小限制为0~1000字符。 脚本将在Kubernetes软件安装后执行,不影响Kubernetes软件安装。常用于修改Docker配置参数等场景。 步骤 5 Kubernetes高级设置:(可选),单击 展开后可对集群进行如下高级功能配置: 最大实例数:节点最大允许创建的实例数(Pod),该数量包含系统默认实例,取值范围为16~128。 该设置的目的为防止节点因管理过多实例而负载过重,请根据您的业务需要进行设置。 Taints:默认为空。支持给该节点池扩容出来的节点加Taints来设置反亲和性,每个节点池最多配置10条Taints,每条Taints包含以下3个参数: −Key:必须以字母或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符;另外可以使用DNS子域作为前缀。 −Value:必须以字符或数字开头,可以包含字母、数字、连字符、下划线和点,最长63个字符。 −Effect:只可选NoSchedule,PreferNoSchedule或NoExecute。 须知: Taints配置时需要配合Pod的toleration使用,否则可能导致扩容失败或者Pod无法调度到扩容节点。 节点池创建后可单击列表项的“编辑”修改配置,修改后将同步到节点池下的已有节点。 K8S标签:K8S标签是附加到Kubernetes 对象(比如Pods)上的键值对,旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 详细请参见Labels and Selectors。 单容器可用数据空间:该参数用于设置一个容器可用的数据空间大小,设置范围为10G到80G。如果设置的参数超过数据盘中Docker可占用的实际数据空间(由数据盘设置项中的资源分配自定义参数指定,默认为数据盘大小的90%),将以Docker的实际空间大小为主。该参数仅在v1.13.10r0及以上版本的集群中显示。 步骤 6 (可选)您可以单击左侧的 按钮添加多个节点池,在按钮下方可以查看您可用的节点池配额数量。 步骤 7 完成配置后,单击“下一步:配置确认”,确认所设置的服务选型参数、规格和费用等信息。 步骤 8 确认规格和费用后,单击“提交”,节点池开始创建。 节点池创建预计需要610分钟,您可以单击“返回节点池管理”进行其他操作或单击“查看节点池事件列表”后查看节点池详情。待节点池状态为“正常”,表示节点池创建成功。 查看创建的节点池 步骤 1 登录CCE控制台,在左侧导航栏中选择“资源管理 > 节点池管理”。 步骤 2 在节点池管理页面中,单击右上角的集群选择框,选择集群后可显示当前集群下所有的节点池,并可查看每个节点池的节点类型、节点规格、弹性扩缩容状态和操作系统等。 须知: 节点池功能上线后,会在每个集群中创建一个默认节点池“DefaultPool”,该节点池不能被编辑、删除或迁移,集群中原有的节点及节点池外创建的节点均会显示在默认节点池“DefaultPool”中。 单击默认节点池“DefaultPool”中“节点”数据框,可查看DefaultPool中的节点列表。 步骤 3 单击右上角的Autoscaler状态选择框,可筛选全部、已启用、未启用Autoscaler功能的节点池。 步骤 4 在节点池列表中,单击节点池的名称,在节点池详情页面,可查看节点池的基本信息、ECS高级设置、Kubernetes高级设置、节点列表等信息。
        来自:
        帮助文档
        云容器引擎
        用户指南
        旧版UI
        节点池管理
        创建节点池
      • 添加TCP监听器
        本文主要介绍如何添加TCP监听器。 操作场景 TCP协议适用于注重可靠性,对数据准确性要求高,速度可以相对较慢的场景,如文件传输、发送或接收邮件、远程登录等。您可以添加一个TCP监听器转发来自TCP协议的请求。 注意 前端协议为“TCP”时,后端协议默认为“TCP”,且不支持修改。 如果您的独享型负载均衡实例类型为应用型(HTTP/HTTPS),则无法创建TCP监听器。 添加独享型负载均衡TCP监听器 1. 登录管理控制台。 2. 在管理控制台左上角选择区域和项目。 3. 选择“服务列表 > 网络 > 弹性负载均衡”。 4. 在“负载均衡器”界面,单击需要添加监听器的负载均衡名称。 5. 切换到“监听器”页签,单击“添加监听器”,配置监听器。配置监听器参数。 独享型负载均衡配置监听器参数说明表 参数 说明 示例 ::: 名称 监听器名称。 listenerpnqy 前端协议/端口 负载分发的协议和端口。 协议选择TCP,端口取值范围[165535]。 TCP/80 高级配置 访问策略 支持通过白名单和黑名单进行访问控制: 允许所有IP访问 黑名单 白名单 黑名单 IP地址组 设置白名单或者黑名单时,必须选择一个IP地址组。如果还未创建IP地址组,需要先创建IP地址组。 ipGroupb2 空闲超时时间 如果在超时时间内一直没有访问请求,负载均衡会中断当前连接,直到下一次请求到来时再重新建立新的连接。 取值范围:10~4000s 300 描述 对于监听器描述。 字数范围:0/255。 标签 可通过配置该项使用标签功能。标签的“键”和“值”是一一对应的,其中“键”值是唯一的。 6. 单击“下一步”,配置后端主机组及配置健康检查。 独享型负载均衡配置后端主机组参数说明表 参数 说明 示例 后端主机组 把具有相同特性的后端主机放在一个组。说明:使用已有后端主机组时,请确保此后端主机组未被使用。 并且只能选择前端协议匹配的后端主机组。例如前端协议是TCP时,后端协议只能是TCP。 新创建 名称 后端主机组名称。 servergroupsq4v 后端协议 云主机开通的协议。前端协议为TCP时,后端协议默认为TCP,不支持修改。 TCP 分配策略类型 负载均衡采用的算法。说明:用户可以根据自身需求选择相应的算法来分配用户访问流量, 提升负载均衡能力。对于加权轮询算法和加权最少连接,当主机的权重为“0”时,将不会被分发访问请求。 加权轮询算法 会话保持 开启会话保持后,弹性负载均衡将属于同一个会话的请求都转发到同一个主机进行处理。 说明:当分配策略类型为“加权轮询算法”或"加权最少连接”时,可配置会话保持。 会话保持类型 TCP和UDP协议仅支持源IP地址类型。 源IP地址 会话保持时间(分钟) 当分配策略类型选择“加权轮询算法”或“加权最少连接”,会话保持开启后, 需添加会话保持时间。四层会话保持的会话保持时间取值范围为[1,60]。 七层会话保持的会话保持时间取值范围为[1,1440]。 20 描述 后端主机组的描述。字数范围:0/255。 7. 配置健康检查参数。 独享型负载均衡配置健康检查参数说明表 参数 说明 示例 是否开启 开启或者关闭健康检查。 协议 健康检查支持TCP、HTTP、HTTPS协议,设置后不可修改。 HTTP 域名 健康检查的请求域名。当健康检查协议为HTTP或HTTPS时,需要设置。 默认值为空,只能由数字、字母、‘’组成,中划线不能在开头或末尾,至少包含两个字符串, 单个字符串不超过63个字符,字符串间以点分割,且总长度不超过100个字。 www.elb.com 高级配置 检查间隔(秒) 每次健康检查响应的最大间隔时间。取值范围[150]。 5 超时时间(秒) 每次健康检查响应的最大超时时间。取值范围[150]。 3 检查路径 指定健康检查的URL地址。当“协议”为HTTP时生效。检查路径只能以/开头,长度范围[180]。 支持使用英文字母、数字和‘’、‘/’、‘.’、‘%’、‘&’以及特殊字符~';@$+,!:()。 例如:访问链接为: 访问链接为: /index.html 最大重试次数 健康检查最大的重试次数,取值范围[110]。 3 8. 单击“完成”。
        来自:
        帮助文档
        弹性负载均衡 ELB
        用户指南
        监听器
        添加TCP监听器
      • 查询域名的IP列表,区域,运营商
        接口描述:调用本接口查询域名的IP地址,及ip对应的区域,运营商信息 请求方式:post 请求路径:/auxiliarytools/queryvipsdetailbydomain 使用说明: 单个用户一分钟限制调用10000次,并发不超过100 请求参数说明(json): 参数 类型 是否必传 名称 描述 ::::: domain list 是 域名列表 最多支持5个 返回参数说明: 参数 类型 是否必传 名称及描述 :::: code int 是 状态码 message string 是 描述信息 result list 否 返回结果数组 result[].domain string 否 域名 result[].details list 否 域名对应的vip列表信息 result[].details[ ].vips string 否 vip信息,多个用逗号“,”分割 result[].details[ ].cityName string 否 城市名称 result[].details[ ].nodename string 否 节点名称 result[].details[ ].provinceName string 否 省份名 result[].details[ ].ispName string 否 运营商名称 示例: 请求路径: 请求参数: { "domain":[ "test.ctyun.cn" ] } 返回结果: { "code": 100000, "message": "success", "result": [ { "domain": "test.ctyun.cn", "details": [ { "vips": "xx.xx.xx.xx,xx:xx:xx:xx::", "cityName": "呼和浩特市", "nodename": "xxx1", "provinceName": "内蒙古自治区", "ispName": "中国电信" }, { "vips": "xx.xx.xx.xx,xx:xx:xx:xx::", "cityName": "通州区", "nodename": "xxx2", "provinceName": "北京市", "ispName": "中国电信" } ] } ] } 错误码请参考:参数code和message含义
        来自:
        帮助文档
        CDN加速
        API参考
        API
        辅助工具
        查询域名的IP列表,区域,运营商
      • 个人设置
        本章主要介绍个人设置 消息通知 在“消息通知”页面,可以配置当前用户是否接收软件开发生产线各服务消息通知。 消息通知方式说明 软件开发生产线消息通知有两种方式:浏览器桌面通知、邮件通知。 浏览器桌面通知:消息通知将发送至PC端桌面,内容包括代码检查、编译构建、部署、流水线任务的执行结果。 邮件通知:根据各服务通知设置,软件开发生产线将发送消息通知至的对应成员的邮箱中。 开启/关闭通知 步骤 1 进入软件开发生产线首页,单击页面右上角用户名,在下拉菜单中选择“个人设置”。 步骤 2 页面默认跳转至“消息通知”页面,根据需要选择开启或关闭通知。 若需要修改接收消息通知的邮箱,请单击“更改设置”,根据页面提示修改邮箱地址。 消息设置 设置勿扰时间 软件开发生产线默认24小时接收消息通知,通过勿扰时间设置可以设置每天的某个时间段内不接收消息通知。 步骤 1 单击“勿扰时段设置”开关至状态。 步骤 2 单击更改设置,根据需要再弹框中设置开始时间与结束时间,单击“确定”。 勿扰时段设置 SSH密钥/HTTPS密码管理 什么是SSH密钥/HTTPS密码 当您需要从云端代码仓库拉取代码到本地,或将代码推送到云端代码仓库中时,代码仓库需要验证您的身份与权限,SSH和HTTPS是对云端代码仓库进行远程访问的两种身份验证方式。 SSH密钥是在本地计算机与您帐号下的代码仓库之间建立安全连接。 在一台本地计算机上配置了SSH密钥并添加公钥到代码托管服务中后,所有该帐号下的代码仓库与该台计算机之间都可以使用该密钥进行连接。 不同的用户通常使用不同的电脑,在使用SSH方式连接代码仓库前需要在自己电脑生成自己的SSH密钥,并设置到代码托管服务中。 HTTPS密码是HTTPS协议方式下载、上传时使用的用户凭证。 每个开发者,只需要设置一次密码,所有该项目下的仓库都会生效。 说明 两种方式中,使用其中任何一种方式都可以进行代码的上传下载,密钥(密码)的设置根据您选择的连接方式设定即可。
        来自:
        帮助文档
        软件开发生产线CodeArts
        用户指南
        个人设置
      • 产品与使用
        IKEv1和IKEv2的区别 协商过程不同。 IKEv1协商安全联盟主要分为两个阶段,其协议相对复杂、带宽占用较多。IKEv1阶段1的目的是建立IKE SA,它支持两种协商模式:主模式和野蛮模式。主模式用6条ISAKMP消息完成协商。野蛮模式用3条ISAKMP消息完成协商。野蛮模式的优点是建立IKE SA的速度较快。但是由于野蛮模式密钥交换与身份认证一起进行无法提供身份保护。IKEv1阶段2的目的就是建立用来传输数据的IPsec SA,通过快速交换模式(3条ISAKMP消息)完成协商。 IKEv2简化了安全联盟的协商过程。IKEv2正常情况使用2次交换共4条消息就可以完成一个IKE SA和一对IPsec SA,如果要求建立的IPsec SA大于一对时,每一对SA只需额外增加1次交换,也就是2条消息就可以完成。 说明 IKEv1协商,主模式需要6+3,共9个报文;野蛮模式需要3+3,共6个报文。IKEv2协商,只需要2+2,共4个报文。 认证方法不同。 数字信封认证(hssde)仅IKEv1支持(需要安装加密卡),IKEv2不支持。 IKEv2支持EAP身份认证。IKEv2可以借助AAA服务器对远程接入的PC、手机等进行身份认证、分配私网IP地址。IKEv1无法提供此功能,必须借助L2TP来分配私网地址。 IKE SA的完整性算法支持情况不同。IKE SA的完整性算法仅IKEv2支持,IKEv1不支持。 DPD中超时重传实现不同。 retryinterval参数仅IKEv1支持。表示发送DPD报文后,如果超过此时间间隔未收到正确的应答报文,DPD记录失败事件1次。当失败事件达到5次时,删除IKE SA和相应的IPsec SA。直到隧道中有流量时,两端重新协商建立IKE SA。 对于IKEv2方式的IPsec SA,超时重传时间间隔从1到64以指数增长的方式增加。在8次尝试后还未收到对端发过来的报文,则认为对端已经下线,删除IKE SA和相应的IPsec SA。 IKE SA与IPsec SA超时时间手工调整功能支持不同。 IKEv2的IKE SA软超时为硬超时的9/10±一个随机数,所以IKEv2一般不存在两端同时发起重协商的情况,故IKEv2不需要配置软超时时间。
        来自:
        帮助文档
        VPN连接
        常见问题
        企业版VPN
        产品与使用
      • 1
      • ...
      • 39
      • 40
      • 41
      • 42
      • 43
      • ...
      • 452
      跳转至
      推荐热词
      天翼云运维管理审计系统天翼云云服务平台云服务备份云日志服务应用运维管理云手机云电脑天翼云云hbase数据库电信云大数据saas服务电信云大数据paas服务轻量型云主机天翼云客户服务电话应用编排服务天翼云云安全解决方案云服务总线CSB天翼云服务器配置天翼云联邦学习产品天翼云云安全天翼云企业上云解决方案天翼云产品天翼云视频云存储

      天翼云最新活动

      云聚517 · 好价翼起拼

      爆款云主机低至25.83元/年,参与拼团享更多优惠,拼成得额外优惠券

      安全隔离版OpenClaw

      OpenClaw云服务器专属“龙虾“套餐低至1.5折起

      聚力AI赋能 天翼云大模型专项

      大模型特惠专区·Token Plan 轻享包低至9.9元起

      青云志云端助力计划

      一站式科研助手,海外资源安全访问平台,助力青年翼展宏图,平步青云

      企业出海解决方案

      助力您的业务扬帆出海,通达全球!

      天翼云信创专区

      “一云多芯、一云多态”,国产化软件全面适配,国产操作系统及硬件芯片支持丰富

      中小企业服务商合作专区

      国家云助力中小企业腾飞,高额上云补贴重磅上线

      云上钜惠

      爆款云主机全场特惠,2核4G只要1.8折起!

      产品推荐

      物理机 DPS

      GPU云主机

      天翼云CTyunOS系统

      Token服务

      应用托管

      人脸实名认证

      人脸属性识别

      人脸比对

      身份证识别

      推荐文档

      云课堂 第十一课:天翼云虚拟IP地址及其在高可用集群中

      操作手册

      云课堂 第六课:如何让云主机不放在同一个篮子里

      域名的种类

      VPN删除

      切换可用性策略

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 息壤智算平台
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 天翼云国际站
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2026 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号