squid和nginx的error_page上的区别,有需要的朋友可以看看。
nginx的error_page,有两种方法。
方法一、直接error_page 502 503 504 = http://xyfunds.cdn.21vokglb.cn/index.htm;
方法二、error_page 502 503 504 =200 @fetch;然后location ~* @fetch {……}。
网上看到很多自定义error_page的方式,比如error_page 404 /404.php;把变量都传给php去分析处理;也可以在location里用if(){}做rewrite等等。
squid的error_page,可以有error_directory、error_map、deny_info三种方式。其中deny_info仅适用于ERR_ACCESS_DENIED一种情况;目前对于源站故障跳转,采用的是修改error_directory里html的meta;今天由nginx的方式想到采用error_map试试,于是写了如下php页面:
但测试结果,ERR的页面却是一片空白……在squid.conf,default中看到,原来error_map只是返回定义页面的内容,header还是原先的。 于是又想针对squid返回的%U,进行strtr(),然后再进行meta,如下:
很可惜,测试结果是把这串字符直接显示在了页面上。 这两个结果让我很无语。如果说squid不支持php,那为什么它能识别出来上一个是修改header而不是页面内容所以不显示文本;如果说squid支持php,那为什么下一个又无法执行呢?
想对%U进行操作,难道非得到squid/src/errorpage.c里去修改么?C语言的字符串处理没有封装好的函数,真的好麻烦,呵呵。