0

varnish 500 エラーページをカスタマイズしましたが、漢字を表示できないことがわかりました。

静的ファイルからエラー ページを配信しようとしましたが、機能しません Varnish からのユーザー フレンドリーなエラー ページ

4

2 に答える 2

0

あなたが指摘している例では、ファイルの内容を sprintf と strcat で操作していますが、これはおそらく UTF-8 ではうまく機能しません (あなたのファイルはヘッダー状態のように UTF-8 ですよね?)。memcpy のようなバイトベースの C 関数で運試しをするか、utf-8 証明文字列のコピー/フォーマット関数を使用することができます (C でこのようなことを扱ったことはありません)。

動作していないことを詳しく説明していただけますか?

于 2012-06-11T20:27:58.740 に答える
0

以下は 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
  }
于 2012-07-03T09:17:45.133 に答える