2011-10-14 3 views
1

웹 서버에서 장기간 (며칠/주)에 404를 캐시 할 수있는 솔루션을 찾고 있습니다. 현재 나의 설정은 memcached_pass 프록시와 PHP-FPM을 사용하여 캐시되지 않은 페이지를 전달하는 NGINX이다 (PHP는 memcached에 내용을 쓴다). 웹의 모든 크롤러가 내 페이지를 좋아하고 하루에 수천 개의 404 요청을 생성하는 것으로 보입니다. 모두 나는 memcached에있는 내용과 함께 404 응답 헤더 정보를 캐시 할 수 없으므로 PHP를 직접 친다. 따라서 memcached_pass 검색은 항상 실패한다.캐싱 404s - NGINX 또는 Varnished?

404를 반환하는 요청을 모두 캐시하려면 어떻게해야합니까? Nginx 용 HTTPProxModule은 내가 찾고있는 것입니까? 아니면 광택제 대신 사용해야합니까?

내 현재 시점에서 나는 전체를 설정하고 nginx에서 memcached_pass 지시문을 삭제하려고하지 않습니다. php가 memcached에 요청을 할 수 있는지 결정해야하기 때문에 지금까지 꽤 깔끔했습니다. 필요한 경우 캐시를 플러시하는 것도 매우 쉽습니다.

나의 현재의 nginx 설정 파일 :

server { 
    listen  80; 
      server_name _; 


      gzip on; 
      gzip_http_version 1.0; 
      gzip_vary on; 
      gzip_comp_level 6; 
      gzip_proxied any; 
      gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

    location/{ 
        gzip on; 
     default_type "text/html; charset=utf-8"; 
        charset   utf-8; 
        add_header Content-Encoding gzip; 

     if ($request_method = GET) 
     { 
       expires  max; 
       set $memcached_key $http_host$request_uri; 
       memcached_pass  127.0.0.1:11211; 
       error_page   404 = @fallback; 
       #error_page 502 = @fallback; 
       break; 
     } 

     root /var/www/html/; 
     index index.php index.html; 

     if (!-e $request_filename) { 
      rewrite ^/(.*)$ /index.php?q=$1 last; 
      break; 
     } 

    } 



    location @fallback { 
        internal; 
     root /var/www/html/; 
     index index.php index.html; 

     if (!-e $request_filename) { 
      rewrite ^/(.*)$ /index.php?q=$1 last; 
      break; 
     } 


    } 

    location ~ \.php$ { 
     root /var/www/html/; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; 
       include /etc/nginx/fastcgi_params; 
    } 


} 

예를 구성하거나 Nginx에 나 니스를위한 좋은 것입니다.

감사합니다. :)

답변