2012-07-24 2 views
5

우선, 비슷한 질문을 찾으려고했지만 그 질문에 대한 해결책은 필자의 필요에 맞게 사용자 정의 할 수없는 특정 코드 라인이었습니다.nginx는 화이트리스트를 제외하고 모두 index.php를 다시 작성합니다

Codeigniter 설치가 있고 Apache에서 nginx로 마이그레이션하려고합니다. 그러나 Apache에서 .htaccess는 매우 간단합니다. 허용 된 사이트 목록을 사용하고 나머지는 모두 index.php으로 다시 작성합니다.

RewriteEngine on 
RewriteCond $1 !^(index\.php|css|images|core|uploads|js|robots\.txt|favicon\.ico) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

그러나의 nginx에, 나뿐만 아니라 아무 소용이, 위치와 장난 같이 경우와 try_files 지침을 시도했습니다. 나는 아직도 nginx가 서버 설정을 읽는 방법에 익숙하지 않고, 온라인 튜토리얼은 다소 혼란 스럽다.

는 또한의 index.php를 웹 루트에 수 있지만 하위 디렉토리 server에서하지 않습니다. 이 때문에

, 나는 또한 디렉토리로 이동하지 않습니다/서버로 시작해야합니다 심지어 URI 요청을해야하지만 index.php

이 지금까지 내 nginx를 가상 호스트 구성입니다 :

server { 
    listen 80; 
    server_name example.com; 

    root /home/example/public_html; 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 


    location/{ 
     index index.htm index.html index.php; 
    } 

    location ~ \.php$ { 
     fastcgi_pass  unix:/var/run/php-fpm/example.sock; 
     include    fastcgi_params; 
     fastcgi_param  PATH_INFO $fastcgi_script_name; 
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 

    } 

    location ~* ^.*(/|\..*) { 
     try_files $uri $uri/ /server/index.php; 
    } 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

요청을 index.php으로 리디렉션하는 데 도움이되지만 허용 목록은 없습니다. 누구나 각 부분이하는 일에 대한 간략한 설명이있는 실습 예제를 생성 할 수 있다면 고맙겠습니다.

답변

12

나는 변수를 사용하고 location 블록에서 if 블록을 사용합니다.

location/{ 
    if ($uri !~ ^/(index\.php|css|images|core|uploads|js|robots\.txt|favicon\.ico)) { 
     rewrite^/server/index.php last; 
    } 
} 

또한, pathinfo security problems (discussion)에 대한로는 location ~ \.php$ 블록에

try_files $uri =403; 
fastcgi_split_path_info ^(.+.php)(.*)$; 

를 추가하는 것이 좋습니다.

+0

고마워요, 그 속임수를했습니다! 나는 pathinfo 일을 들여다 보아도 재미있을 것 같다. – xiankai

+2

http://wiki.nginx.org/IfIsEvil http://wiki.nginx.org/Pitfalls – VBart

+0

IfIsEvild 문서에 따르면, 다시 작성 ... 마지막으로; 안전하지만 제안은 (물론, 이것은 일종의 wiki입니다) 환영합니다. – complex857

관련 문제