我正在寻找一种方法来配置 Varnish 以处理 Varnish 中的 HTTP 请求。
更具体地说,对于特定路径(例如在 */foo/** 下),我希望 Varnish 以 200 HTTP 状态代码和空(或固定消息)正文进行响应,而不是将请求转发到后端服务器。
我同意迈克尔为此目的对滥用/使用 vcl_error 的简短回应,并希望向您展示我们在下面的示例代码中的含义。
为了滥用 vcl_error,我在这里使用了 HTTP 标准之外的错误代码,并对此类错误实施了特殊处理。
VCL_RECV 中的示例:
sub vcl_recv {
...
# respond HTTP 200 to /ping requests
if (req.url ~ "^/ping") {
error 700;
}
# return a 301 redirect
if (req.url ~ "^/wrong-target") {
error 751 "http://www.example.com/correct-target";
}
}
Run Code Online (Sandbox Code Playgroud)
VCL_ERROR 中的示例:
sub vcl_error {
# send response "Pong" (HTTP 200)
if (obj.status == 700) {
set obj.status = 200;
set obj.response = "OK";
set obj.http.Content-Type = "text/plain";
synthetic {"Pong"};
return (deliver);
}
# send empty response (HTTP 204)
if (obj.status == 701) {
set obj.status = 204;
set obj.response = "No Content";
synthetic {""};
return (deliver);
}
# redirect 301
if (obj.status == 751) {
set obj.http.Location = obj.response;
set obj.status = 301;
set obj.response = "Moved Permanently";
return (deliver);
}
# redirect 302
if (obj.status == 752) {
set obj.http.Location = obj.response;
set obj.status = 302;
set obj.response = "Found";
return (deliver);
}
# Fall through to default behavior for all other exceptions
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2925 次 |
| 最近记录: |