我自定义了 varnish 500 错误页面,但我发现它无法显示中文字符,
我尝试从静态文件传递错误页面,但它不起作用 Varnish 的用户友好错误页面
您指向的示例使用 sprintf 和 strcat 操作文件内容,这在 UTF-8 上可能效果不佳(您的文件像标题状态一样采用 UTF-8 格式,对吧?)。您可以使用 memcpy 之类的基于字节的 C 函数来测试您的运气,或者使用 utf-8 证明字符串复制/格式化函数(从未在 C 中处理过这些东西)。
你能更详细地描述它没有工作吗?
以下是 varnish.vcf 中相关的完整部分
C{
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
}C
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
set obj.http.Retry-After = "5";
if ((obj.status == 500 || obj.status == 503)&&client.ip !~ flnet){
C{
FILE *infile;
char *buffer;
char fname [50];
long numbytes;
sprintf(fname, "/var/www/html/%d.html", VRT_r_obj_status(sp));
infile = fopen(fname, "r");
if(infile == NULL)
return 1;
fseek(infile, 0L, SEEK_END);
numbytes = ftell(infile);
fseek(infile, 0L, SEEK_SET);
buffer = (char*)calloc(numbytes, sizeof(char));
fread(buffer, sizeof(char), numbytes, infile);
fclose(infile);
VRT_synth_page(sp, 0, buffer, "<!-- XID: ", VRT_r_req_xid(sp), " -->", vrt_magic_string_end);
free(buffer);
return 0;
}C
}