Nginx 1.2.2: try_files nasıl çalışır?


11

Son zamanlarda nginx 1.2.2 sürümüne güncelledim ve aşağıdaki giriş bozuk görünüyor; muhtemelen sürümler arasında sözdiziminde bir değişiklik?

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 adresine tarayıcı gönderdiğimde "500 Dahili Sunucu Hatası" hata sayfasına yönlendiriliyorum. Aşağıdaki günlük girişi yapılır;

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"

Bu beklendiği gibi çalışır, bu sürüm için doğru sözdizimini bulamıyorum. Bu şimdi nasıl olmalı?

UPDATE İstek olarak tam yapılandırma;

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

}

2. GÜNCELLEME

Buraya bir hata ayıklama günlüğü gönderildi ( http://pastebin.com/raw.php?i=PtLwvQhW ). Oldukça uzun bu yüzden bu yazı spam önlemek için bunu yaptık.


Tam yapılandırmanızı gösterin.
quanta

1
Satırın debugsonuna ekleyin error_log, tekrar deneyin ve hata günlüğünü buraya gönderin.
quanta

Yazımdaki bir yapıştırma kutusuna bir bağlantı ekledim; pastebin.com/raw.php?i=PtLwvQhW
jwbensley

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

Yanıtlar:


12

Try_files satırını şu şekilde değiştirin:

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

Ref: https://nginx.org/tr/docs/http/ngx_http_core_module.html#try_files


1
Tamam burada benim aptal nokta birkaç. Öncelikle index.html mevcut değil ve bu index.php olmalıdır, ki aslında, ben bunu gösteren yapılandırma eski bir kopyası var (sadece bir diff çalışan bu bana işaret etti). Bunun nasıl değiştiğinden emin değil misiniz ?! İkincisi, /index.php'yi işaret etmek aslında tarayıcımın biraz tehlikeli olan ham php kodunu indirmesine neden oldu, ancak / harika çalışıyor. Yani hat şimdi Çok try_files $uri $uri/ / =404;teşekkürler: D
jwbensley

2
Çok teşekkürler. Hiçbiri eşleşmezse listedeki son öğeye dahili bir yönlendirmeye neden /index.htmlolduğunu bilmeden benimkinden kaldırmıştım try_files. try_files $uri $uri/ =404;Benim durumumda işe yarayan çizgiyi bıraktım .
Drew Noakes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.