Nginx 1.2.2: Làm cách nào để try_files hoạt động?


11

Tôi đã cập nhật nginx gần đây lên phiên bản 1.2.2 và mục sau đây dường như bị hỏng; có lẽ là một sự thay đổi trong cú pháp giữa các phiên bản?

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

Khi tôi duyệt đến http://www.mysite.com/a-non-existent-url, tôi được chuyển hướng đến trang lỗi "500 Lỗi máy chủ nội bộ". Các mục nhật ký sau đây được thực hiện;

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"

Điều này được sử dụng để làm việc như mong đợi, tôi không thể tìm thấy cú pháp chính xác cho phiên bản này. Làm thế nào điều này nên được bây giờ?

CẬP NHẬT Cấu hình đầy đủ theo yêu cầu;

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;
        }

}

CẬP NHẬT thứ 2

Một nhật ký gỡ lỗi đã được đăng ở đây ( http://pastebin.com/raw.php?i=PtLwvQhW ). Nó khá dài nên tôi đã làm điều này để tránh spam bài đăng này.


Hiển thị cấu hình đầy đủ của bạn.
lượng tử

1
Nối debugvào cuối error_logdòng, thử lại và đăng nhật ký lỗi tại đây.
lượng tử

Tôi đã thêm một liên kết đến một thùng dán trong bài viết của tôi; pastebin.com/raw.php?i=PtLwvQhW
jwbensley

ls -l /usr/share/nginx/mysite.com/public_html/index.html?
lượng tử

Câu trả lời:


12

Sửa đổi dòng try_files thành:

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

Tham chiếu: https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files


1
OK một vài điểm ngu ngốc ở đây về phía tôi. Đầu tiên index.html không tồn tại và đó phải là index.php, mà ban đầu, tôi có một bản sao cũ của cấu hình cho thấy điều đó (chỉ cần chạy một diff đã chỉ ra điều này cho tôi). Không chắc nó đã thay đổi như thế nào?! Thứ hai, việc trỏ đến /index.php thực sự khiến trình duyệt của tôi tải xuống mã php thô, điều này hơi nguy hiểm, nhưng trỏ đến / hoạt động rất tuyệt. Vì vậy, dòng bây giờ try_files $uri $uri/ / =404;Cảm ơn rất nhiều: D
jwbensley

2
Cảm ơn rất nhiều. Tôi đã xóa /index.htmltừ tôi mà không biết rằng điều đó try_filesgây ra chuyển hướng nội bộ đến mục cuối cùng trong danh sách nếu không có kết quả khớp. Tôi rời khỏi dòng như try_files $uri $uri/ =404;hoạt động tốt trong trường hợp của tôi.
Drew Noakes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.