用于阻止请求的自定义VCL
您可以使用适用于Magento2的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地址。 该代码片段在任何默认MagentoVCL代码片段(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_时,此目录中的代码片段会自动上传。 有关Magento2文档,请参阅Fastly CDN模块中的自动自定义VCL代码片段部署。修改自定义VCL代码片段
-
登录管理员。
-
单击 存储 > 设置 > 配置 > 高级 > 系统。
-
展开 全页缓存 > Fastly配置 > 自定义VCL代码片段。
-
在 操作 列中,单击要编辑的代码片段旁边的设置图标。
-
重新加载页面后,在 Fastly配置 部分中单击 将VCL上传到Fastly。
-
上载完成后,根据页面顶部的通知刷新缓存。
删除自定义VCL代码片段
-
登录管理员。
-
单击 存储 > 设置 > 配置 > 高级 > 系统。
-
展开 全页缓存 > Fastly配置 > 自定义VCL代码片段。
-
在 操作 列中,单击要删除的代码片段旁边的垃圾桶图标。
-
在下一个模式窗口中,单击 DELETE 并激活新版本。