Nginx 1.2.2 : try_files를 작동시키는 방법?


11

최근에 nginx를 버전 1.2.2로 업데이트했는데 다음 항목이 손상된 것 같습니다. 아마도 버전 간 구문이 변경 되었습니까?

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri /index.html;
        }

http://www.mysite.com/a-non-existent-url에 브라우저를 설치 하면 "500 Internal Server Error"오류 페이지로 리디렉션됩니다. 다음과 같은 로그 항목이 작성됩니다.

2012/08/13 09:20:29 [error] 18457#0: *60 rewrite or internal redirection cycle 
while internally redirecting to "/index.html", client: 10.0.14.1, server: 
mysite.com, request: "GET /a-non-existent-url HTTP/1.1", host: "www.mysite.com"

이것은 예상대로 작동했지만이 버전의 올바른 구문을 찾을 수 없습니다. 지금은 어떻습니까?

요청으로 전체 구성 업데이트 ;

server {

    root /usr/share/nginx/mysite.com/public_html;
    index index.php index.html index.htm;
    server_name mysite.com www.mysite.com;
    access_log  /usr/share/nginx/mysite.com/logs/access_log;
    error_log   /usr/share/nginx/mysite.com/logs/error_log;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
    }

    #Added for awstats
    location ^~ /awstats-icon {
            alias /usr/share/awstats/icon/;
            access_log off;
    }

    #Added for awstats
    location ^~ /awstatscss {
            alias /usr/share/doc/awstats/examples/css/;
            access_log off;
    }

    #Added for awstats
    location ^~ /awstatsclasses {
            alias /usr/share/doc/awstats/examples/classes/;                                 
            access_log off;
    }

    #Added for awstats
    # Configure /cgi-bin/scripts to go through php-fastcgi
    location ~ ^/cgi-bin/.*\.(cgi|pl|py|rb) {
            gzip off;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index cgi-bin.php;
            fastcgi_param SCRIPT_FILENAME    /etc/nginx/cgi-bin.php;
            fastcgi_param SCRIPT_NAME        /cgi-bin/cgi-bin.php;
            fastcgi_param X_SCRIPT_FILENAME  /usr/lib$fastcgi_script_name;
            fastcgi_param X_SCRIPT_NAME      $fastcgi_script_name;
            fastcgi_param QUERY_STRING       $query_string;
            fastcgi_param REQUEST_METHOD     $request_method;
            fastcgi_param CONTENT_TYPE       $content_type;
            fastcgi_param CONTENT_LENGTH     $content_length;
            fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
            fastcgi_param SERVER_SOFTWARE    nginx;
            fastcgi_param REQUEST_URI        $request_uri;
            fastcgi_param DOCUMENT_URI       $document_uri;
            fastcgi_param DOCUMENT_ROOT      $document_root;
            fastcgi_param SERVER_PROTOCOL    $server_protocol;
            fastcgi_param REMOTE_ADDR        $remote_addr;
            fastcgi_param REMOTE_PORT        $remote_port;
            fastcgi_param SERVER_ADDR        $server_addr;
            fastcgi_param SERVER_PORT        $server_port;
            fastcgi_param SERVER_NAME        $server_name;
            fastcgi_param REMOTE_USER        $remote_user;
    }

    #Make sure all PHP is process by php-fpm
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    #rTorrent/wTorrent needs this
    #To loop back to the xml rpc service
        location /RPC2 {
                scgi_pass   127.0.0.1:5000;
                include     scgi_params;
                scgi_param    SCRIPT_NAME  /RPC2;
        }

}

두 번째 업데이트

여기에 디버그 로그가 게시되었습니다 ( http://pastebin.com/raw.php?i=PtLwvQhW ). 너무 길어서이 게시물의 스팸을 피하기 위해이 작업을 수행했습니다.


전체 구성을 보여줍니다.
quanta

1
debug끝에 추가 하고 error_log다시 시도한 후 여기에 오류 로그를 게시하십시오.
quanta

내 게시물에 페이스트 빈에 대한 링크를 추가했습니다. pastebin.com/raw.php?i=PtLwvQhW
jwbensley 2012 년

ls -l /usr/share/nginx/mysite.com/public_html/index.html?
quanta

답변:


12

try_files 행을 다음과 같이 수정하십시오.

try_files $uri $uri/ /index.html =404;

참조 : https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files


1
좋아, 여기 내 바보 같은 몇 가지 요점. 먼저 index.html이 존재하지 않으며 index.php이어야합니다. 원래의 구성 사본이 있습니다 (diff를 실행하면 나에게 지적했습니다). 어떻게 바뀌 었는지 모르겠습니까?! 둘째, /index.php를 가리키면 실제로 브라우저가 원시 PHP 코드를 다운로드하는 것이 약간 위험하지만, 가리켜 야 / 작동합니다. 그래서 라인은 이제 try_files $uri $uri/ / =404;고마워 : D
jwbensley

2
매우 감사합니다. 일치하는 목록이 없으면 목록의 마지막 항목으로 내부 리디렉션 /index.html되는 try_files원인 을 모른 채 내에서 제거했습니다 . 나는 try_files $uri $uri/ =404;내 경우에 잘 작동 하는 줄을 남겼습니다 .
Drew Noakes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.