2013-08-08 43 views
2

ID 파티셔닝과 하위 도메인이있는 페이지 캐시가 있습니다. ny.site.com/cat/12345 또는 la.site.com/dog/234 같은 요청, nginx를가먼저 try_files로 nginx를 설정하는 방법 (request_uri가없는 경우)

  1. 검사에 필요하다고 파일 /cat/ny/1234/5.html이있는 경우, 다만 애플리케이션 서버를 공격하기 위해 원래 request_uri를 사용, 그렇지 않으면 그것을
  2. 를 반환하고, 캐시 파일은
  3. 을 생성됩니다

우리는 하위 도메인 및 ID 파티션 부분을 파악할 수 있었지만 try_files 부분에는 아무런 운이 없었습니다. 항상 rewrite or internal redirection cycle while internally redirecting to

우리 nginx.conf 파일과 같은 무한 루프 오류를 얻을 수는

rewrite "/cat/([0-9]{4})([0-9]{1,4})" /system/cache/cat/$subdomain/$1/$2.html break; 
rewrite "/cat/([0-9]{1,4})" /system/cache/cat/$subdomain/$1.html break; 
try_files $uri $request_uri; 

어떤 힌트가 같다? 감사!

업데이트 : 나는 다음을 시도했다. Nginx는 앱 서버를 공격하는 대신 파일 시스템에서 $ request_uri (예 :/cat/12345)를 찾고있었습니다. 이견있는 사람?

try_files $uri @old; 
location @old { 
    rewrite^$request_uri break; 
} 

답변

5

~ ^이

location ^~ ^/cat/([0-9]{4})([0-9]{1,4}) { 

    try_files "/cat/ny/$1/$2.html" @app_server; 

} 
location @app_server{ 

    # pass this to your app server for processing. 

} 
  1. 사용하여 시도 작성합니다 어떻게/cat/12345/(끝 슬래시)와 같은 가장자리의 경우.
  2. $ uri (쿼리 문자열없이) 또는 $ request_uri (쿼리 문자열 포함)이 필요한지 확인하십시오.
+0

과 같이 3 번째 매개 변수로 전달해야합니다. 감사합니다. –

+0

@ surajs21 : 나는'www.test.com/public /'과'www.test.com/public/web'과'www.test.com/public/web1'과 같은 URL을 가지고있다. 이것은 ZF2입니다. 나는 'public /'이라는 첫 번째 URL에 대한 링크를 제대로 얻었지만'www.test.com/public/web'과'www.test.com/public/web1'에 문제가있는 것처럼 보이는 문제에 직면 해 있습니다. ngin x 그것을 매핑 할 수 없습니다. 제발 나를 도울 http://stackoverflow.com/questions/21377321/nginx-no-input-file-specified-php-fast-cgi –

0

나는 전에 내 자신을 해본 적이 있지만 내가이 또한 포함됩니다대로

location/{ # or whatever location you see fit to your requirements 
    try_files $uri.html $uri; 
    # I don't know if the `.` needs to be escaped `$uri\.html`, you can try both 
} 
+0

입력 해 주셔서 감사합니다. 그러나받지 못했습니다. 이 try_files가 문제를 어떻게 해결할 것입니까? 즉, $ uri가 디스크에 없으면 원래 $ request_uri로 돌아갑니다. –

+0

'try_files'는 nginx에게 그 요청을 시도 할 것을 알려주므로 간단히'$ uri'에 html 파일이 있는지를 알려주고 그렇지 않으면'$ uri'를 시도합니다. PHP 파일을 처리하는 경우 요청은 다음 예 :'/ index.php $ request_uri' 예 : –