2011-08-10 2 views
7

내가 선택한 알고리즘을 사용하여 Etag 헤더를 보내려면 apache 또는 nginx 서버를 어떻게 구성해야합니까 (즉, inode, mtime 또는 size는 포함하지 않음)? 새로운 C 모듈을 컴파일하는 대안이 있습니까?맞춤 etag 생성

+0

당신이 자신의'ETag'을 설정해야 할 때 사용 사례가 있습니까 정적 파일? –

+0

클러스터에서 제공 - inode와 mtime은 같은 버전에서 동일하지 않습니다. 다른 버전에서는 크기가 동일 할 수도 있습니다. – OrangeDog

+0

Nginx에는 Perl이 내장되어 있습니다. 원격 리소스 (예 : 데이터베이스)에 대한 잠금 기능이없는 상황에서 매우 안정적이고 빠르게 작동합니다. –

답변

4

아파치에서 ETags are handled as a core feature. ETag는 여러 값의 해시로 계산됩니다. 당신은 해시에 포함 값하는 조건 동작을 정의하기 위해 httpd.conf 또는 .htaccess 파일에 FileETag 지시어를 사용할 수 있지만이 지적했듯이, 옵션은 제한됩니다 :

  • INode - 파일의 i- 노드 (밀리 세컨드 단위) 타임 스탬프 파일이
  • Size에서 제공하는 서버의 - -
  • All 바이트
  • 에서 파일의 크기 - 그것은
  • MTime에서 게재 된 특정 서버의 수 a 위의
  • None의 LL - 위의

아무도 당신이 원하는 경우에 진정한 정의의 ETag 생성, 당신은 확실히 아파치 모듈을 작성하는 것이 가장 좋은 선택이 될 것입니다. 그러나 빠르고 까다로운 수정이 필요한 경우 요청을 PHP 스크립트로 라우팅하고 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 
?> 
관련 문제