Preguntas frecuentes y configuraciones concretas


Parámetros de limitaciones de POST y Timeouts


Limitaciones de POST en nginx.conf

client_max_body_size 40M;
client_body_buffer_size 128k;


Timeouts de proxying en proxy.conf

proxy_send_timeout 300;
proxy_read_timeout 300;



Redirecciones NGINX


Redirección permanente de dominio

server {
    listen 80;
    server_name dominio.com;
    access_log /var/log/nginx/dominio.com.access.log;
    error_log /var/log/nginx/dominio.com.error.log;
    root /var/www/;

    rewrite ^(.*) http://www.dominio.com$1 permanent;
}


Redirigir páginas www. al nombre del dominio sin "www"

# Cuando se visita www.example.net/yourpage, redigir a example.net/yourpage:

if ($host ~* ^www\.(.*)) {
    set $host_without_www $1;
    
    # $1 contiene '/yourpage', no 'www.example.net/yourpage'
    rewrite ^(.*)$ http://$host_without_www$1 permanent; 
}


Convertir reglas de rewrite de Apache a Nginx.

En general, añadir una / al principio de la regla (la URI en nginx incluye la barra y en Apache no), así como cambiar [L] por last:

Apache:
RewriteRule ^[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 [QSA,L,NC]

Nginx:
rewrite ^/[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 last;


Poner excepciones a los rewrites (por ej, si el fichero no existe)

if (-e $request_filename) {
        break;
    }



No logar algún tipo de fichero concreto

Por ejemplo, para no logar las imágenes existan o no:

location ~* \.(jpg|jpeg|gif|png|ico)$ {
    log_not_found     off;
    access_log        off;
    expires           30d;
}


Servir de forma automática subdominios sin especificar

  • Lo siguiente servirá de forma automática cada subdominio con un subdirectorio del mismo nombre
server {
    listen                80; 
    server_name           www.dominio.com *.dominio.com;
    fancyindex            on;
    fancyindex_exact_size off;
    
    # Extracts the subdomain to a variable
    if ($host ~ "^(.*).dominio.com") {
        set $sub $1;
    }
    
    # If the directory doesn't exists, redirect to the main-page
    if (!-d /var/www/dominio.com/sub/$sub) {
        rewrite . http://dominio.com/ redirect;
    }
    
    # Sets the correct root
    root /var/www/dominio.com/sub/$sub; 
    
    # I'm using Lighttpd's spawn-fcgi to serve PHP-files
    location ~ \.php$ {
        include /etc/nginx/conf/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/dominio.com/sub/$sub$fastcgi_script_name;
    }            
}  


Errores de "too many open files" + 500 Internal Server Error

Aumentar el número de file descriptors asociados al usuario que corre nginx:

root@fe01-cks:~# grep -E "(www-data|nginx)" /etc/security/limits.conf
www-data   soft   nofile     65536
www-data   hard   nofile     65536

Y añadimos los parámetros worker_rlimit_nofile, "use epoll" y subimos el worker_connections:

### nginx.conf
worker_processes  2;
worker_rlimit_nofile 65535;

events {
    worker_connections 10240;
    use epoll;
}



<Volver a Página de NGINX>