[仅限PaaS]{class="badge informative" title="仅适用于云项目(Adobe管理的PaaS基础架构)和内部部署项目上的Adobe Commerce 。"}
用于阻止请求的自定义VCL
您可以使用适用于Magento 2的Fastly CDN模块创建一个包含要阻止的IP地址列表的Edge ACL。 然后,您可以将该列表与VCL代码段一起使用来阻止传入的请求。 该代码检查传入请求的IP地址。 如果与ACL列表中包含的IP地址匹配,Fastly将阻止请求访问您的站点并返回403 Forbidden error。 允许访问所有其他客户端IP地址。
先决条件:
- 
                  
您的环境必须配置为使用Fastly CDN。 请参阅配置Fastly服务。
 - 
                  
确保您运行的是Magento2的最新版Fastly CDN模块。 请参阅升级Fastly模块。
 - 
                  
验证Fastly服务的环境配置。 请参阅检查Fastly缓存。
 - 
                  
您必须拥有管理员凭据才能访问暂存环境和生产环境。
 - 
                  
要阻止的客户端IP地址列表
 
创建Edge ACL以阻止客户端IP地址
您可以创建一个Edge ACL来定义要阻止的IP地址列表。 创建ACL后,您可以在自定义VCL代码片段中使用它来管理对暂存或生产站点的访问。
通过在两个环境中创建同名的Edge ACL来管理暂存和生产站点的访问权限。 VCL代码片段代码适用于这两个环境。
- 登录到管理员。
 - 导航到 商店 >设置> 配置 > 高级 > 系统 > 全页缓存 > 快速配置。
 - 展开 Edge ACL 部分。
 - 单击 添加ACL 以创建列表。 列入阻止列表在此示例中,将列表命名为“”。
 - 在列表中输入IP地址值。 添加到此列表的任何客户端IP地址都将被阻止,并且无法访问该站点。
 - 如果需要,可选中 否定 复选框。
 
在VCL代码片段中按名称引用Edge ACL。
列入阻止列表为创建自定义VCL
定义Edge ACL后,可以使用它创建VCL代码片段,以阻止对ACL中指定的IP地址的访问。 您可以在暂存环境和生产环境中使用相同的VCL代码片段,但必须分别将该代码片段上传到每个环境。
列入阻止列表以下自定义VCL代码片段(JSON格式)显示了使用与ACL中的地址匹配的客户端IP地址阻止传入请求的逻辑。
{
  "name": "blocklist",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( client.ip ~ blocklist) { error 403 \"Forbidden\"; }"
}
            在基于此示例创建代码片段之前,请查看值以确定是否需要进行任何更改:
- 
                  
name: VCL代码片段的名称。 在此示例中,我们使用了名称blocklist。 - 
                  
priority:确定VCL代码片段的运行时间。 优先级为5以立即运行并检查管理员请求是否来自允许的IP地址。 该代码片段在任何默认Magento VCL代码片段(magentomodule_*)的优先级为50之前运行。 根据您希望代码片段运行的时间,将每个自定义代码片段的优先级设置为高于或低于50。 优先级较低的代码片段首先运行。 - 
                  
type:指定VCL代码片段的类型,以确定代码片段在生成的VCL代码中的位置。 在本例中,我们使用recv,它将VCL代码插入vcl_recv子例程中、样板VCL的下方和任何对象的上方。 有关代码片段类型的列表,请参阅Fastly VCL代码片段引用。 - 
                  
content:要运行的VCL代码片段,用于检查客户端IP地址。 如果IP位于Edge ACL中,则会阻止其访问,并显示整个网站的403 Forbidden错误。 允许访问所有其他客户端IP地址。 
查看并更新环境的代码后,使用以下任一方法将自定义VCL代码段添加到Fastly服务配置中:
- 
                  
从Admin添加自定义VCL代码片段。 如果您可以访问管理员,则建议使用此方法。 (需要Fastly版本1.2.58或更高版本。)
 - 
                  
将JSON代码示例保存到文件(例如,
blocklist.json)中,然后使用Fastly API上载它。 如果您无法访问管理员,请使用此方法。 
添加自定义VCL代码片段
- 
                  
登录管理员。
 - 
                  
单击 存储 >设置> 配置 > 高级 > 系统。
 - 
                  
展开 全页缓存 > Fastly配置 > 自定义VCL代码片段。
 - 
                  
单击 创建自定义代码片段。
 - 
                  
添加VCL代码片段值:
- 
                      
名称 —
blocklist - 
                      
类型 —
recv - 
                      
优先级 —
5 - 
                      
添加 VCL 代码片段内容:
code language-conf if ( client.ip ~ blocklist) { error 403 "Forbidden"; } 
 - 
                      
 - 
                  
单击 创建 以生成名称模式为
type_priority_name.vcl的VCL代码片段文件,例如recv_5_blocklist.vcl - 
                  
重新加载页面后,单击 Fastly配置 部分中的 将VCL上传到Fastly 以将文件添加到Fastly服务配置。
 - 
                  
上传后,根据页面顶部的通知刷新缓存。
 
Fastly在上传过程中验证VCL代码的更新版本。 如果验证失败,请编辑自定义VCL代码片段以解决该问题。 然后,再次上传VCL。
阻塞请求的其他VCL示例
以下示例显示如何使用内联条件语句而不是ACL列表来阻止请求。
- 名称: 
<name of the VCL> - 动态: 
<0/1> - 类型: 
<type> - 优先级:
<priority> - 内容: 
<content> 
请参阅Fastly VCL文档中的使用动态VCL代码片段。
VCL代码示例:按国家/地区代码分块
此示例使用双字符ISO 3166-1国家/地区代码来表示与IP地址关联的国家/地区。
{
  "name": "blockbycountrycode",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( client.geo.country_code == \"HK\" ) { error 405 \"Not allowed\";}"
}
            VCL代码示例: Block by HTTP User-Agent请求标头
{
  "name": "blockbyuseragent",
  "dynamic": "0",
  "type": "recv",
  "priority": "5",
  "content": "if ( req.http.User-Agent ~ \"(UCBrowser|MQQBrowser|LieBaoFast|Mb2345Browser)\" ) {error 405 \"Not allowed\";}"
}
            $MAGENTO_CLOUD_APP_DIR/var/vcl_snippets_custom目录添加代码片段,而不是手动上传自定义VCL代码片段。 当您在Commerce Admin中单击_将VCL上传到Fastly_时,此目录中的代码片段会自动上传。 请参阅Magento 2的Fastly CDN模块文档中的自动自定义VCL代码片段部署。修改自定义VCL代码片段
- 
                  
登录管理员。
 - 
                  
单击 存储 > 设置 > 配置 > 高级 > 系统。
 - 
                  
展开 全页缓存 > Fastly配置 > 自定义VCL代码片段。
                     - 
                  
在 操作 列中,单击要编辑的代码片段旁边的设置图标。
 - 
                  
重新加载页面后,在 Fastly配置 部分中单击 将VCL上传到Fastly。
 - 
                  
上载完成后,根据页面顶部的通知刷新缓存。
 
删除自定义VCL代码片段
- 
                  
登录管理员。
 - 
                  
单击 存储 > 设置 > 配置 > 高级 > 系统。
 - 
                  
展开 全页缓存 > Fastly配置 > 自定义VCL代码片段。
                     - 
                  
在 操作 列中,单击要删除的代码片段旁边的垃圾桶图标。
 - 
                  
在下一个模式窗口中,单击 DELETE 并激活新版本。