esto es la suraguwiki el contenido, como puedes ver, deja mucho que desear para comentarios sobre los cosos aquí, puedes mandar un correo a diego arroba suragu punto net

Si eres un putísimo crack y quieres contribuir a esta wiki, pídeme una cuenta en el mismo correo de arriba

Configuración de nginx

Nada gente, resulta que ahora me tengo que sacar la certificación de nginx así que vamos a ver los puntos que te dicen que tienes que tener para tener el Certified™ Nginx™ Administrator™:

  1. Perform and verify an NGINX OSS installation
  2. Use NGINX as webserver
  3. HTTPS
  4. Use NGINX as load balancer
  5. Understand how NGINX uses modules
  6. Recognize functionallity, architecture and uses cases for NGINX
  7. Understand the use of share memory zones
  8. Read and interpret an NGINX log
  9. Understand the use of variables in an NGINX log
  10. Verify proper nginx operation (i.e. verify it is working)
  11. Provide the data that support will need when troubleshooting (esta no la veremos porque no tengo soporte contratado como comprendereis)

Se asumirá que estamos usando Debian, no estoy usando FreeBSD en este caso debido a razones.

>Perform and verify an NGINX OSS installation

# Instalamos el paquete de nginx
$ sudo apt install -y nginx
# Verificamos que esté instalado
$ dpkg -l | grep nginx

Deberia salir en el output

>Use NGINX as Webserver

A ver, normalmente Debian inicia los servicios una vez se instalan, así que en teoría ya estás usando nginx como servidor web, puedes comprobarlo accediendo a la IP del servidor en el navegador o haciendo desde la propia máquina con nginx algo así:

curl 127.0.0.1

Tendría que salirte un mensaje de nginx diciendo que: funciona

Para ver la configuración por defecto de nginx, veremos, en Debian, vamos a /etc/nginx/sites-enabled/default, que es la configuración de un sitio web por defecto que trae la distribucion de nginx de Debian (puede ser distinta en otras distros/OSes, por ejemplo FreeBSD te tira el nginx.conf a tu suerte)

Así se ve un sitio configurado en /etc/nginx/sites-enabled/default

/etc/nginx/sites-enabled/default
server {
        server_name  tu-dominio.tld;
	listen 127.0.0.1:80;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
        root   /var/www/html;
        index  index.html index.htm index.cgi;
        # Páginas de error
        error_page  404              /errdocs/404.html;
        error_page  403              /errdocs/403.html;
        error_page  410		     /errdocs/410.html;
        error_page  500              /errdocs/500.html;
        error_page  502		     /errdocs/502.html;
 
}

Y ya está. Esto es el nginx mas simple del mundo. Sirve HTML y páginas de error.

>HTTPS

(como generar certificados SSL, ya sea con certbot o openssl, se escapa del ámbito de este artículo, así que asumiremos que ya los tienes)

Al toque mi rey. Abajo de listen 80 en la configuración anterior, añadimos algo así:

/etc/nginx/sites-enabled/default
listen              443 ssl;
ssl_certificate     /etc/ssl/tu-dominio.pem
ssl_certificate_key /etc/ssl/private/tu-dominio.key
ssl_protocols       TLSv1.2 TLSv1.3;
ssl_ciphers         HIGH:!aNULL:!MD5;

service nginx restart y ya tienes HTTPS. ole.

>Use NGINX as load balancer

También muy sencillo. Asumiendo que ya tenemos todo montado y tienes dos servidores exactamente iguales en 10.0.0.1 y 10.0.0.2:

En el bloque http de la configuración (que está en /etc/nginx/nginx.conf, agregamos nuestros mirrors:

/etc/nginx/nginx.conf
  upstream web {
        server 10.0.0.1;
        server 10.0.0.2;
    }

Y luego en nuestro archivo de configuración:

/etc/nginx/sites-enabled/default
        location / {
           proxy_pass http://myapp1;
        }

Y eso sería todo (sigo pensando que haproxy es mejor para esto por cierto). Luego puedes meterle la parafernalia de SSL si quieres

>Understand how NGINX uses modules

Sencillo, podemos ver en el nginx.conf de donde nginx carga los módulos:

include /etc/nginx/modules-enabled/*.conf;

Con estos archivos de configuración, nginx carga el shared object del modulo en cuestión y puede usarlo. Hay módulos para código de perl, http3.0 y esa clase de todas. Básicamente se cargan como una librería cualquiera.

>Recognize functionallity, architecture and uses cases for NGINX

Esto suena a scalable cloud edge computing computer vision javascript AI-powered. Pero vamos:

Funcionalidad: Servir archivos a través del protocolo HTTP. Además de eso también puede servir aplicaciones web enteras escritas con un framework (haciendo uso de sus funcionalidades de proxy inverso) y demás cosas.

Arquitectura: Pues dependerá de como lo tengas montado. Lo mismo tienes nginx o tienes haproxy. No me preguntes esto a mi anda.

Use cases: Cuando necesitas hacer un proxy inverso, servir un sitio web estático, una aplicación web en PHP o cualquier cosa de estas

Understand the use of share memory zones

Bueno, esto es una cosa de nginx plus la cual no puedo probar porque no tengo una licencia ni el software en sí. Pero vamos que leyendo un poquito se puede saber que es básicamentes los recursos compartidos en un clúster de máquinas con nginx, para que los distintos nodos del clúster puedan acceder a los recursos de otros nodos y así garantizar mas rendimiento/HA.

Los pobres podemos lograr algo parecido a esto usando keepalived o corosync y pacemaker.

Read and interpret an NGINX log

127.0.0.1 - - [04/Jun/2025:12:56:33 +0000] "GET / HTTP/1.1" 200 2085 "http://5.249.160.173:80/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"

Yo creo que esto se entiende, no? IP, fecha, request, como respondió el server, tamaño, a donde hizo el request, y el user agent. No creo que haya mucho que explicar aquí.

Understand the use of variables in an NGINX log

Ah si, una vez para usar goaccess tuve que cambiar el formato del log de nginx para que goaccess lo entendiese.

Aquí están todas las que puedes usar, y si dependen de algún módulo: https://nginx.org/en/docs/varindex.html

Ejemplo de configuración de log abstracta en nginx:

/etc/nginx/nginx.conf
 log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';

Es básicamente el por defecto, si os fijais. pero así podeis cambiar las variables y añadir las que querais o cambiarlas para hacer el log mas personalizado o que tenga menos cosas que no os interesan.

>Verify proper nginx operation (i.e. verify it is working)

Uhmm. ¿systemctl status nginx y que esté en verde? ¿netstat -plnt y ver nginx?. También puedes testear la configuración de nginx con nginx -t

Hay cosas tan sencillas que me cuesta creer que se preguntan en examenes oficiales de certificaciones de 500 euros.

>Provide the data that support will need when troubleshooting

Ah, la tipica. TODOS los logs de error (y debug también ya que estamos teniendo un problema en producción) para mandarlo al soporte y que se encarguen ellos. Pero vamos, podemos sacarla de /var/log/nginx/error.log

Tu valor en el mercado laboral acaba de subir 500 euros, aparentemente