Tener las siguientes nginx vhost config:

server {
    listen 80;
    listen 443 ssl;
    server_name default;
    root /var/www/default/html;
    error_log /var/www/default/log/error.log;
    access_log /var/www/default/log/access.log;
    ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

    autoindex on;
    index index.html index.php;

    location /{
        try_files $uri $uri/@php;
    }

    location @php {
        rewrite ^/(.*)/?$ /index.php/$1 last;
    }

    location ~* /(?:[.]|.*[.](?:bak|fla|inc|ini|log|psd|sh|sql|swp)|(?:file|upload)s?/.*[.](?:php)) {
        deny all;
    }

    location ~* [.](?:php) {
        fastcgi_buffer_size             128k;
        fastcgi_buffers                 4 256k;
        fastcgi_busy_buffers_size       256k;
        fastcgi_connect_timeout         30;
        fastcgi_ignore_client_abort     off;
        fastcgi_index                   index.php;
        fastcgi_intercept_errors        on;
        fastcgi_pass                    unix:/var/run/php5-fpm.sock;
        fastcgi_read_timeout            60;
        fastcgi_send_timeout            60;
        fastcgi_split_path_info         ^(.+[.]php)(/.*)$;
        fastcgi_temp_file_write_size    256k;

        include /etc/nginx/fastcgi_params;
    }

    error_page 403 /403.html; location = /403.html {
        root /var/www/default/error;
    }

    error_page 404 /404.html; location = /404.html {
        root /var/www/default/error;
    }

    error_page 405 /405.html; location = /405.html {
        root /var/www/default/error;
    }

    error_page 500 501 502 503 504 /5xx.html; location = /5xx.html {
        root /var/www/default/error;
    }
}

Es posible tener la 40x y 50x errores servido por una sola regla de la localidad? Algo así como:

error_page 403 /403.html;
error_page 404 /404.html;
error_page 405 /405.html;
error_page 500 501 502 503 504 /5xx.html;

location ~ /(?:40[345]|5xx)[.]html$ {
    root /var/www/default/error;
}

Si el me lo anterior, siempre tengo la nginx defecto de errores 404. Cadena de partidos (sin operador) y coincidencias exactas (= operador) de trabajo, pero con el caso-[en]sensible regex operador (~[*]) no.

Supongo que el problema es el orden en el que la ubicación de los bloques de procesado.

Es de todos modos hay que superar para reducir la innecesaria root redundancia?

InformationsquelleAutor Alix Axel | 2012-11-29

1 Comentario

  1. 94
    error_page 403 /error/403.html;
    error_page 404 /error/404.html;
    error_page 405 /error/405.html;
    error_page 500 501 502 503 504 /error/5xx.html;
    
    location ^~ /error/{
        internal;
        root /var/www/default;
    }
    
    • Excelente solución. En caso de que alguien es totalmente nuevo para esto, tenga en cuenta que usted todavía necesita para crear el «error» de la carpeta dentro de /var/www/default
    • …o utilizar alias en lugar de root y, a continuación, los archivos se pueden leer directamente desde /var/www/default/, en lugar de /var/www/default/error/.
    • Yo quería tener un bloque de servidor que respondería a cualquier servidor de nombres de no configurado (así, por ejemplo, la dirección IP de una página 404 de servir). Quiero que la página sea personalizado. Yo escribió: listen 80 default_server; server_name default; return 404; error_page 404 /errors/404.html; location ^~ /errors/ { internal; root /var/www; }. Todavía se me pone por defecto nginx página de error 404. ¿return 404; Trabajar con páginas personalizadas?
    • Sugerencia: si su página de error es el uso de los archivos estáticos como imágenes/css/… en el mismo directorio, a continuación, omita internal;

Dejar respuesta

Please enter your comment!
Please enter your name here