Para solucionar Nginx en un servidor Linux, verificar el estado del servicio, leer registros de errores, probar la configuración y abordar errores específicos como conflictos de puertos, 502/504 problemas de origen, SSL mala configuración o problemas de permisos.
Reiniciar o recargar Nginx Después de realizar cambios, asegúrese de que las reglas del firewall, SELinux/AppArmor y los servicios ascendentes funcionen correctamente. (como PHP-FPM) están configurados correctamente.
Si te preguntas cómo solucionarlo Nginx En entornos de servidores Linux, esta guía le muestra un flujo de resolución de problemas probado que soluciona los problemas más comunes de forma rápida.
Basándote en años de experiencia práctica en la administración de servidores, aprenderás pasos prácticos, comandos para copiar y pegar, y las mejores prácticas para restaurar el tiempo de actividad y el rendimiento de forma segura.
Flujo de trabajo de diagnóstico rápido (comience aquí)
Siga estos pasos en orden. Cubren 80% del mundo real Nginx auténticos.
Paso 1: Verifique el estado del servicio y reinicie de forma segura
sudo systemctl status nginx
sudo nginx -t
sudo systemctl restart nginx
# Prefer zero-downtime reload after config edits:
sudo systemctl reload nginxSi el reinicio falla, observe las líneas de error. Ejecute siempre nginx -t antes de recargar/reiniciar para detectar errores de sintaxis.
Paso 2: Lee los registros (te dirán por qué)
# Nginx logs
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/nginx/access.log
# Systemd journal (service-level issues)
sudo journalctl -u nginx --no-pager -n 200Escanee en busca de conflictos de puertos, denegaciones de permisos, tiempos de espera de subida, SSL errores, o errores de sintaxis. Estos determinan la solución.
Paso 3: Verificar los puertos y el firewall
# Check what's listening on 80/443
sudo ss -tulpn | grep -E ':80|:443'
sudo lsof -i :80 -i :443
# UFW (Ubuntu/Debian)
sudo ufw allow 'Nginx Full' && sudo ufw reload
# firewalld (RHEL/CentOS/Alma/Rocky)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reloadSi otro servicio está ocupando el puerto 80/443, deténgalo o cambie su puerto, o vuelva a vincularlo. Nginx a un puerto libre para realizar pruebas.
Soluciones para problemas comunes Nginx Errores
Nginx No arranca: “la dirección ya está en uso”.
Causa: Otro proceso (a menudo Apache/HTTPD o un duplicado Nginx bloque) se enlaza a 80/443.
- Identificar el proceso conflictivo utilizando
ssorlsof. - Detener/deshabilitar Apache si solo necesitas Nginx:
sudo systemctl disable --now apache2 httpd - Eliminar duplicados
listen 80;entradas en el mismo bloque de servidor con el mismoserver_name.
# Find conflict and stop it
sudo ss -tulpn | grep :80
sudo systemctl stop apache2 || sudo systemctl stop httpd
sudo systemctl restart nginx502 Puerta de enlace no válida (PHP-Problemas con FPM o con la fuente de datos anterior)
Causa: Nginx no puede llegar a la parte superior (PHP-FPM, Node.js, aplicación Python). Compruebe la ruta del socket, el estado del servicio y los tiempos de espera.
# Check PHP-FPM
# Debian/Ubuntu: service names vary by version (php8.2-fpm example)
sudo systemctl status php8.2-fpm
sudo systemctl restart php8.2-fpm
# RHEL/CentOS
sudo systemctl status php-fpm
sudo systemctl restart php-fpmAsegure su Nginx La configuración de fastcgi apunta al socket o puerto TCP correcto:
# Example server block snippet for PHP-FPM (Debian/Ubuntu)
location ~ .php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_read_timeout 60s;
}
# RHEL/CentOS typical socket
# fastcgi_pass unix:/run/php-fpm/www.sock;Si utiliza un upstream a través de TCP (por ejemplo, Node.js en 127.0.0.1:3000), confirme que la aplicación se esté ejecutando y que el puerto sea accesible.
504 Tiempo de espera de puerta de enlace
- Aumentar los tiempos de espera:
proxy_read_timeout,fastcgi_read_timeout, o tiempos de espera de aplicaciones ascendentes. - Optimice el rendimiento ascendente o agregue almacenamiento en caché para puntos finales pesados.
- Compruebe la latencia de la red, la lentitud de la base de datos o los scripts de larga duración.
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 120s;
proxy_connect_timeout 10s;
proxy_send_timeout 120s;
}403 Prohibido o 404 No encontrado
- Mal
rootorindexen el bloque del servidor. - Permisos/propiedad de archivos incorrectos (la raíz web debe ser legible por Nginx usuario, comúnmente
www-dataornginx). - SELinux/AppArmor o denegar reglas que bloquean el acceso.
# Correct ownership and permissions (example for Debian/Ubuntu)
sudo chown -R www-data:www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} ;
sudo find /var/www/example.com -type f -exec chmod 644 {} ;Verificar la raíz y el índice del documento:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html;
}Entidad de solicitud 413 demasiado grande
Aumentar la carga límite en Nginx y tu aplicación/PHP :
server {
client_max_body_size 100M;
}Para PHPtambién ajustar upload_max_filesize y post_max_size in php.ini, luego reinicia PHP-FPM.
SSLErrores de TLS (protocolo, protocolo o certificado)
- Asegúrese de que las rutas de los certificados/claves sean correctas y legibles por Nginx.
- Utilice la cadena completa (cert + intermedio). Para Vamos a cifrar, apunta a fullchain.pem.
- Combina tu
server_nameal CN/SAN del certificado.
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}Renueve los certificados Let's Encrypt según sea necesario:
# If you installed certbot
sudo certbot renew --dry-run
sudo certbot renew
sudo systemctl reload nginx“Demasiados archivos abiertos” o problemas de alta concurrencia
Aumentar los límites de descriptores de archivo y las conexiones de trabajadores.
# /etc/nginx/nginx.conf
worker_processes auto;
worker_rlimit_nofile 100000;
events {
worker_connections 4096;
multi_accept on;
}También aumente los límites del sistema a través de /etc/security/limits.conf y sysctl si es necesario.
Bloqueo de SELinux/AppArmor Nginx
- Para SELinux: permitir Nginx para conectarse a la red o escribir en rutas específicas.
- Para AppArmor: put Nginx en modo de queja para probar, luego ajuste los perfiles.
# SELinux examples (RHEL/CentOS/Alma/Rocky)
sudo setsebool -P httpd_can_network_connect 1
sudo chcon -R -t httpd_sys_rw_content_t /var/www/example.com/storage
# AppArmor (Ubuntu)
sudo aa-status
# Temporarily set complain mode for nginx (if profile exists)
sudo aa-complain /etc/apparmor.d/usr.sbin.nginxAjuste del rendimiento y la estabilidad
Trabajadores y amortiguadores del tamaño adecuado
- Usar
worker_processes auto;so Nginx escalas con CPU núcleos. - Melodía
worker_connectionsbasado en conexiones concurrentes esperadas. - Establecer buffers razonables:
client_body_buffer_size,client_header_buffer_size,proxy_bufferspara respuestas grandes.
Keepalive y tiempos de espera
keepalive_timeout 65;es un valor predeterminado seguro; bájelo bajo carga pesada para liberar sockets.- Establecer
sendfile on;,tcp_nopush on;,tcp_nodelay on;para la eficiencia del contenido estático.
Capa en caché donde importa
Utilice microcaching para API dinámicas, almacenamiento en caché de activos estáticos con encabezados de futuro lejano y caché FastCGI para PHPLa estrategia de invalidación de caché es importante; vincúlela a las implementaciones o actualizaciones de contenido.
Mejores prácticas de configuración
Bloques de servidor separados y archivos de inclusión
- Un sitio por archivo en
/etc/nginx/sites-available/(Debian/Ubuntu) y enlace simbólico asites-enabled. - En RHEL/CentOS, utilice
/etc/nginx/conf.d/*.conf. - Guardar SSL, gzip y encabezados de seguridad en separado
includearchivos para reducir errores.
Validar y luego recargar (sin tiempo de inactividad)
sudo nginx -t && sudo systemctl reload nginxValide siempre la configuración antes de recargarla para evitar interrupciones. Considere preparar las nuevas configuraciones primero en un puerto de prueba.
Rotar y monitorear registros
- Asegúrese de que
logrotateestá activo para mantener/var/log/nginxde llenar discos. - Utilice el muestreo del registro de acceso o
log_formatPersonalización para reducir el ruido y localizar problemas.
Higiene de seguridad que no debes omitir
Guardar Nginx y abiertoSSL al día
# Debian/Ubuntu
sudo apt update && sudo apt -y upgrade
# RHEL/CentOS/Alma/Rocky
sudo dnf -y updateConsideremos el oficial Nginx Repositorio para versiones estables más recientes cuando necesite funciones o correcciones de errores recientes.
Endurecer los bloques del servidor
- Agregue encabezados de seguridad (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Content-Security-Policy donde corresponda).
- Deshabilitar métodos y directorios innecesarios indexación.
- Limite los puntos finales de carga y proteja las rutas de administración con límites de velocidad o 2FA a nivel de la aplicación.
server {
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location = /xmlrpc.php { deny all; }
location ~* .(log|ini|env)$ { deny all; }
}Utilice reglas fail2ban o WAF
Bloquea las direcciones IP abusivas y los ataques comunes. Si alojas WordPress , protege los puntos finales de inicio de sesión y XML-RPC, y considera usar una CDN/WAF para el filtrado perimetral.
Guía rápida de comandos paso a paso
- Validar configuración:
sudo nginx -t - Recargar sin tiempo de inactividad:
sudo systemctl reload nginx - Reinicio completo:
sudo systemctl restart nginx - Comprobar registros de servicio:
sudo journalctl -u nginx -n 200 - Registro de errores de cola:
sudo tail -n 100 /var/log/nginx/error.log - Encontrar conflictos de puertos:
sudo ss -tulpn | grep -E ':80|:443' - Permitir HTTP/HTTPS (UFW):
sudo ufw allow 'Nginx Full' - Permitir HTTP/HTTPS (firewalld):
sudo firewall-cmd --permanent --add-service=http https && sudo firewall-cmd --reload
Consejos prácticos basados en más de 12 años de experiencia en reparaciones. Nginx
- Realice un cambio a la vez y pruebe con
nginx -ty luego recarga. Esto aísla los problemas rápidamente. - Mantenga configuraciones separadas para la puesta en escena y la producción; use la misma estructura para evitar desviaciones.
- Fija tu PHP-Incluya la ruta del socket FPM en un archivo de variables y agréguela en todos los sitios para evitar incompatibilidades de versión después de las actualizaciones.
- Para WordPress con mucho tráfico, habilite la caché FastCGI, ajuste la caché de objetos a nivel de aplicación y descargue los recursos a una CDN.
- Monitor con
nginx_statuso métricas del exportador (Prometheus/Grafana) para que pueda detectar la saturación antes de las interrupciones.
Cuándo llamar a la ayuda administrada (y cómo) YouStable Puede ayudar)
Si el tiempo de inactividad perjudica sus ingresos o su pila es compleja (múltiples servidores de aplicaciones, SSL descarga, HTTP/2, almacenamiento en caché y PHP-FPM), un manageLa solución ahorra tiempo y riesgos. YouStable, managed VPS y servidores dedicados incluir Nginx Configuración, monitorización, aplicación de parches y soluciones de emergencia, para que usted se centre en su aplicación, no en apagar incendios.
Preguntas Frecuentes
¿Por qué es Nginx ¿No arranca después de la instalación?
Las causas comunes son los conflictos portuarios (Apache ya en 80/443), errores de sintaxis en las configuraciones predeterminadas o directorios faltantes para los registros de acceso. Verifique sudo nginx -t, verificar puertos con ss -tulpne inspeccionar /var/log/nginx/error.log por razones exactas de falla.
¿Cómo soluciono el error 502 Bad Gateway en Nginx con PHP-FPM?
Asegúrese de que PHP-FPM se está ejecutando y eso fastcgi_pass apunta al zócalo correcto (por ejemplo, /run/php/php8.2-fpm.sock) o puerto TCP. Reiniciar PHP-FPM, aumentar fastcgi_read_timeout si es necesario, y revise el PHP-Registro de errores de FPM para errores fatales.
¿Cómo puedo recargar? Nginx ¿Sin perder la conexión?
Ejecutar sudo nginx -t y luego en sudo systemctl reload nginxLa recarga aplica los cambios de configuración de forma elegante, permitiendo que las conexiones existentes se completen sin interrupciones.
¿Cuál es la mejor manera de depurar? Nginx SSL errores?
Confirme las rutas de certificados y claves, utilice cadenas completas (por ejemplo, Let's Encrypt) fullchain.pem), coincida con el server_name al certificado y revise el registro de errores para obtener detalles del protocolo de enlace. Después de realizar los cambios, recargue. Nginx y prueba con un navegador y openssl s_client -connect domain:443.
¿Cómo puedo comprobar si...? Nginx ¿Realmente está sirviendo a mi sitio?
Ejecutar curl -I http://your-domain y curl -I https://your-domain desde el servidor y una máquina externa. Confirme los encabezados del servidor, el código de estado y el contenido esperados. Si DNS es nuevo, verifique la propagación y su server_name valores.
Siguiendo este enfoque estructurado, puedes solucionar Nginx en servidores Linux de forma rápida y segura. Mantenga sus cambios incrementales, valide las configuraciones cada vez y considere managed alojamiento desde YouStable Si quieres manos expertas que mantengan tu stack saludable las 24 horas del día.
