2012-02-06 4 views
5

nginx 1.0.8이 설치되어 있습니다. 여기 내 문제 : 나는 2 개의 파일이 있습니다 : file1.jsfile2.js. 요청 헤더 경우nginx - 요청한 헤더에 기반한 응답

www.mysite.com/files_dir/%user%/file.js

: "X-헤더"가 존재하고이 요청 된 경로는 다음과 같이이다 값이 "OK"이면 응답 한 내용은 file1.js else file2.js 여야합니다.

파일은 "html/files_dir"에 있으며 % user %는 내 서비스를 통해 등록 된 사용자 이름을 나타내는 일련의 디렉토리입니다.

어떻게 이것을 nginx에서 구성합니까? 나는 php, asp 또는 nginx로 가능한 경우에만 유사한 기술에 관심이 아니에요.

감사합니다.

답변

9

map은 다른 변수에 따라 변수의 값을 정의 할 수 있습니다. maphttp 레벨에서 선언되어야한다 (즉, server의 외부) : 다음

map $http_x_header $file_suffix { 
    default "2"; 
    OK  "1"; 
}; 

당신의 새로운 변수 $file_suffix

location ~ ^(/files_dir/.+)\.js$ { 
    root html; 
    try_files $1$file_suffix.js =404; 
} 
1

매우 쉽게 nginx를 사용하여이를 수행 할 수 있습니다. 이 예는 다음과 같습니다

location /files_dir/ { 

    set $file = file2.js; 
    if ($http_x_header = OK) { 
     set $file = file1.js; 
    } 
    rewrite ^(/files_dir/.*)/file.js$ $1/$file last; 

} 

당신은 Nginx에 here에서 HTTP 변수에 대해 읽을 수 있고, nginx를 재 작성 모듈에 대해 here

+0

감사를 사용하여 트릭을 할해야 location 다음 당신이있어 대답도 잘하지만 설정 $ file = file2.js; "="없이 ... $ file2 .js 만 설정하면됩니다. –

+2

ifs를 사용할 때 http://wiki.nginx.org/IfIsEvil을 읽는 것이 좋습니다. – MyGGaN

관련 문제