Nginx 1.2.2: Bagaimana agar try_files bekerja?

11

Saya memperbarui nginx baru-baru ini ke versi 1.2.2 dan entri berikut ini tampaknya rusak; mungkin ada perubahan sintaks antar versi?

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

Ketika saya melakukan browser ke http://www.mysite.com/a-non-existent-url saya diarahkan ke halaman kesalahan "500 Internal Server Error". Entri log berikut dibuat;

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"

Ini dulu berfungsi seperti yang diharapkan, saya tidak dapat menemukan sintaks yang benar untuk versi ini. Bagaimana seharusnya sekarang?

PEMBARUAN Konfigurasi penuh sebagai permintaan;

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

}

Pembaruan ke-2

Log debug telah dikirimkan di sini ( http://pastebin.com/raw.php?i=PtLwvQhW ). Ini cukup lama jadi saya telah melakukan ini untuk menghindari mengirim spam pada posting ini.

jwbensley
sumber
Tunjukkan konfigurasi lengkap Anda.
kuanta
1
Tambahkan debugke akhir error_logbaris, coba lagi dan kirim log kesalahan di sini.
quanta
Saya telah menambahkan tautan ke tempat tempel di pos saya; pastebin.com/raw.php?i=PtLwvQhW
jwbensley
ls -l /usr/share/nginx/mysite.com/public_html/index.html?
kuanta

Jawaban:

12

Ubah baris try_files ke:

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

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

Anoop P Alias
sumber
1
OK beberapa poin bodoh di sini di pihak saya. Pertama index.html tidak ada dan itu seharusnya index.php, yang awalnya, saya memiliki salinan konfigurasi yang menunjukkan bahwa (hanya menjalankan diff telah menunjukkan hal ini kepada saya). Tidak yakin bagaimana itu berubah ?! Kedua, menunjuk ke /index.php sebenarnya menyebabkan browser saya mengunduh kode php mentah yang sedikit berbahaya, tetapi menunjuk ke / berfungsi dengan baik. Jadi salurannya sekarang try_files $uri $uri/ / =404;Terima kasih banyak: D
jwbensley
2
Terima kasih banyak. Saya telah menghapus /index.htmldari milik saya tanpa mengetahui yang try_filesmenyebabkan pengalihan internal ke item terakhir dalam daftar jika tidak ada yang cocok. Saya meninggalkan garis try_files $uri $uri/ =404;yang berfungsi dengan baik dalam kasus saya.
Drew Noakes