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