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"

สิ่งนี้ใช้งานได้ตามที่คาดไว้ฉันไม่พบไวยากรณ์ที่ถูกต้องสำหรับรุ่นนี้ ตอนนี้ควรเป็นอย่างไร

อัพเดท config เต็มตามคำขอ

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

มีการโพสต์บันทึกการดีบักที่นี่ ( http://pastebin.com/raw.php?i=PtLwvQhW ) มันค่อนข้างยาวดังนั้นฉันได้ทำสิ่งนี้เพื่อหลีกเลี่ยงการส่งสแปมโพสต์นี้


แสดงการกำหนดค่าทั้งหมดของคุณ
ควอนตั้ม

1
ผนวกdebugไปยังจุดสิ้นสุดของerror_logเส้นลองอีกครั้งและโพสต์บันทึกข้อผิดพลาดที่นี่
ควอนตั้ม

ฉันได้เพิ่มลิงค์ไปยังถังขยะในโพสต์ของฉัน; pastebin.com/raw.php?i=PtLwvQhW
jwbensley

ls -l /usr/share/nginx/mysite.com/public_html/index.html?
ควอนตั้ม

คำตอบ:


12

แก้ไขบรรทัด try_files เป็น:

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

Ref: 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.