Nginx 1.2.2: ¿Cómo hacer que los archivos try_ funcionen?


11

Actualicé nginx recientemente a la versión 1.2.2 y la siguiente entrada parece estar rota; presumiblemente un cambio en la sintaxis entre versiones?

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

Cuando busco en http://www.mysite.com/a-non-existent-url me redirigen a la página de error "500 Internal Server Error". Se realiza la siguiente entrada de registro;

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"

Esto solía funcionar como se esperaba, no puedo encontrar la sintaxis correcta para esta versión. ¿Cómo debería ser esto ahora?

ACTUALIZAR la configuración completa como solicitud;

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

}

2da ACTUALIZACIÓN

Se ha publicado un registro de depuración aquí ( http://pastebin.com/raw.php?i=PtLwvQhW ). Es bastante largo, así que hice esto para evitar enviar spam a esta publicación.


Muestra tu configuración completa.
quanta

1
Agregue debugal final de la error_loglínea, intente nuevamente y publique el registro de errores aquí.
quanta

He agregado un enlace a una papelera en mi publicación; pastebin.com/raw.php?i=PtLwvQhW
jwbensley

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

Respuestas:


12

Modifique la línea try_files para:

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

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


1
OK, un par de puntos estúpidos aquí de mi parte. En primer lugar, index.html no existe y debería ser index.php, que era originalmente, tengo una copia antigua de la configuración que muestra eso (solo ejecutar un diff me lo ha señalado). ¿No estás seguro de cómo cambió eso? En segundo lugar, apuntar a /index.php en realidad hizo que mi navegador descargara el código php sin procesar que es un poco peligroso, pero apunta / funciona muy bien. Así que la línea es ahora try_files $uri $uri/ / =404;Muchas gracias: D
jwbensley

2
Muchas gracias. Eliminé el /index.htmlmío sin saber que try_filescausa una redirección interna al último elemento de la lista si ninguno coincide. Dejé la línea try_files $uri $uri/ =404;que funciona bien en mi caso.
Drew Noakes
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.