爆款云主机低至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云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 息壤智算
  • 产品
  • 解决方案
  • 应用商城
  • 定价
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      对象存储(融合版)_相关内容
      • IP被DDoS封堵后如何恢复业务?
        本小节介绍DDoS封禁后如何恢复业务。 IP被DDoS封堵后如何恢复业务? IP 被 DDoS 封堵后,可等待封堵时长到期自动解封,也可通过以下两种方式主动恢复业务,其中购买配置 DDoS 高防并更换 EIP 为推荐方案,仅更换 EIP 存在较大安全风险,不建议使用。 一、购买配置 DDoS 高防并更换 EIP(推荐) DDoS 基础防护的封堵仅支持两种解除方式:等待封堵时间自动到期;或购买配置 DDoS 高防产品后,通过天翼云工单系统申请提前解封。 您可选择天翼云或其他第三方DDoS高防产品防护自身在天翼云的业务IP免受DDoS攻击,以天翼云举例,如天翼云“DDoS高防IP”、天翼云“DDoS高防(边缘云版)”等。这类产品可提供业务 IP 隐藏、大流量攻击清洗、攻击源分析等能力。业务 IP 接入高防防护后,由高防 IP 替代其暴露在公网,攻击者仅能对高防 IP 发起攻击;攻击流量经高防节点清洗后,正常流量回注至业务 IP,不会超出DDoS防护阈值,可避免触发基础防护封堵。 同时请注意:若业务IP历史存在攻击,可能已被攻击者获知,即使配置DDoS高防,攻击者有可能绕过高防IP对业务IP直接发起攻击,若攻击流量过大,仍会超过DDoS防护阈值,触发封禁,因此建议在配置高防的同时,同步更换业务IP并限制仅能被高防IP访问,实现业务IP隐藏。具体购买和配置请咨询DDoS高防产品对应产品厂商。 完成防护配置后即可提交工单申请提前解封。 二、仅更换 EIP(不推荐) 购买新的公网 IP,或使用账号下未被封堵的公网 IP; 将原封禁 EIP 绑定的云资源切换绑定至新公网 IP,即可恢复业务访问。 注意 仅更换 IP 无法从根源抵御 DDoS 攻击,新 IP 仍可能再次遭到攻击。若同一账号下资源频繁触发 DDoS 封堵,持续冲击平台网络稳定性,天翼云有权依据服务协议对账号采取权限限制,包括但不限于暂停新购资源权限等处置措施。
        来自:
        帮助文档
        DDoS基础防护
        常见问题
        公网IP封堵解封类相关问题
        IP被DDoS封堵后如何恢复业务?
      • IP如何提升DDoS防护能力?
        本小节介绍公网IP如何增强DDoS防护能力。 IP 如何提升DDoS防护能力? 若您的公网 IP 频繁遭遇 DDoS 攻击,持续超出 DDoS 基础防护阈值并触发平台防护封堵,可通过以下两种方式强化 DDoS 安全防护能力,降低再次被封堵的风险: 一、购买并配置 DDoS 高防产品(推荐) 天翼云和第三方合规厂商均提供有DDoS高防产品,一般可提供高防IP隐藏业务IP、大流量攻击防护和攻击源分析能力,您可选择天翼云或其他第三方DDoS高防产品防护自身在天翼云的业务IP免受DDoS攻击。以天翼云举例,如天翼云“DDoS高防IP”、天翼云“DDoS高防(边缘云版)”等。 业务 IP 接入高防防护后,将由高防 IP 替代其暴露在公网,攻击者仅能针对高防 IP 发起攻击;攻击流量会在高防资源池完成清洗过滤,仅正常业务流量回注至您的业务 IP,该流量通常不会超出 IP 的DDoS防护阈值,可有效避免触发 DDoS封堵。 同时请注意:若业务IP历史存在攻击,可能已被攻击者获知,即使配置DDoS高防,攻击者有可能绕过高防IP对业务IP直接发起攻击,若攻击流量过大,仍会超过DDoS防护阈值,触发封禁,因此建议在配置高防的同时,同步更换业务IP并限制仅能被高防IP访问,实现业务IP隐藏。具体购买和配置请咨询DDoS高防产品对应产品厂商。 二、配置安全组(仅特定业务场景适用) 在绑定公网 IP 的云主机上配置安全组策略,仅允许指定 IP 和端口访问业务 IP,可在公网层面实现 IP 隐藏。该方式仅适用于无需对公网全面开放的业务(如组织内部跨公网访问场景),绝大多数面向公网的业务不适用此方案。 重要提示:若原业务 IP 已被攻击者获知,即便配置安全组使攻击者无法探活,仍可能遭受盲目攻击;攻击流量直达 IP 所在网络后,若流量超出基础防护阈值,依然会触发DDoS封堵。因此建议配置安全组的同时,同步更换业务 IP。
        来自:
        帮助文档
        DDoS基础防护
        常见问题
        IP如何提升DDoS防护能力?
      • 开启Smart Connect
        本节介绍如何开启Kafka的Smart Connect功能。 Smart Connect用于Kafka实例和其他云服务(如OBS)之间的数据同步,或者两个Kafka实例之间的数据同步,实现数据的备份或迁移。 Smart Connect的使用流程为: 1. 开启Smart Connect。 2. 创建Smart Connect任务。 本章节主要介绍如何开启Smart Connect。 约束与限制 开启Smart Connect后,实例需要另外收取用于Smart Connect的代理费用。 例如:规格为kafka.4u8g.cluster的实例,会另外创建至少两个规格为kafka.4u8g的代理,用于Smart Connect,所以需要收取相应代理费用。 前提条件 已创建Kafka实例,且实例状态为“运行中”。 “auto.create.groups.enable”已设置为“true”。如果需要修改“auto.create.groups.enable”的取值,请参考修改Kafka实例配置参数。 开启Smart Connect 1、登录管理控制台。 2、在管理控制台左上角单击,选择Kafka实例所在的区域。 3、在管理控制台左上角单击,选择“应用服务 > 分布式消息服务 Kafka”,进入分布式消息服务Kafka专享版页面。 4、通过以下任意一种方法,开启Smart Connect。 在待开启Smart Connect的Kafka实例所在行,单击“更多 > 开启Smart Connect”。 单击Kafka实例名称,进入实例详情页面。单击右上角的“更多 > 开启Smart Connect”。 单击Kafka实例名称,进入实例详情页面。在“Smart Connect”后,单击。 单击Kafka实例名称,进入实例详情页面。在左侧导航栏单击“Smart Connect”,进入Smart Connect页面。单击“开启Smart Connect”。 5、单击,将Smart Connect设置为开启,并设置用于Smart Connect的代理数量,代理数取值范围为2~16个,单击“下一步”。 说明 代理数默认为2个,如果您预估2个Kafka实例间的同步流量比较大,例如大于50MB/s,请设置2个以上的代理数。 6、确认“Smart Connect”为开启状态,单击“提交”。 结束
        来自:
        帮助文档
        分布式消息服务Kafka
        用户指南
        Kafka数据迁移
        使用Smart Connect迁移Kafka数据
        开启Smart Connect
      • HTTPS配置
        本文介绍HTTPS定义及配置方法。 功能介绍 HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTPS协议是以安全为目标的HTTP通道,简单来说,HTTPS是HTTP的安全版,即将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS协议。 在天翼云直播控制台开启HTTPS协议,将实现客户端和天翼云直播加速节点之间请求的HTTPS加密。如果想要实现全链路HTTPS传输,则需要在直播加速节点配置HTTPS协议回源(源站服务器需支持HTTPS协议)。 HTTPS请求的基本流程: 1. 客户端以HTTPS协议请求直播加速节点。 2. 直播加速节点将相应的SSL证书公钥发送给客户端。 3. 客户端验证对应证书公钥是否正确,如果正确则生成一个密钥,并使用公钥进行加密,再发送给直播加速节点。 4. 直播加速节点使用对应私钥进行解密,得到密钥。 5. 直播加速节点使用对应密钥对传输的数据加密。 6. 客户端使用对应密钥对直播加速节点传输的加密数据进行解密,从而获取相应数据。 注意事项 域名进行HTTPS配置前,需已在直播控制台上传域名对应的SSL证书。证书上传路径请参见:新增证书。 只有拉流域名支持配置HTTPS。 配置说明 以推拉流场景下的拉流域名为例,操作步骤如下。 1. 登录直播控制台。 2. 在域名列表页面,单击域名操作列表中的【编辑】。 3. 单击【HTTPS配置】。 4. 开启【Https开关】。 5. 选择域名对应的有效证书,并单击页面右下方的【提交保存】。 参数 说明 Https开关 停用:即关闭HTTPS。启用:即开启HTTPS,需要上传HTTPS证书。 证书备注名 选定正确的证书与所配置的域名进行关联。说明:需要先上传相关证书。 HTTPS证书上传 可单击【证书备注名】下拉框下方的【点击上传】按钮,自助添加证书。 支持的tls协议 支持自助配置tls协议。如果未配置,则默认支持所有选项中的协议。
        来自:
        帮助文档
        视频直播
        用户指南
        域名管理
        HTTPS配置
      • 价格详情
        版本 VUM额度 最大并发用户数 有效期 价格(元) 企业版包月售价 不限 10000 1个月 5000 企业版包月售价 不限 50000 1个月 10000 企业版包月售价 不限 100000 1个月 35000 企业版包月售价 不限 1000000 1个月 157500
        来自:
        帮助文档
        性能测试PTS
        计费说明
        价格详情
      • RDB加密
        分布式缓存 Redis 5.0及以上版本支持RDB加密存储,目前RDB加密算法支持AES和国密SM4,您可以通过控制台启用RDB加密功能,对RDB数据进行自动加密和解密,以满足数据安全性及合规需要。 说明 1、RDB加密开启后,实例将无法进行离线全量key分析、redisshake进行数据同步以及Top key内存展示等操作。 2、RDB加密开启或关闭后,redis将默认自动重新全量dump一份加密或解密的RDB数据到磁盘。 前提条件 已成功开通分布式缓存服务Redis实例,且实例处于运行中状态。 Redis内核版本为5.0或以上。 操作步骤 1. 登录 Redis管理控制台。 2. 在管理控制台左上角选择实例所在的区域。 3. 在实例列表页,单击目标实例名称进入实例详情页面。 4. 左侧菜单点击实例配置>RDB加密,进入RDB加密界面。 5. 在RDB加密界面可选择开启RDB加密开关,选择开通或关闭RDB加密。 目前支持两种RDB加密算法,包含使用AES加密和国密算法SM4
        来自:
        帮助文档
        分布式缓存服务Redis版
        用户指南
        实例配置管理
        RDB加密
      • 恢复方案
        本节关于恢复方案的相关内容。 云数据库RDS提供了多种方式恢复实例的数据,用以满足不同的使用场景,如数据故障或损坏,实例被误删除。 恢复误删除的实例 回收站:退订的包年包月实例和删除的按需实例,支持加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 已删除实例的备份:通过保留的手动备份,可以恢复实例数据,详见全量数据恢复:按备份文件恢复。 恢复误删除或修改的数据 表 恢复方案说明 恢复方案 分类 支持的存储类型 恢复时间点 恢复范围 恢复位置 恢复时长 恢复方案 分类 其他 极速型SSD 备份文件所在时间点 所有库表 部分库表 恢复到新实例 恢复到当前实例 恢复到已有实例(非原实例) 恢复时长 全量恢复 备份文件恢复 √ √ x √ x √ x √ 与实例的数据量有关 全量恢复 时间点恢复 √ √ √ √ x √ x √ 与实例的数据量有关 库表恢复 库表恢复 √ √ √ x √ x √ x 与实例以及库表的数据量有关
        来自:
        帮助文档
        关系数据库PostgreSQL版
        用户指南
        数据恢复
        恢复方案
      • 概述
        本章节介绍通过内网连接Microsoft SQL Server实例的流程。 本章介绍如何在管理控制台创建Microsoft SQL Server实例,并通过内网使用弹性云服务器上连接Microsoft SQLServer实例。 步骤一:创建实例。根据业务需求,确认Microsoft SQL Server实例的规格、存储、网络配置、数据库帐户配置信息等。 步骤二:设置安全组规则。 ECS与RDS实例在相同安全组时,默认ECS与RDS实例互通,无需设置安全组规则,执行步骤三:通过内网连接Microsoft SQL Server实例。 ECS与RDS实例在不同安全组时,需要为RDS和ECS分别设置安全组规则。 设置RDS安全组规则:为RDS所在安全组配置相应的入方向规则。 设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。 步骤三:通过内网连接Microsoft SQL Server实例。
        来自:
        帮助文档
        关系数据库SQL Server版
        快速入门
        通过内网连接Microsoft SQL Server实例
        概述
      • HSS与WAF有什么区别?
        服务名称 所属分类 防护对象 功能差异 企业主机安全(HSS) 基础安全 提升主机整体安全性。 资产管理 漏洞管理 入侵检测 基线检查 网页防篡改 Web应用防火墙(WAF) 应用安全 保护Web应用程序的可用性、安全性。 Web基础防护 CC攻击防护 精准访问防护
        来自:
        帮助文档
        企业主机安全
        常见问题
        咨询类
        HSS与WAF有什么区别?
      • 删除 FILESET
        FILESET 提供子目录配额管理能力,本文介绍删除 FILESET 的操作步骤。 操作步骤 1. 登录天翼云控制中心,单击管理控制台左上角的,选择地域。 2. 选择“存储>并行文件服务 HPFS”,进入并行文件服务的控制台页面。 3. 点击目标文件系统,进入文件系统详情页,点击 FILESET 页签,即可进入 FILESET 页面。 4. 在 FILESET 列表,找到目标 FILESET,单击目标所在行的"操作"列下的"删除"。 5. 在弹出的对话框中再次确认是否删除。 6. 等待一段时间后,在列表页可以看到该 FILESET 已经不存在,即表示删除成功。 注意 禁止直接删除非空 FILESET。先清空 FILESET 下的所有数据,再删除 FILESET 目录。 如果用户在客户端强制使用 rm rf 命令删除非空 FILESET,系统会阻止删除 FILESET 文件夹操作,但由于 rm rf 的递归机制仍可能导致 FILESET 下的数据被先行清空,需谨慎操作。
        来自:
        帮助文档
        并行文件服务 HPFS
        用户指南
        FILESET 管理
        删除 FILESET
      • 使用限制
        本文为您介绍跨域复制功能的使用限制。 说明 本功能目前仅面向白名单用户开放试用,如须试用本功能,请提交工单进行需求评估。 仅华东1可用区1华北2可用区1之间支持跨域复制功能。 仅支持复制到已有文件系统,无法在创建复制时新建文件系统。 仅“可用”状态的文件系统支持创建复制。 仅支持跨资源池的复制,不支持同资源池的复制。 源文件系统和目标文件系统须为同种存储类型,如同为标准型或同为性能型。 源文件系统和目标文件系统须为同种NFS协议。 用作复制目标的文件系统必须“禁用”复制覆盖保护。 建议将目标文件系统的权限组规则设置为“只读”,避免同时写入的数据被复制过来的数据覆盖,造成数据丢失。 一个文件系统下只能有一个复制任务,不支持多个文件系统和单个文件系统之间进行复制。 数据异步复制速度受骨干网带宽限制。
        来自:
        帮助文档
        弹性文件服务 SFS
        用户指南
        高级管理
        跨域复制
        使用限制
      • 重置管理员密码
        本节介绍了GeminiDB Redis的重置管理员密码操作场景及操作方式。 操作场景 GeminiDB Redis支持重置数据库管理员密码,建议您定期修改密码,以提高系统安全性,防止出现密码被破解等安全风险。 使用须知 实例状态为“正常”、“备份中”、“存储扩容中”时,支持重置密码。 方法一 1、登录云数据库GeminiDB控制台。 2、在“实例管理”页面,选择目标实例,单击操作列“更多 > 重置密码”。 3、输入新管理员密码及确认密码,单击“确定”。 所设置的密码长度为8~32位,必须是大写字母、小写字母、数字、特殊字符~!@%^+?的组合。 方法二 1、登录云数据库GeminiDB控制台。 2、在“实例管理”页面,选择目标实例,单击实例名称,进入“基本信息”页面。 3、 在“数据库信息”区域,单击“管理员账户名”处的“重置密码”。 4、输入新管理员密码及确认密码,单击“确定”。 所设置的密码长度为8~32位,必须是大写字母、小写字母、数字、特殊字符~!@%^+?的组合。
        来自:
        帮助文档
        云数据库GeminiDB
        GeminiDB Redis接口
        用户指南
        变更实例
        重置管理员密码
      • pg_profile
        本页介绍天翼云TeleDB数据库元数据pgprofile的内容。 存储系统管理资源限制的配置信息。 名称 类型 定义 profname NameData 配置文件的名称 profsessions float4 允许的并发会话数 profsessioncpu float4 会话的CPU 时间限制 profquerycpu float4 查询的CPU 时间限制 profcontime float4 会话的总持续时间限制 profidletime float4 会话中允许的连续非活动时间 profsessionblks float4 会话中允许读取的数据块数(包括从内存和磁盘读取的块) profqueryblks float4 查询中允许读取的数据块数(包括从内存和磁盘读取的块) profprivatesga float4 会话在共享缓冲区中可以分配的空间 profcompositelimit float4 会话的总资源成本限制 proffailedlogtimes float4 连续失败登录尝试次数后锁定账户的时间 profpasslocktime float4 账户在指定连续失败登录尝试后锁定时间 profpasslifetime float4 密码可用于身份验证的时间 profpassgracetime float4 密码过期后允许警告并允许登录的时间 profpassreusetime float4 密码在重新使用前的时间 profpassreusemax float4 密码在重新使用前必须更改的次数 profcontainer float4 当前未使用 profpassverifyfunc text 密码复杂性验证函数的OID
        来自:
        帮助文档
        分布式融合数据库HTAP
        私有云产品
        开发手册
        数据字典
        元数据表
        pg_profile
      • 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调用示例
      • Helm v2与Helm v3的差异及适配方案
        本文主要介绍Helm v2与Helm v3的差异及适配方案。 随着Helm v2 发布最终版本Helm 2.17.0,Helm v3 现在已是 Helm 开发者社区支持的唯一标准。为便于管理,建议用户尽快将模板切换至Helm v3格式。 当前社区从Helm v2演进到Helm v3,主要有以下变化: 1. 移除tiller Helm v3 使用更加简单和灵活的架构,移除了 tiller,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒。 2. 改进了升级策略,采用三路策略合并补丁 Helm v2 使用双路策略合并补丁。在升级过程中,会对比最近一次发布的chart manifest和本次发布的chart manifest的差异,来决定哪些更改会应用到Kubernetes资源中。如果更改是集群外带的(比如通过kubectl edit),则修改不会被Helm识别和考虑。结果就是资源不会回滚到之前的状态。 Helm v3 使用三路策略来合并补丁,Helm在生成一个补丁时,会考虑之前老的manifest的活动状态。因此,Helm在使用老的chart manifest生成新补丁时会考虑当前活动状态,并将其与之前老的 manifest 进行比对,并再比对新的 manifest 是否有改动,并进行自动补全,以此来生成最终的更新补丁。 详情及示例请见Helm官方文档: 3. 默认存储驱动程序更改为secrets Helm v2 默认情况下使用 ConfigMaps 存储发行信息,而在 Helm v3 中默认使用 Secrets。 4. 发布名称限制在namespace范围内 Helm v2 只使用tiller 的namespace 作为release信息的存储,这样全集群的release名字都不能重复。Helm v3只会在release安装的所在namespace记录对应的信息,这样release名称可在不同命名空间重用。应用和release命名空间一致。 5. 校验方式改变 Helm v3 对模板格式的校验更加严格,如Helm v3 将chart.yaml的apiVersion从v1切换到v2,针对Helm v2的chart.yaml,强要求指定apiVersion为v1。可安装Helm v3客户端后,通过执行helm lint命令校验模板格式是否符合v3规范。 适配方案 :根据Helm官方文档 v3模板,apiVersion字段必填。 6. 废弃crdinstall Helm v3删除了crdinstall hook, 并用chart中的crds目录替换。需要注意的是,crds目录中的资源只有在release安装时会部署,升级时不会更新,删除时不会卸载crds目录中的资源。若crd已存在,则重复安装不会报错。 适配方案 :根据Helm官方文档 当前可使用crds目录或者将crd定义单独放入chart。考虑到目前不支持使用Helm升级或删除CRD,推荐分隔chart,将CRD定义放入chart中,然后将所有使用该CRD的资源放到另一个 chart中进行管理。 7. 未通过helm创建的资源不强制update,releaes默认不强制升级 Helm v3强制升级逻辑变化,不再是升级失败后走删除重建,而是直接走put更新逻辑。因此当前CCE release升级默认使用非强制更新逻辑,无法通过Patch更新的资源将导致release升级失败。若环境存在同名资源且无Helm V3的归属标记app.kubernetes.io/managedby: Helm,则会提示资源冲突。 适配方案 :删除相关资源,并通过Helm创建。 8. Release history数量限制更新 为避免release 历史版本无限增加,当前release升级默认只保留最近10个历史版本。 更多变化和详细说明请参见Helm官方文档 Helm v2与Helm v3的区别: Helm v2如何迁移到Helm v3:
        来自:
        帮助文档
        云容器引擎
        用户指南
        模板管理(helm)
        Helm v2与Helm v3的差异及适配方案
      • C# Redis客户端
        本章介绍使用同一VPC内弹性云主机ECS上的C Redis客户端连接Redis实例的方法。 介绍使用同一VPC内弹性云主机ECS上的C Redis客户端连接Redis实例的方法。更多的客户端的使用方法请参考Redis客户端。 前提条件 已成功申请Redis实例,且状态为“运行中”。 已创建弹性云主机,创建弹性云主机的方法,请参见《弹性云主机用户指南》。 如果弹性云主机为Linux系统,该弹性云主机必须已经安装gcc编译环境。 操作步骤 步骤 1 查看并获取待连接Redis实例的IP地址和端口。 具体步骤请参见查看实例信息。 步骤 2 登录弹性云主机。 弹性云主机操作系统,这里以Window为例。 步骤 3 在弹性云主机安装VS 2017社区版。 步骤 4 启动VS 2017,新建一个工程。 工程名自定义,这里设置为“redisdemo”。 步骤 5 使用VS的nuget管理工具安装C Redis客户端StackExchange.Redis。 按照如下图操作,进入程序包管理器控制台,在nuget控制台输入:InstallPackage StackExchange.Redis Version 2.2.79 。(版本号可以不指定) 进入程序包管理器控制台 步骤 6 编写如下代码,并使用String的set和get测试连接。 using System; using StackExchange.Redis; namespace redisdemo { class Program { // redis config private static ConfigurationOptions connDCS ConfigurationOptions.Parse("10.10.38.233:6379,password,connectTimeout2000"); //the lock for singleton private static readonly object Locker new object(); //singleton private static ConnectionMultiplexer redisConn; //singleton public static ConnectionMultiplexer getRedisConn() { if (redisConn null) { lock (Locker) { if (redisConn null !redisConn.IsConnected) { redisConn ConnectionMultiplexer.Connect(connDCS); } } } return redisConn; } static void Main(string[] args) { redisConn getRedisConn(); var db redisConn.GetDatabase(); //set get string strKey "Hello"; string strValue "DCS for Redis!"; Console.WriteLine( strKey + ", " + db.StringGet(strKey)); Console.ReadLine(); } } } 其中,10.10.38.233:6379分别为Redis实例的IP地址以及端口。IP地址和端口获取见步骤1,请按实际情况修改后执行。 为创建Redis实例时自定义的密码,请按实际情况修改后执行。 步骤 7 运行代码,控制台界面输出如下,表示连接成功。 Hello, DCS for Redis! 关于客户端的其他命令,可以参考StackExchange.Redis。
        来自:
        帮助文档
        分布式缓存服务Redis版
        快速入门
        连接实例
        多语言连接
        C# Redis客户端
      • 大模型安全测评
        配置完成后管理规范 信息复核:配置完成后,在“详情页”核对客户名称、模型 ID、URL、API 配置等信息,确保与目标服务一致。 连通历史跟踪:通过“连通历史”查看测试耗时、状态与错误日志,留存校验记录,便于后续问题追溯。 配置更新机制:当目标服务的 URL、鉴权凭证、模型标识发生变更时,需及时更新测评目标配置,并重新执行连通性测试,确保测评流程持续可用。 关键注意事项 占位符规范:非标接口配置中,[prompt]占位符为测评提示词注入的关键标识,禁止删除或修改;随机数场景统一使用[random]占位符,确保测评场景的随机性与规范性。 安全合规要求:API 密钥、Token 等敏感信息需按平台规范录入,禁止明文泄露或存储在非安全字段中,避免凭证泄露风险。 重试机制:单次连通性测试失败后,需根据错误日志定位根因,修正配置后再发起重试,避免无意义的重复测试占用系统资源。
        来自:
        帮助文档
        智算安全专区
        最佳实践
        大模型安全测评
      • 计费说明
        续费说明 由于特惠包是先付费再使用方式,所以在您特惠包的订单到期或即将到期时,请及时续费。如果不及时续费,可能影响您的使用。 表 不同阶段续费说明 帐户余额充足 帐户余额不足或欠费 ::: APM状态 可正常使用APM 冻结,不再采集并展示欠费后的应用数据,但之前的数据仍可展示、查询。 续费说明 此期间续订特惠包,可正常使用APM。 如果充值,APM自动解除冻结,按需计费。如果您需要特惠包,需要重新购买。否则,APM按需计费。 续费说明 如果不续订特惠包,APM自动将收费方式转为按需计费。 如果不充值,超出保留期后,所有资源被释放,此期间APM不计费。 停止计费 对于以按需计费模式使用的APM 2.0资源,若不再使用且需停止计费,请您删除存储在APM 2.0上的指标数据。
        来自:
        帮助文档
        应用性能管理
        产品介绍
        计费说明
      • 前置条件
        本节主要介绍Glance使用HBlock卷的前置条件。 Glance使用HBlock卷的前置条件如下: HBlock服务已经正确配置,且可以正常启动。 正确安装OpenStack,支持的OpenStack版本详见环境要求。 正确安装OpenStack的接入插件,且功能正常。 说明 在使用Stor Cinder进行镜像创建卷的场景下,它支持采用克隆方式进行底层处理。当镜像文件较大时,利用克隆方式可以快速高效地完成卷的创建任务,大大提升了操作效率和用户体验。使用此方式的前提条件是: Glance配置了HBlock存储。 cinder.conf中配置:alloweddirecturlschemescinder,配置位置在[DEFAULT]标签下,否则不生效。 glanceapi.conf中配置:glanceapi.conf: showimagedirecturl True,配置位置在[DEFAULT]标签下,否则不生效。 对应的image必须是基于下列条件创建的:HBlock的卷,格式为raw,容器为bare。
        来自:
        帮助文档
        存储资源盘活系统
        常用工具
        OpenStack Cinder驱动插件
        Glance使用HBlock卷
        前置条件
      • 查看业务场景实例
        序号 区域 描述 1 菜单栏 运维管理的菜单栏,包括业务场景实例和我的订阅。 业务场景实例:展示当前用户的所有业务场景实例内容。 我的订阅:展示被当前用户设置订阅的业务场景信息列表。“我的订阅”较“业务场景实例”增加了“通知状态”信息。该信息展示了业务场景实例的运行结果是否被成功订阅,例如,发送告警邮件。 2 导航栏 左侧导航栏,包括数据业务场景的存储目录。 用户可以根据实际需要对业务场景进行分目录存放,每级目录旁边的数字代表属于该级目录的业务场景的个数。 3 业务场景实例列表 展示实例名称、运行状态、运行结果等信息。 4 搜索区域 可以选择性的展示业务场景实例,例如运行的开始时间和结束时间处于某一时间区间业务场景。 根据处理人、创建人、实例名称进行筛选展示业务场景实例的列表信息,输入内容支持模糊搜索。
        来自:
        帮助文档
        数据治理中心 DataArts Studio
        用户指南
        数据质量
        业务指标监控
        查看业务场景实例
      • 配置日志级别与文件大小
        修改服务日志级别与日志文件大小 说明 KrbServer,LdapServer以及DBService不支持修改服务日志级别与日志文件大小。 1. 登录FusionInsight Manager。 2. 选择“集群 > 待操作集群的名称 > 服务”。 3. 单击服务列表中的某个服务,切换到“配置”页签。 4. 选择“全部配置”,左边菜单栏中展开角色实例的菜单,单击所需修改的角色所对应的“日志”。 5. 搜索各项参数,获取参数说明,在参数配置页面勾选所需的日志级别或修改日志文件大小。日志文件大小需填写单位“MB”。 须知 系统会根据配置的日志大小自动清理日志,如果需要保存更多的信息请设置一个较大的数值。为确保日志文件的完整性,建议根据实际业务量大小,在日志文件基于规则清理前,手动将日志文件备份存储至其他文件夹中。 个别服务不支持通过界面修改日志级别。 6. 单击“保存”,在“保存配置”单击“确定”。 7. 验证日志级别设置已生效,请下载日志并查看。
        来自:
        帮助文档
        翼MapReduce
        用户指南
        FusionInsight Manager操作指导(适用于3.x)
        日志管理
        配置日志级别与文件大小
      • 设置告警规则
        操作场景 通过设置节点告警规则,用户可自定义监控目标与通知策略,及时了解节点运行状况,从而起到预警作用。 设置节点的告警规则包括设置告警规则名称、监控对象、监控指标、告警阈值、监控周期和是否发送通知等参数。本节介绍了设置告警规则的具体方法。 操作步骤 步骤 1 登录管理控制台。 步骤 1 单击“管理与部署 > 云监控服务”。 步骤 2 选择“告警 > 告警规则”。 步骤 3 单击“创建告警规则”。 步骤 4 在“创建告警规则”界面,根据界面提示配置参数。 1. 根据界面提示,配置规则信息参数。 图 配置规则信息 表 配置规则信息 参数 参数说明 :: 名称 系统会随机产生一个名称,用户也可以进行修改。 取值样例:alarmb6al 描述 告警规则描述(此参数非必填项)。 2. 选择监控对象,配置告警内容参数。 表12 配置告警内容 参数 参数说明 取值样例 ::: 资源类型 配置告警规则监控的服务名称。 弹性云主机 维度 用于指定告警规则对应指标的维度名称 云服务器 监控范围 告警规则适用的资源范围,可选择资源分组或指定资源。 说明 当选择资源分组时,该分组下任何资源满足告警策略时,都会触发告警通知。 选择指定资源时,勾选具体的监控对象,单击 将监控对象同步到右侧对话框。 指定资源 选择分组 当监控范围为资源分组时需配置此参数。 选择类型 根据需要可选择从模板导入或自定义创建。 说明 当监控范围为指定资源时可选择从模板导入。 自定义创建 模板 选择需要导入的模板。 告警策略 触发告警规则的告警策略。 当资源类型选择站点监控、日志监控、自定义监控、具体的云服务时,告警策略为一个周期性的动作。当资源类型选择事件监控时,具体的事件为一个瞬间的操作动作,而不是周期性动作。 例如:CPU使用率,监控周期为5分钟,连续三个周期平均值≥80% 挂载点 当监控指标为细颗粒度的磁盘类监控指标时需配置该参数。 Windows系统请输入对应的驱动器号,比如C、D或者E等,Linux系统请输入对应的挂载点,比如/dev、/opt等。 /dev 告警级别 根据告警的严重程度不同等级,可选择紧急、重要、次要、提示。 重要 3. 根据界面提示,配置告警通知参数。 表 配置告警通知 参数 参数说明 :: 发送通知 配置是否发送邮件、短信、HTTP和HTTPS通知用户。 生效时间 该告警规则仅在生效时间内发送通知消息。 如生效时间为08:0020:00,则该告警规则仅在08:0020:00发送通知消息。 主题通知 需要发送告警通知的主题名称。 当发送通知选择“是”时,需要选择已有的主题名称,若此处没有需要的主题则需先创建主题,该功能会调用消息通知服务(SMN),创建主题请参见《消息通知服务用户指南》。 触发条件 可以选择“出现告警”、“恢复正常”两种状态,作为触发告警通知的条件。 4. 配置完成后,单击“立即创建”,完成告警规则的创建。 告警规则添加完成后,当监控指标触发设定的阈值时,云监控服务会在第一时间通过消息通知服务实时告知您云上资源异常,以免因此造成业务损失。
        来自:
        帮助文档
        云容器引擎
        用户指南
        旧版UI
        云监控服务
        设置告警规则
      • 创建命名空间
        操作场景 命名空间(Namespace)是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务,也能够互不干扰。 例如可以将开发环境、测试环境的业务分别放在不同的命名空间。 前提条件 至少已创建一个集群,请参见购买混合集群。 约束与限制 每个命名空间下,创建的服务数量不能超过6000个。此处的服务对应kubernetes的service资源,即工作负载所添加的服务。 命名空间类别 命名空间按创建类型分为两大类:集群默认创建的、用户创建的。 集群默认创建的:集群在启动时会默认创建default、kubepublic、kubesystem、kubenodelease命名空间。 − default:所有未指定Namespace的对象都会被分配在default命名空间。 − kubepublic:此命名空间下的资源可以被所有人访问(包括未认证用户),用来部署公共插件、容器模板等。 − kubesystem:所有由Kubernetes系统创建的资源都处于这个命名空间。 − kubenodelease:每个节点在该命名空间中都有一个关联的“Lease”对象,该对象由节点定期更新。NodeStatus和NodeLease都被视为来自节点的心跳,在v1.13之前的版本中,节点的心跳只有NodeStatus,NodeLease特性从v1.13开始引入。NodeLease比NodeStatus更轻量级,该特性在集群规模扩展性和性能上有明显提升。 用户创建的:用户可以按照需要创建命名空间,例如开发环境、联调环境和测试环境分别创建对应的命名空间。或者按照不同的业务创建对应的命名空间,例如系统若分为登录和游戏服务,可以分别创建对应命名空间。 创建命名空间 步骤 1 登录CCE控制台,在左侧导航栏中选择“资源管理 > 命名空间”。单击“创建命名空间”。 步骤 2 参照下表设置命名空间参数,其中带“”标志的参数为必填参数。 表命名空间基本信息 参数 参数说明 命名空间 新建命名空间的名称,命名必须唯一。 集群 新建命名空间属于哪个集群。 节点亲和 开启后,当前命名空间下所创建的工作负载只能调度到拥有特定标签的节点上。您可以在节点管理中通过标签管理为节点添加标签。 该参数仅在v1.13.10r0及以上版本的集群中显示。 命名空间描述 输入对命名空间的描述信息。 资源配额设置 资源配额可以限制命名空间下的资源使用,进而支持以命名空间为粒度的资源划分。 须知:建议根据需要在命名空间中设置资源配额,避免因资源过载导致集群或节点异常。 例如:在集群中每个节点可以创建的实例(Pod)数默认为110个,如果您创建的是50节点规格的集群,则最多可以创建5500个实例。因此,您可以在命名空间中自行设置资源配额以确保所有命名空间内的实例总数不超过5500个,以避免资源过载。 可设置配额的资源类型如下: CPU(Core) 内存(MiB) 有状态工作负载(StatefulSet) 无状态工作负载(Deployment) 普通任务(Job) 定时任务(CronJob) 实例(Pod) 服务(Service) 请输入整型数值,"0"表示不限制该资源的使用。 若您需要限制CPU或内存的配额,则创建工作负载时必须指定CPU或内存请求值。 步骤 3 配置完成后,单击“确定”。
        来自:
        帮助文档
        云容器引擎
        用户指南
        旧版UI
        命名空间
        创建命名空间
      • 典型网站类场景
        安装 Apache 和 PHP 组件 yum install y httpd php phpmysql phpgd phpimap phpldap phpodbc php pear phpxml phpxmlrpc 启动 Apache 服务 service httpd start 设置开机默认启动 Apache sudo chkconfig httpd on 执行如下命令,创建 info.php 文件,验证php是否安装成功。 plaintext vim /var/www/html/info.php 执行如下命令,重启 httpd 服务。 plaintext service httpd restart 用可以访问公网的任何节点,访问 执行如下命令,卸载当前版本PHP,安装高版本PHP。 plaintext yum list installed grep php awk ‘{print $1}’ xargs yum remove y rpm Uvh rpm Uvh yum install y php56w.x8664 php56wcli.x8664 php56wcommon.x8664 php56wgd.x8664 php56wimap.x8664 php56wldap.x8664 php56w mysql.x8664 php56wpdo.x8664 php56wodbc.x8664 php56w process.x8664 php56wxml.x8664 php56wxmlrpc.x8664 执行如下命令,重启httpd服务。 plaintext systemctl restart httpd 执行如下命令,下载并解压WordPress软件包。 plaintext mkdir p /opt/WP cd /opt/WP wget tar xzvf latestzhCN.tar.gz 拷贝wordpress 目录到/var/www/html/路径下,执行如下命令。 plaintext cd /var/www/html cp rf /opt/WP/wordpress/ /var/www/html/ 进入控制中心,“数据库”>“关系数据库MySQL版”,创建MySQL数据库实例。 ECS1中安装mysql客户端,用于创建和访问MySQL数据库实例。 plaintext yum install mysql 连接MySQL数据库,创建数据库实例。 plaintext mysql h P u p create database charset utf8 ECS1中修改wordpress访问数据库配置。 plaintext cd /var/www/html/ vim wpconfig.php 修改配置内容参考下面配置: plaintext
        来自:
        帮助文档
        弹性云主机 ECS
        最佳实践
        搭建网站/应用最佳实践
        典型网站类场景
      • 控制台权限管理(1)
        本章主要介绍控制台权限管理 创建用户并授权使用软件开发生产线控制台 如果您需要对您所拥有的软件开发生产线控制台进行精细的权限管理,您可以使用统一身份认证服务(Identity and Access Management,简称IAM),通过IAM,您可以: 根据企业的业务组织,在您的帐号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用软件开发生产线资源。 根据企业用户的职能,设置不同的访问权限,以达到用户之间的权限隔离。 将软件开发生产线资源委托给更专业、高效的其他帐号或者云服务,这些帐号或者云服务可以根据权限进行代运维。 如果帐号已经能满足您的要求,不需要创建独立的IAM用户,您可以跳过本章节,不影响您使用软件开发生产线的其它功能。 本章节为您介绍对用户授权的方法,操作流程如下图所示。 前提条件 给用户组授权之前,请您了解用户组可以添加的软件开发生产线控制台权限,并结合实际需求进行选择,软件开发生产线支持的系统权限,请参见“《软件开发生产线产品介绍》>权限管理”。 示例流程 给用户授予软件开发生产线控制台权限流程 1. 创建用户组并授权 在IAM控制台创建用户组,并授予软件开发生产线控制台只读权限“DevCloud Console ReadOnlyAccess”。 2. 创建用户并加入用户组 在IAM控制台创建用户,并将其加入上面1中创建的用户组。 3. 并验证权限 新创建的用户登录控制台,验证权限: 在“服务列表”中选择软件开发生产线,进入“总览”页面,单击基础版“立即购买”,尝试开通软件开发生产线,如果无法开通软件开发生产线(假设当前权限仅包含DevCloud Console ReadOnlyAccess),表示“DevCloud Console ReadOnlyAccess”已生效。 在“服务列表”中选择除软件开发生产线外(假设当前策略仅包含DevCloud Console ReadOnlyAccess)的任一服务,若提示权限不足,表示“DevCloud Console ReadOnlyAccess”已生效。
        来自:
      • 变量使用实例
        本页介绍天翼云TeleDB数据库存储过程开发的变量使用实例。 变量声明语法 name [ CONSTANT ] type [ COLLATE collationname ] [ NOT NULL ] [ { DEFAULT : } expression ]; 如果给定DEFAULT子句,它会指定进入该块时分配给该变量的初始值。如果没有给出 DEFAULT子句,则该变量被初始化为SQL空值。 CONSTANT选项阻止该变量在初始化之后被赋值,这样它的值在块的持续期内保持不变。 COLLATE选项指定用于该变量的一个排序规则。如果指定了NOT NULL,对该变量赋值为空值会导致一个运行时错误。所有被声明为NOT NULL的变量必须被指定一个非空默认值。等号()可以被用来代替 PL/SQL兼容的:。 定义一个普通变量 teledb CREATE OR REPLACE PROCEDURE ordinaryvar() AS $$ DECLARE 所有变量的声明都要放在这里,建议变量以v开头,参数以a开头 vint integer : 1; vtext text; BEGIN vtext 'teledbpg'; RAISE NOTICE 'vint %',vint; RAISE NOTICE 'vtext %',vtext; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb CALL ordinaryvar(); NOTICE: vint 1 NOTICE: vtext teledbpg CALL teledb 定义CONSTANT 变量 teledb CREATE OR REPLACE PROCEDURE pconstant() AS $$ DECLARE vint CONSTANT integer : 1; BEGIN RAISE NOTICE 'vint %',vint; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb CALL pconstant(); NOTICE: vint 1 CALL
        来自:
        帮助文档
        分布式融合数据库HTAP
        私有云产品
        开发手册
        存储过程开发
        变量使用
        变量使用实例
      • 创建云间高速(标准版)实例
        本文为您介绍创建云间高速(标准版)实例的操作流程。 操作步骤 1. 登录控制中心。 2. 登录云间高速(标准版)管理控制台,并在左侧菜单列表中选择“云间高速(标准版)”。 3. 在控制台首页,单击“创建云间高速(标准版)”。 4. 进入创建云间高速(标准版)弹窗页面,根据页面提示填写对应参数。 参数 说明 取值样例 名称 云间高速实例名称1 云间高速1 企业项目 选择对应的企业项目 default 描述 实例描述内容 5. 单击“确定”,完成实例创建。
        来自:
        帮助文档
        云间高速(标准版)EC
        用户指南
        云间高速(标准版)实例
        创建云间高速(标准版)实例
      • 审计日志
        本页介绍天翼云TeleDB数据库的审计日志相关操作。 注意 审计日志模块只有超级管理员才能进入。 SQL审计 SQL审计日志记录了用户于何时对哪个数据源执行了什么类型的SQL语句,并对该操作给出 high 、 medium 、low三种等级的风险评估。对数据源的记录最精细可以审计到表级别 ,同时也会记录SQL执行的结果、查询耗时、影响行数等信息。若执行失败,会记录对应的报错信息。 SQL审计搜SQL审计支持的搜索项包括执行时间、SQL类型、风险等级、操作用户、实例名称、实例地址、库名/模式名、表名、功能、执行状态。其中操作用户、实例名称、实例地址、库名/模式名、表名等搜索项支持模糊搜索。若用户想清除已经选择的搜索项,可以单击重置按钮。 SQL审计详情除上述基本信息外,单击详情按钮,弹出的详情界面还会展示具体的执行语句。 SQL审计对象SQL审计对象包括来自查询窗口、可视化编辑、元数据管理三个功能模块的SQL语句,审计的SQL语句类型为SELECT、INSERT、CREATETABLE、CREATESELECT、INSERTSELECT、ALTERTABLE、CREATEDATABASE、ALTERDATABASE、CREATESCHEMA、ALTERSCHEMA、REVOKE、GRANT、DROPDATABASE、DROPSCHEMA、DROPTABLE、DELETE、UPDATE、TRUNCATE。 SQL审计导出SQL审计支持导出当前页记录到本地,导出格式可以选择csv或者xlsx两种。用户先按需求选择搜索项,然后单击查询,再单击导出按钮,选择文件格式后,即可将SQL审计日志记录下载到本地。用户可以通过调整分页数下载更多的审计日志记录。
        来自:
      • 审计日志
        本页介绍天翼云TeleDB数据库的审计日志相关操作。 注意 审计日志模块只有超级管理员才能进入。 SQL审计 SQL审计日志记录了用户于何时对哪个数据源执行了什么类型的SQL语句,并对该操作给出 high 、 medium 、low三种等级的风险评估。对数据源的记录最精细可以审计到表级别 ,同时也会记录SQL执行的结果、查询耗时、影响行数等信息。若执行失败,会记录对应的报错信息。 SQL审计搜SQL审计支持的搜索项包括执行时间、SQL类型、风险等级、操作用户、实例名称、实例地址、库名/模式名、表名、功能、执行状态。其中操作用户、实例名称、实例地址、库名/模式名、表名等搜索项支持模糊搜索。若用户想清除已经选择的搜索项,可以单击重置按钮。 SQL审计详情除上述基本信息外,单击详情按钮,弹出的详情界面还会展示具体的执行语句。 SQL审计对象SQL审计对象包括来自查询窗口、可视化编辑、元数据管理三个功能模块的SQL语句,审计的SQL语句类型为SELECT、INSERT、CREATETABLE、CREATESELECT、INSERTSELECT、ALTERTABLE、CREATEDATABASE、ALTERDATABASE、CREATESCHEMA、ALTERSCHEMA、REVOKE、GRANT、DROPDATABASE、DROPSCHEMA、DROPTABLE、DELETE、UPDATE、TRUNCATE。 SQL审计导出SQL审计支持导出当前页记录到本地,导出格式可以选择csv或者xlsx两种。用户先按需求选择搜索项,然后单击查询,再单击导出按钮,选择文件格式后,即可将SQL审计日志记录下载到本地。用户可以通过调整分页数下载更多的审计日志记录。
        来自:
        帮助文档
        分布式融合数据库HTAP
        私有云产品
        管理平台使用手册
        数据管理服务操作指南
        审计日志
      • 管理容器组(Pod)
        操作场景 容器组(Pod)是Kubernetes中最小的可部署单元。一个Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络IP地址、以及一些确定容器该如何运行的选项。Pod容器组代表了Kubernetes中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。 Kubernetes集群中的Pod存在如下两种使用途径: 一个Pod中只运行一个容器。"onecontainerperpod" 是Kubernetes中最常见的使用方式。此时,您可以认为Pod容器组是该容器的 wrapper,Kubernetes通过Pod管理容器,而不是直接管理容器。 一个Pod中运行多个需要互相协作的容器。您可以将多个紧密耦合、共享资源且始终在一起运行的容器编排在同一个Pod中,可能的情况有: − Content management systems, file and data loaders, local cache managers等 − log and checkpoint backup, compression, rotation, snapshotting等 − data change watchers, log tailers, logging and monitoring adapters, event publishers等 − proxies, bridges, adapters等 − controllers, managers, configurators, and updaters 您可以在云容器引擎CCE中方便的管理容器组(Pod),如编辑YAML、监控、删除等操作。 编辑YAML 可通过在线YAML编辑窗对容器组(Pod)的YAML文件进行修改和下载。 步骤 1 登录CCE控制台,在左侧导航栏中选择“工作负载 > 容器组 Pod”。 步骤 2 单击实例列表中后的“编辑YAML”,在弹出的“编辑YAML”窗中可对当前容器组(Pod)的YAML文件进行修改。 步骤 3 单击“修改”,在弹出的提示框中单击“确定”,完成修改。 说明:如果实例由其他工作负载创建,暂不支持在容器组(Pod)中单独修改。 步骤 4 (可选)在“编辑YAML”窗中,单击“下载”,可下载该YAML文件。 实例监控 您可以通过CCE控制台查看工作负载实例的CPU、内存使用情况以及网络上行和下行速率、磁盘的读写速率,以确定需要的资源规格。 步骤 1 登录CCE控制台,在左侧导航栏中选择“工作负载 > 容器组 Pod”。 步骤 2 单击实例列表中后的“监控”,可查看相应实例的CPU使用率、内存使用率以及网络上行和下行速率、磁盘的读写速率。 说明:实例处于非运行状态时,无法查看实例的监控数据。 删除实例 若实例无需再使用,您可以将其删除。实例删除后,将无法恢复,请谨慎操作。 步骤 1 登录CCE控制台,在左侧导航栏中选择“工作负载 > 容器组 Pod”。 步骤 2 单击待删除实例后的“删除”。 请仔细阅读系统提示,删除操作无法恢复,请谨慎操作。 步骤 3 单击“是”,即可删除该实例。 说明: 若Pod所在节点不可用或者关机,负载无法删除时可以在详情页面实例列表选择强制删除。 请确保要删除的存储没有被其他负载使用,导入和存在快照的存储只做解关联操作。 相关链接 []( " ")The Distributed System Toolkit: Patterns for Composite Containers []( " ")Container Design Patterns
        来自:
        帮助文档
        云容器引擎
        用户指南
        旧版UI
        工作负载
        管理容器组(Pod)
      • 更新转发策略属性
        接口功能介绍 更新转发规则 接口约束 仅支持更新策略名称和描述,未见策略名称字段;域名和URL字段不支持修改。 URI POST /v4/elb/updatepolicyattr 路径参数 无 Query参数 无 请求参数 请求头header参数 无 请求体body参数 参数 是否必填 参数类型 说明 示例 下级对象 clientToken 否 String 客户端存根,用于保证订单幂等性, 长度 1 64 79fa97e3c48bxxxx9f466a13d8163678 regionID 是 String 区域ID policyID 是 String 转发规则ID name 否 String 唯一。支持拉丁字母、中文、数字,下划线,连字符,中文 / 英文字母开头,不能以 http: / https: 开头,长度 2 32 acl11 description 否 String 支持拉丁字母、中文、数字, 特殊字符:~~!@ $%^&()+ <>?:{},./;'[]·~~!@ ¥%……&() —— +{}《》?:“”【】、;‘',。、,不能以 http: / https: 开头,长度 0 128 test 响应参数 参数 参数类型 说明 示例 下级对象 statusCode Integer 返回状态码(800为成功,900为失败) 800 message String statusCode为900时的错误信息; statusCode为800时为success, 英文 success description String statusCode为900时的错误信息; statusCode为800时为成功, 中文 成功 errorCode String statusCode为900时为业务细分错误码,三段式:product.module.code; statusCode为800时为SUCCESS SUCCESS error String statusCode为900时为业务细分错误码,三段式:product.module.code; statusCode为800时为SUCCESS
        来自:
        帮助文档
        弹性负载均衡 ELB
        API参考
        API
        2022-09-09
        新版
        转发规则
        更新转发策略属性
      • 重装一台轻量型云主机
        响应参数 参数 参数类型 说明 示例 下级对象 statusCode Integer 返回状态码(800为成功,900为失败) 800 errorCode String 错误码,为product.module.code三段式码 Openapi.PatternCheck.NotValid error String 错误码,为product.module.code三段式码 Openapi.PatternCheck.NotValid message String 失败时的错误描述,一般为英文描述 SUCCESS description String 失败时的错误描述,一般为中文描述 成功 returnObj Object 成功时返回的数据 returnObj 表 returnObj 参数 参数类型 说明 示例 下级对象 jobID String 重装任务ID,您可以调用查询一个异步任务的结果来查询操作是否成功。 注:当免费镜像重装时,返回该参数;当付费镜像重装时,不返回该参数 a8e88ab8888e88888b88c8f88a88e8bf 请求示例 请求头header 无 请求体body 示例1: 使用原镜像进行重装云主机 在华东1资源池以原镜像重装一台云主机 { "regionID": "bb9fdb42056f11eda1610242ac110002", "instanceID": "adc614e0e838d73f0618a6d51d09070a", "password": "rebuildTest01" } 示例2:使用新镜像进行重装云主机 在华东1资源池使用新镜像进行重装云主机 { "regionID": "bb9fdb42056f11eda1610242ac110002", "instanceID": "adc614e0e838d73f0618a6d51d09070a", "password": "rebuildTest01", "imageID": ""9021e932807448caaa184920ae891f82 }
        来自:
        帮助文档
        轻量型云主机
        API参考
        API(公测中)
        重装一台轻量型云主机
      • 1
      • ...
      • 276
      • 277
      • 278
      • 279
      • 280
      • ...
      • 448
      跳转至
      推荐热词
      天翼云运维管理审计系统天翼云云服务平台云服务备份云日志服务应用运维管理云手机云电脑天翼云云hbase数据库电信云大数据saas服务电信云大数据paas服务轻量型云主机天翼云客户服务电话应用编排服务天翼云云安全解决方案云服务总线CSB天翼云服务器配置天翼云联邦学习产品天翼云云安全天翼云企业上云解决方案天翼云产品天翼云视频云存储

      天翼云最新活动

      云聚517 · 好价翼起拼

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

      安全隔离版OpenClaw

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

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

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

      青云志云端助力计划

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

      企业出海解决方案

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

      天翼云信创专区

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

      中小企业服务商合作专区

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

      云上钜惠

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

      产品推荐

      物理机 DPS

      镜像服务 IMS

      轻量型云主机

      弹性高性能计算 E-HPC

      AI Store

      公共算力服务

      Token服务

      科研助手

      智算一体机

      推荐文档

      服务器迁移的功能

      Microsoft SQL Server

      产品规格

      • 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号