Partimos de cero
La mayoría de guías de Nginx copian y pegan directivas sin entenderlas. Nosotros escribimos solo lo que el proyecto necesita.
nginx.conf global
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Gzip solo para lo que sirve
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 256;
# Logs en formato JSON para analizar
log_format json escape=json
'{"time":"$time_iso8601","remote":"$remote_addr","method":"$request_method","uri":"$request_uri","status":$status,"bytes":$body_bytes_sent,"ua":"$http_user_agent"}';
include /etc/nginx/conf.d/*.conf;
}
Virtual host tipo
server {
listen 443 ssl http2;
server_name ejemplo.com;
root /var/www/ejemplo/public;
index index.html;
ssl_certificate /etc/letsencrypt/live/ejemplo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ejemplo.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
try_files $uri $uri/ =404;
}
# Sin location para .well-known si no se necesita
# Sin php si es estático
# Sin proxy si no hay backend
}
La regla de oro
Si no sabes para qué sirve una directiva, no la incluyas. Un archivo de configuración de 15 líneas bien entendidas vale más que uno de 80 copiado de StackOverflow.