Apache2 自定义etag生成
如何配置apache或nginx服务器以使用我选择的算法(即不涉及inode、mtime或size)发送Etag头?除了编译新的C模块,还有其他选择吗?在Apache中。ETag计算为多个值的散列。您可以在Apache2 自定义etag生成,apache2,nginx,Apache2,Nginx,如何配置apache或nginx服务器以使用我选择的算法(即不涉及inode、mtime或size)发送Etag头?除了编译新的C模块,还有其他选择吗?在Apache中。ETag计算为多个值的散列。您可以在httpd.conf或.htaccess文件中使用filetag指令定义要在哈希中包含哪些值的条件行为,但正如您所指出的,您的选项仅限于: INode-您的文件在其服务的特定服务器上的i节点号 MTime-从中提供文件的服务器的时间戳(以毫秒为单位) Size-文件的大小(以字节为单位) 全
httpd.conf
或.htaccess
文件中使用filetag
指令定义要在哈希中包含哪些值的条件行为,但正如您所指出的,您的选项仅限于:
-您的文件在其服务的特定服务器上的i节点号INode
-从中提供文件的服务器的时间戳(以毫秒为单位)MTime
-文件的大小(以字节为单位)Size
以上所有内容全部
-上述各项均无无
Etag
头来生成自己的标记。在您的httpd.conf
或.htaccess
文件中,路径可能如下所示:
RewriteCond %{REQUEST_FILENAME} \.png$ # This example looks for .png requests
RewriteRule ^(.*)$ /gentag.php?path=$1 [B] # ...and routes them to a PHP script
PHP脚本可能如下所示:
<?
$path = $_GET['path']; // Grab the filepath from GET params
$cont = file_get_contents($path); // Get file contents to hash
$hash = crc32($cont); // Create your own ETag hash however you like
header("Etag: $hash"); // Send the custom Etag header
echo $cont; // Dump the file contents to output
?>
公共关系中有一些评论可以说明你在寻找什么。它不是您选择的算法,但它是MD5,它非常可靠 您会注意到,它们提供了两个选项
ETag
标题计算中(不要将其用作上次修改的标题,因为它可能在将来)
当您需要为静态文件设置自己的
ETag
时,您是否有一个用例?从集群提供的服务-inode和mtime对于相同的版本不会相同,对于不同的版本大小可能相同nginx有内置的Perl,这似乎是一个很好的工作。在远程资源(如数据库)没有锁定的情况下,它工作得非常好(可靠且快速)。