## 简介 DCloud为开发者提供了`uni发布平台`,包括网站发布、App发布和统一门户页面。 `前端网页托管`是其中的网页发布环节产品。 `前端网页托管`基于uniCloud的能力,为开发者的html网页提供**更快速、更安全、更省心、更便宜**的网站发布。 - 更快速:不经过web server,页面和资源直接上cdn,就近访问,速度更快。 - 更安全:不存在传统服务器各种操作系统、web server的漏洞,不用天天想着打补丁。不怕DDoS攻击,永远打不垮的服务。 - 更省心:无需再购买虚拟机、安装操作系统、配置web服务器、处理负载均衡、处理大并发、处理DDoS攻击......您什么都不用管,只需上传您写的页面文件 - 更便宜:uniCloud由DCloud联合阿里云和腾讯云推出,享受云厂商政策优惠。 ## 案例 - `HBuilderX`文档网站,是一个基于`markdown`的文档系统,域名:[https://hx.dcloud.net.cn/](https://hx.dcloud.net.cn/) - `uni统计`官网现已部署到uniCloud,一份报表,掌握业务全景,域名:[https://tongji.dcloud.net.cn](https://tongji.dcloud.net.cn) - `hello uni-app`项目现已部署到uniCloud,线上地址:[https://hellouniapp.dcloud.net.cn](https://hellouniapp.dcloud.net.cn) ## 开通 首先开发者需要开通`uniCloud`,登录[https://unicloud.dcloud.net.cn/](https://unicloud.dcloud.net.cn/)。 然后选择或创建一个服务空间。 最后在上述网页左侧导航点击`前端网页托管`,即可开始使用。 `前端网页托管`和云函数没有绑定关系,可以和云函数部署在一个服务空间,也可以是不同的空间,甚至是不同云服务商的空间。 - 阿里云`前端网页托管`提供一个免费版,收费版定价[详见](price.md#aliyun-business) - 腾讯云`前端网页托管`需付费,定价由腾讯云提供。[详见](price.md#tencent-advanced) 注意: - 腾讯云新计费模式下前端网页托管仅支持按量计费模式,原包年包月套餐已下线。现存包年包月`前端网页托管`,如果服务空间升级到新套餐,则`前端网页托管`会自动切换为按量计费模式,请确保余额充足。 ## 使用 开通后,需要把开发者的前端网页,上传到uniCloud的`前端网页托管`中。 目前提供了2种方式操作: 方式1. 通过[uniCloud控制台](https://unicloud.dcloud.net.cn/),在web界面上传。 上传时,可以按文件上传,也可以按文件夹上传。 如果是按文件夹上传,可以选择上传后的目录是否包含上传文件夹的根目录。 ![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/unicloud-web-hosting.jpg) 方式2. 通过HBuilderX工具上传。 > HBuilderX 2.8+起,支持在HBuilderX中直接上传前端网页到uniCloud阿里云版;3.5.1起,支持uniCloud腾讯云版。 在菜单发行中,选择`上传网站到服务器`。 - 对于uni-app项目,可以先编译为h5,然后直接把编译后的h5上传上去。如下图 ![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/unicloud-hx-hosting.jpg) - 对于非uni-app项目,可以自己选择要上传的目录,包含html、js、css、图片等静态前端文件接口。如下图 ![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/unicloud-hx-hosting-h5.jpg) > HBuilderX 2.8.9+,支持前端网页托管管理器管理uniCloud阿里云版,3.5.1起,支持uniCloud腾讯云版。 在菜单视图中,或者在左下角状态栏中,点击`前端网页托管`,可在左侧打开前端网页托管管理器。如下图 在前端网页托管管理器中,可以看到当前用户的服务空间列表,置灰表示该服务空间还没有开通前端网页托管,点击后可根据提示开通。(如上图中置灰的ali1服务空间)。 点击可用的服务空间,在右侧可以看到远端的资源管理器,把本地文件拖进入,即可上传文件。 **注意事项** 1. `前端网页托管`适于uni-app的h5页面发布。尤其是配搭uniCloud云开发,将彻底不用再租用任何传统的服务器。 2. `前端网页托管`适于所有前后端分离的网站中的前端页面发布,包括pc网页。 3. 仅支持html、CSS、JavaScript、字体、图片、音视频、json等文件。不支持php、java、python、ruby、go、c++等其他需要额外语言解释器解释的语言文件。 4. 如果开发者需要做a/b test或灰度新功能,需要自己在js里写代码实现,不能通过路由到不同服务器实现。 5. uni-app项目编译为h5时,在项目的manifest中配置二级目录。上传时无需重复设置二级目录。 6. 一个`前端网页托管`的空间里,可以上传多个网站,用不同目录区分开,访问时使用同一个域名后加不同目录的方式访问。不支持每个目录单独设置不同域名。 7. 部署到不同的服务空间的`前端网页托管`内的网站,也是可以访问同一个服务空间内的云函数的,只需要在部署云函数的服务空间的`跨域配置`内添加部署前端页面的域名即可 8. 腾讯云缓存时间默认为1天,阿里云一般情况下文件变动后会一小段时间内自动刷新缓存 ## 基础配置@base-config 本章节介绍`前端网页托管`提供的各种配置项目说明。其中配置域名、网站首页、404页面,是阿里云和腾讯云均支持的,其他配置仅腾讯云支持。 ### 配置域名@domain `前端网页托管`,自带一个测试域名,仅用于产品体验及测试可快速体验前端网页部署的完整流程,该域名有如下限制: + 阿里云每分钟最多60次请求,默认每日仅允许10个公网IP访问,超出部分,需通过手动方式将来源IP加入白名单,IP白名单也会有数量限制 + 腾讯云限速100K/s 业务如要上线商用,请配置自己的正式域名,配置自己的正式域名后,将不受上述测试域名的限制。(尤其注意阿里云测试域名是公共的,任意一个服务空间如果有上传恶意文件被投诉,会导致测试域名被微信内置浏览器整体禁封) 前端网页托管配置自己域名的步骤如下: 1、登录[uniCloud控制台](https://unicloud.dcloud.net.cn/)。 2、进入前端网页托管页面,选择【基础设置】,单击【添加域名】,进行域名添加,(注意:域名是需要自行购买的)如下图所示: ![](https://img-cdn-aliyun.dcloud.net.cn/uni-app/uniCloud/uniCloud-hosting-domain-add.jpg) 3、添加后,系统会自动分配一个 CNAME 域名,CNAME 域名不能直接访问,您需要在域名服务提供商处完成 CNAME 配置(将添加的域名CNAME到此域名),配置生效后,新域名即可使用。 阿里云现已支持http强制跳转https,在上述添加界面打开对应开关即可 **域名备案** 如果你已经有备案过的域名,直接解析过来即可;如果你要新注册域名,首先自行在网上购买,然后注意域名如果想在国内正常绑定阿里云或腾讯云,需要域名备案。这里的备案流程和传统云主机略有不同,涉及一个uniCloud没有固定ip的问题。此时可以去买花生壳的备案服务;也可以临时买一个短期传统云,走传统备案;还有授权码方案,这里有开发者分享的经验贴:[https://ask.dcloud.net.cn/article/38116](https://ask.dcloud.net.cn/article/38116) **关于证书内容与私钥** 域名如果使用https,则需要证书。证书签发后,可下载到本地,然后将内容复制黏贴到uniCloud web控制台。 注意:各运营商下载证书的后缀可能不同,一般来说,`.key`文件对应私钥,`.pem`或`.crt`文件对应证书。这几种类型文件都是文本内容,可选择记事本打开查看内容。 如果您还没有SSL证书,点此[快速获取](https://market.aliyun.com/agents/yscdcloud#J_2430492660)。 **注意事项** - 在阿里云开启了泛域名加速的情况下,对应的子域名可能无法配置到前端网页托管,**这种情况下可能会提示:该域名已被添加过,不能重复添加** - 暂不支持绑定中文域名 - 阿里云要求必须有一个备案在阿里才可以绑定,按照uniCloud web控制台提示操作即可,腾讯云没有此条限制。 **务必注意,如果你是在腾讯购买并备案的域名需要保留一个到腾讯ip的解析,否则备案会被撤销,阿里云同理。具体细节可以咨询购买域名的云厂商** ### 路由规则@routing **网站首页** 设置网站首页文档名 **404页面** 访问静态网站出错后返回的页面。 如需在阿里云正式版支持history模式,请将404页面配置为网站首页。注意正式版404页面不支持目录,即阿里云仅能在根目录下支持history模式 **重定向规则** > 仅腾讯云支持 支持以下三种组合配置 - 类型:错误码、规则:替换路径。将特定错误码的请求重定向到目标文档,仅支持对4xx错误码。 例:将404错误码重定向至index.html,需做如下配置(uni-app项目使用history模式发行到h5时可以使用此配置): |类型 |描述 |规则 |替换内容 | |:-: |:-: |:-: |:-: | |错误码 |404 |替换路径 |index.html | - 类型:前缀匹配、规则:替换路径。将匹配到特定前缀的请求重定向到目标文档 例:当您删除了images/文件夹(即删除了具有前缀images/的所有对象)。您可以添加重定向规则,将具有前缀images/的任何对象的请求重定向至test.html页面。 |类型 |描述 |规则 |替换内容 | |:-: |:-: |:-: |:-: | |前缀匹配 |images/|替换路径 |test.html| - 类型:前缀匹配、规则:替换前缀。将匹配到特定前缀的请求中的前缀替换为替换内容,例: 例:当您将文件夹从docs/重命名为documents/后,用户在访问docs/文件夹会产生错误。所以,您可以将前缀docs/的请求重定向至documents/。 |类型 |描述 |规则 |替换内容 | |:-: |:-: |:-: |:-: | |前缀匹配 |docs/|替换前缀 |documents/ | **注意** - 阿里云每天仅能修改3次路由规则 ### 缓存配置@cache > 仅腾讯云、支付宝小程序云支持 - 文件类型:根据填入的文件后缀进行缓存过期时间设置,格式为.jpg形式,不同后缀之间用;间隔。 - 文件夹:根据填入的目录路径进行缓存过期时间设置,格式为/test形式,无需以/结尾,不同目录之间用;间隔。 - 全路径文件:指定完整的文件路径进行缓存过期时间设置,格式为/index.html,支持完整路径加文件类型匹配模式,如/test/*.jpg。 **注意** - 缓存过期规则最多可配置10条。 - 多条缓存过期规则之间的优先级为底部优先。 - 缓存过期时间最多可设置365天。 ### 刷新缓存@refresh-cache > 仅腾讯云、阿里云商用版支持 腾讯云需要填写要刷新的链接,针对填写的链接进行刷新。阿里云对默认域名和自定义域名一键刷新。 **注意** - 阿里云商用版限制每小时只允许刷新3次 ### 防盗链配置@referer > 仅腾讯云、支付宝小程序云支持 **referer 黑名单:** - 若请求的 referer 字段匹配黑名单内设置的内容,CDN 节点拒绝返回该请求信息,直接返回403状态码。 - 若请求的 referer 不匹配黑名单内设置的内容,则 CDN 节点正常返回请求信息。 - 当勾选包含空 referer 选项时,此时若请求 referer 字段为空或无 referer 字段(如浏览器请求),则 CDN 节点拒绝返回该请求信息,返回403状态码。 **referer白名单:** - 若请求的 referer 字段匹配白名单设置的内容,则 CDN 节点正常返回请求信息。 - 若请求的 referer 字段不匹配白名单设置的内容,则 CDN 节点拒绝返回该请求信息,会直接返回状态码403。 - 当设置白名单时,CDN 节点只能返回符合该白名单内字符串内容的请求。 - 当勾选包含空 referer 选项时,此时若请求 referer 字段为空或无 referer 字段(如浏览器请求),则 CDN 正常返回请求信息。 **配置规则:** 防盗链支持域名 / IP 规则,匹配方式为前缀匹配(仅支持路径情况下,域名的前缀匹配不支持),即假设配置名单为www.abc.com,则www.abc.com/123匹配,www.abc.com.cn不匹配;假设配置名单为127.0.0.1,则127.0.0.1/123也会匹配。 防盗链支持通配符匹配,即假设名单为*.qq.com,则www.qq.com、a.qq.com均会匹配。 ### IP黑白名单配置@ip-filter > 仅腾讯云、支付宝小程序云支持 **IP 黑名单** 用户端 IP 匹配黑名单中的 IP 或 IP 段时 ,访问 CDN 节点时将直接返回403状态码。 **IP 白名单** 用户端 IP 未匹配白名单中的 IP 或 IP 段时 ,访问 CDN 节点时将直接返回403状态码。 **名单规则** - IP 黑名单与 IP 白名单二选一,不可同时配置。 - IP 段仅支持 /8、/16、/24 网段,不支持其他网段。 - 不支持IP:端口形式的黑白名单 - 名单最多可输入50个。 ### 默认域名IP白名单@default-domain-ip-whitelist > 仅阿里云支持 为保障默认域名不被滥用,阿里云对默认域名做出了如下限制:每天前10个IP可以直接访问,超出10个IP后需要配置IP白名单才可以访问 仅支持配置ipv4,可以配置IP或者IP网段,掩码位数取值范围24-31。最多可同时配置三个,多个之间用逗号隔开,如:123.120.5.235/24,123.123.123.123 当访问IP超限或不在白名单时,前端网页托管将拒绝访问请求,并在页面输出错误码为`ClientIpNotAllowed`的提示:Your clientIp xxx does not in the whitelist. 您可以通过[配置域名](hosting.md#domain)来解除默认域名的访问限制。 ### IP访问限频配置@ip-freq > 仅腾讯云支持 **配置说明** - 配置开启后,超出 QPS 限制的请求会直接返回514,设置较低频次限制可能会影响您的正常高频用户的使用,请根据业务情况、使用场景合理设置阈值。 - 限频仅针对与单 IP 单节点访问次数进行约束,若恶意用户海量 IP 针对性的进行全网节点攻击,则通过此功能无法进行有效控制。 ## 跨域 web浏览器有跨域限制,A域名的网站如果通过js请求另一个域名B,且另一个B域名并没有放开跨域策略,那么浏览器就会报跨域错误。 在前端网页托管里,托管前端网页的网站就是A域名。要连接的服务器接口就是B域名。 1. B域名是uniCloud的云函数/云对象 也就是业务后台也在uniCloud的云函数或云对象上。此时需要在uniCloud的[web控制台](https://unicloud.dcloud.net.cn/)的`跨域配置`中,把A域名填写在Web安全域名中。 2. B域名是开发者自己的传统服务器 需要在开发者自己的传统服务器上配置跨域,允许A域名跨域访问自己。 ## 缓存问题@cache 如果在更新页面后浏览器访问到的仍是旧页面,可以通过如下流程排查 1. 客户端禁用缓存或无痕模式打开是否正常,如果是就是客户端缓存问题,需要等浏览器缓存失效 2. 排除了第一步的影响后,访问页面路径后加参数 比如 /admin#/pages/index/index 改为 /admin?v=1#/pages/index/index,如果正常则是cdn缓存问题,在uniCloud前端网页托管**配置页面**刷新缓存即可 ## 最佳实践 ### 部署uni-app项目@host-uni-app uni-app项目根据路由模式不同需要做不同的配置 - 使用hash模式时,无需特别的配置即可正常使用 - 使用history模式时可以配置如下规则 + 腾讯云配置重定向规则将404错误码重定向至`index.html` + 阿里云请配置404页面为`index.html` 手动部署uni-app项目时需要注意将文件部署在配置的h5基础路径下。**HBuilderX一键部署时会自动按照manifest.json内配置的基础路径进行部署** ### 部署多个项目@host-multi-project 如果部署多个项目到一个服务空间可以使用不同的基础路径来区分,需要注意的是这多个项目中只有一个项目可以使用history模式。 以一个admin项目和一个用户端项目为例,可以将用户端项目部署在前端网页托管的根目录下,admin项目部署在`/admin`目录下。通过`https://xxx.com/`访问用户端项目,通过`https://xxx.com/admin/`来访问admin项目 **注意** - 部署到子目录内的uni-app项目发行前需要将项目下manifest.json内`h5配置-->运行的基础路径`配置为子目录名,例`/admin/` ## 阿里云使用限制 - 前端网页部署限制为最大存储空间用量2GB - 单文件最大限制为50MB ## 阿里云CDN安全策略 阿里云前端网页托管在绑定自定义域名后,支持配置CDN安全策略:[https://uniapp.dcloud.net.cn/uniCloud/cdn-security-policy.html](storage/cdn-security-policy.md)