Introducción al servidor web Nginx - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Este es un vídeo de introducción al servidor weg Nginx.
Destinado a alumnos de 2º curso del CFGS Desarrollo de Aplicaciones Web.
Destinado a alumnos de 2º curso del CFGS Desarrollo de Aplicaciones Web.
Hola, en este caso voy a hacer una breve introducción a este otro servidor web, Nginx, que va a complementar lo que hemos visto con Apache, ¿vale?
00:00:00
Entonces, bueno, vamos allá. Lo tenéis aquí en la página donde os estoy dejando las cosas.
00:00:11
Bueno, pues la configuración de Nginx en general es de lo que vamos a ver más o menos similar a Apache.
00:00:19
Si aquí veis el aspecto que tiene, en vez de ser virtual host, pues es un bloque server y los bloques van con llaves.
00:00:26
Bueno, y este es el aspecto que tienen.
00:00:36
Los conceptos que vamos a ver son más o menos similares.
00:00:40
Sí que os he puesto aquí alguna diferencia entre Nginx y Apache.
00:00:42
Este artículo está bastante bien.
00:00:47
Hay cosas en las que Nginx funciona algo mejor y cosas en las que Apache es más práctico.
00:00:49
Por ejemplo, en Nginx no tenemos ficheros htaccess y estos ficheros son muy prácticos porque es parte de nuestro código. Si nosotros tenemos un repositorio o ficheros donde nosotros guardamos nuestro código, pues vamos a poder hacer cierta configuración y cierta gestión del servidor Apache con este fichero que está para ello.
00:00:56
Eso es algo que Nginx no tiene. Entonces, bueno, dificulta un poco la vida a los desarrolladores. Por otro lado, lo han quitado porque eso obliga a que cada consulta del cliente vuelva a recargar y a leer este feature.
00:01:17
Entonces, bueno, es un compromiso. Nginx tampoco soporta por defecto la ejecución de PHP. Hay que recurrir a otros mecanismos como FPM, que tiene su motor independiente.
00:01:33
Y mientras Apache tiene varios bloques como el de directorio, ficheros y location, Nginx únicamente soporta el bloque de location.
00:01:50
Y bueno, esto es un panorama general. En la práctica Apache es muy utilizado como el servidor backend, por ejemplo, de una aplicación concreta como WordPress o como otras aplicaciones, quizás especialmente en PHP, mientras que Nginx se suele utilizar más como reverse proxy, como proxy inverso que veremos en otro momento.
00:02:03
Así que, al menos ahora mismo, está bien conocer un poco de ambos. Pero ya os digo que los conceptos en muchos casos son similares.
00:02:32
Entonces, bueno, vamos a ver un caso práctico de configuración de Apache, ¿vale? Con algunas cosas sencillas.
00:02:44
Entonces voy a pasar a una terminal donde tengo AWS, ¿vale? Y acabo de instalar ya, ¿vale? He hecho aquí un update y he instalado ya Nginx, muy sencillo, ¿vale?
00:02:56
Y tenemos el servicio de Nginx activo y funcionando. ¿Dónde nos deja las cosas? Pues como casi todos los servicios, en etc, Nginx, y aquí podemos ver lo que tenemos inicialmente.
00:03:17
El fichero principal de configuración es solo uno, nginx.conf, así que voy a mirar lo que tiene. Con un cat voy arriba y aquí voy a saber que es más conciso realmente la configuración de Nginx.
00:03:39
Tenemos aquí directamente cuál es el usuario bajo el que se ejecuta el proceso de Nginx. Esto es importante porque este usuario es el que necesita acceso a nuestro código, el servidor web, sea el lenguaje que estemos utilizando o si son recursos estáticos como HTML, imágenes, etc. Este es el usuario que necesita acceso.
00:03:54
Hay otras distribuciones que utilizan el usuario Nginx, en este caso Ubuntu sigue el nombre habitual de Apache, así que simplemente miran nuestra distribución cuál es el que se usa.
00:04:17
Algunas conexiones, algunas configuraciones sobre los hilos o los procesos por los que vaya a trabajar, que lo llaman workers.
00:04:33
Y tenemos un único bloque HTTP que comienza y finaliza un poco más abajo.
00:04:45
Cuestiona sobre cómo se van a gestionar las conexiones TCP, sobre los tipos de features que vamos a utilizar.
00:04:50
Cuando instalemos algún certificado, esta es la configuración que se va a aplicar.
00:04:59
Ficheros de error y de acceso.
00:05:10
Si vamos a habilitar la compresión en la transferencia de cualquier tipo de fichero.
00:05:15
Por cierto, los ficheros de error y acceso los configuraremos para cada host virtual, pero por defecto están impuestos.
00:05:21
Y luego lo que nos interesa es qué directorios va a leer según está configurado Nginx en esta máquina, donde dejaremos nuestros hosts virtuales o servidores que se llaman en Nginx.
00:05:28
Entonces aquí tenemos realmente dos posibles directorios, conf.d donde se trabaja típicamente con Nginx en realidad, ahí va a leer cualquier fichero que tenga extensión .conf y también esto es algo que ha puesto Ubuntu, el mismo sistema que Apache con Sites Available y Sites Enabled y lee cualquier fichero, tenga la extensión que tenga dentro de este directorio de Sites Enabled.
00:05:44
Y esto sería, sencillamente, entonces vamos a ver qué es lo que tenemos aquí en SitesAvailable y SitesEnabled.
00:06:12
En los sitios disponibles tenemos un default.
00:06:24
Voy a poner aquí en este caso menos L, SitesEnabled.
00:06:28
Tenemos también ese otro default que es un enlace suave al sitio disponible.
00:06:32
Entonces vamos a ver qué es lo que nos viene por defecto. Un fichero que es cortito, pero simplemente tiene muchos comentarios.
00:06:39
Como veíamos, un bloque server. Estamos escuchando en el puerto 80. Por cierto, en Apache gestionábamos los puertos que abre en otro fichero que se llamaba ports.
00:06:51
aquí no existe tal fichero
00:07:02
si nosotros aquí indicamos simplemente
00:07:04
otro puerto, el 8080
00:07:06
Nginx ya lo va a abrir por defecto
00:07:08
no hace falta tocar nada más
00:07:11
y esta segunda línea es también
00:07:12
el puerto 80 pero en IPv6
00:07:14
esto sería el equivalente a decir
00:07:16
la dirección que tendríamos en IPv4
00:07:18
que es la 0.0.0.0
00:07:21
para que lea
00:07:23
de cualquier cliente
00:07:24
conexiones de cualquier cliente
00:07:26
en IPv6 es de todos ceros
00:07:28
se pone como dos puntos, dos puntos
00:07:30
entonces para separar eso
00:07:32
del separador del puerto
00:07:34
que es estos dos puntos, se utilizan
00:07:36
los corchetes planos, ¿vale?
00:07:38
simplemente, pues abre el puerto 80
00:07:40
en IPv6 también
00:07:42
¿vale? configuración SSL para
00:07:44
HTTPS, la vamos a
00:07:46
dejar de momento, tenemos
00:07:48
el document root, en este caso simplemente
00:07:50
poner el root y el directorio
00:07:52
nombres de dominio
00:07:54
lo pondríamos aquí
00:07:57
y luego pues directivas
00:07:57
location y ya estaría
00:08:00
aquí nos deja el caso también de una configuración
00:08:04
sin comentar y como más concreta, entonces yo tengo un par de
00:08:08
ficheros ya puestos y creados
00:08:12
los voy a mover, simplemente los tengo en
00:08:16
mi directorio de inicio, en el home, entonces voy a moverlos
00:08:19
al, perdón, etc, nginx, a los sitios disponibles.
00:08:23
Más que moverlos, los voy a copiar.
00:08:35
¿Vale? Y me voy a ir a esos, a los sitios habilitados.
00:08:40
¿Vale? Yo los tengo, los tengo como disponibles y los voy a habilitar.
00:08:46
En el caso de Apache teníamos un comando que hacía este enlace, con Nginx no lo tenemos. Seguro que luego hay herramientas para hacerlo, pero bueno, no cuesta nada y lo tenemos que hacer a mano.
00:08:52
Entonces, creamos un enlace suave. ¿Y a dónde lo ponemos? Pues a los sitios disponibles, lo he llamado nginxalpha.adaptns.rg porque ya tengo ese dominio creado, ¿vale? Y lo mismo con ese otro fichero beta.
00:09:04
y aquí tengo estos dos
00:09:22
picheros, vamos a ver que es lo que
00:09:28
que es lo que tiene
00:09:30
vale, en alfa he puesto la configuración
00:09:31
más sencilla que podemos
00:09:36
tener, tengo ya
00:09:38
puesto este
00:09:40
nombre de dominio y simplemente
00:09:41
el document root
00:09:44
voy a comprobar el nombre de dominio
00:09:45
aquí tenemos
00:09:47
esta sería la IP
00:09:52
sé que es esta que le acabo de poner
00:09:54
y
00:09:56
y bueno
00:09:58
aquí en alfa simplemente
00:10:00
he dejado un fichero
00:10:02
sencillo, ¿vale? Entonces
00:10:04
cosas que tenemos
00:10:08
que hacer, primero comprobar
00:10:11
si la nueva configuración que hemos dejado
00:10:12
es correcta, para eso
00:10:14
Hacemos un test y en este caso, lo he hecho a posta, me dice que hay un error en este otro fichero beta en la línea 34, ¿vale?
00:10:16
Entonces voy a arreglarlo, ¿vale? Más adelante veremos este fichero y en la línea 34 pues tendría que llegar a que aquí me falta un punto y coma.
00:10:30
Lo guardo, vuelvo a pasar el test y en este caso la sintaxis es correcta y el test ha pasado con éxito. Ahora ya sí que me atrevería a reiniciar en GeneXus.
00:10:44
¿Vale? Y si esto está funcionando, pues vamos a ver si las pruebas las consigo hacer de forma exitosa.
00:11:06
Entonces, vamos a ver si hago una consulta a este servidor. He escrito mal. Esto es DuckDNS.
00:11:18
¿Vale? Y a ver, quizás aquí hay alguna cuestión
00:11:37
Vale, ha tardado un poquito, será algo de AWS
00:11:43
Esto es lo que me ha devuelto, ¿vale?
00:11:46
El S-Index
00:11:49
Si quiero verlo un poco verbose para ver las cabeceras
00:11:51
Que al final esto es bastante importante
00:11:54
Veo las cabeceras que el cliente envía al servidor
00:11:58
Y las de respuesta
00:12:00
Lo que me importa es ver el código de estado
00:12:02
¿Vale? 200
00:12:05
Pues me ha devuelto aquí este index. Entonces esto en cuanto a un servidor, un virtual host, muy básico, ¿vale? Y vamos a ver ahora también este otro servidor que tengo que es un poquito más elaborado.
00:12:06
Pero vais a ver que también se entiende de forma muy similar a Apache. Entonces tengo este otro nombre de dominio, ¿vale? En este caso el root, el document root, está en este otro directorio, nginx beta, los ficheres de acceso y de error se escriben muy fácil, tal y como veis, access log y error log.
00:12:23
Las páginas de error, si las queremos personalizar, las de los diferentes códigos de estado, pues indicamos aquí cuál es la página que va a devolver. Y luego tenemos bloques con la directiva location. Ya os repito que en este caso Nginx no tiene directory ni files, trabaja únicamente con location.
00:12:51
Entonces, tenemos que pensar, es el mismo concepto con el que trabaja Apache, esto se refiere a la URL, ¿vale? No a los directorios ni a los ficheros, sino a lo que el cliente me pide.
00:13:10
esta directiva try files
00:13:23
es propia de Nginx
00:13:29
y básicamente lo que le podemos es indicar
00:13:32
qué cosas queremos que pruebe
00:13:35
en el document root que tengamos
00:13:37
va a mostrar la URI
00:13:42
la URI podéis traducirla a URL
00:13:44
la URI es una generalización de una URL
00:13:48
O sea, prueba si existe como fichero tal cual lo que me han pedido. Y si no, prueba lo que me han pedido con una barra. Solo intenta buscar como un directorio. De tal manera que si el cliente, aquí no tengo ningún ejemplo para mostrarlo, pero si el cliente me escribe algo y no acaba en barra y coincide con un directorio, pues primero busca eso como un fichero y después lo intenta buscar como un directorio.
00:13:52
Y sobre eso aplicaría el index.html o aunque lo podamos tener modificado.
00:14:19
Y si no existe, ni como fichero ni como directorio, pues entonces aquí le decimos que devuelva un mensaje de error.
00:14:26
Y todo esto lo podemos personalizar, ¿vale?
00:14:31
Esto lo tenéis explicado también aquí en esta web.
00:14:34
Es habitual tener esta configuración.
00:14:41
Pero bueno, podríamos personalizarla.
00:14:46
también vale y aquí tenemos el caso de un bloque location que está dentro del anterior
00:14:49
por cierto si pongo así location y una barra lo que significa es que me pidan cualquier
00:15:01
cosa que comience por barra vale no únicamente el directorio raíz por eso está aquí el
00:15:09
barra img está incluido dentro del anterior. En este caso, pues he utilizado esta directiva
00:15:15
try files para decir, si me has pedido una imagen que comienza por barra img barra, te
00:15:22
la devuelvo si existe y si esa imagen no existe, porque igual he metido la pata en el código
00:15:33
y estoy diciendo que los clientes intenten descargar una imagen que no existe o algo
00:15:39
así, si no existe el fichero que
00:15:45
el cliente me intenta solicitar
00:15:47
le devuelvo una imagen por
00:15:49
defecto, ¿vale? y si por algún motivo
00:15:51
me tomas la
00:15:53
pata aún y no existe esta imagen
00:15:55
por defecto, pues le devuelvo un error
00:15:57
404, ¿vale? y esto se aplicaría
00:15:59
solo a las rutas
00:16:01
que me pidan que comiencen por barra
00:16:03
img
00:16:05
y bueno, pues también tenemos aquí
00:16:05
un alias, si en algún momento he cambiado
00:16:09
el nombre del directorio de
00:16:11
images a img
00:16:13
Pues así lo podría probar, ¿vale? Bueno, un ejemplo de cómo denegar el acceso a un directorio. Voy a hacer la prueba con esto. Si estoy en este caso en beta barra dev, me debería volver un error 403 prohibido, ¿vale?
00:16:15
De acceso prohibido. Si, por ejemplo, quiero poner, como hacíamos en Apache, una página en mantenimiento, podría hacerlo así, con try files. Entonces, siempre que me pidan algo que esté dentro de un directorio o un location en realidad, que comienza por barra nueva web, devuelve esta página de mantenimiento antes de intentar devolver lo que te han pedido, ¿vale?
00:16:44
Yo aquí en este caso lo tengo en bar tres subes dobles, en Ginex beta, aquí tengo un directorio que se llama nueva web, ¿vale? Y aquí tengo un index.html, que será lo que en este caso no debería volver nunca, debería volver solo la página de mantenimiento.
00:17:13
Entonces, si yo solicito algo de web, barra, sin más, barra, me da un 200 OK, pero me devuelve los contenidos de ese mantenimiento.html.
00:17:33
Y por último, estoy aquí probando una expresión regular devolviendo una página con lo que sería una redirección tipo 301 para probar o para utilizar expresiones regulares como la interrogación, el asterisco, los paréntesis.
00:17:52
Es en realidad lo mismo que vimos en Apache, es en este caso simplemente aquí añado el carácter de virgulilla, esa tilde de la ñ, aquí para indicar que esto no es texto normal, sino que es una expresión regular.
00:18:20
Entonces, si coincide que comienza por barra MDN y la última barra la he puesto opcional, ¿vale? Puede estar o puede no estar. Entonces, pues devuelve una redirección a esta página web, ¿vale? A la Mozilla Developer Network.
00:18:35
network de ahí viene mdn entonces voy a probar si esto funciona mdn debería devolverme 301 vale
00:18:53
con ese location que es a donde me redirigiría automáticamente un cliente web de escritorio y
00:19:07
Y si pongo también mdn finalizado en barra, pues debería funcionar igual.
00:19:17
Así que bueno, esto es un poco la introducción así breve que quería comentar.
00:19:25
Y el resto pues ya es revisar aquí o en la página de documentación oficial de Nginx, que también es bastante concreta.
00:19:31
ejemplos y situaciones
00:19:45
que pueden aparecer
00:19:48
así que nada
00:19:50
hasta aquí lo dejo por el momento
00:19:52
venga
00:19:54
- Idioma/s:
- Idioma/s subtítulos:
- Autor/es:
- Santiago González Gancedo
- Subido por:
- Santiago G.
- Licencia:
- Reconocimiento - No comercial - Sin obra derivada
- Visualizaciones:
- 4
- Fecha:
- 14 de febrero de 2024 - 16:16
- Visibilidad:
- Clave
- Centro:
- IES ENRIQUE TIERNO GALVAN
- Duración:
- 19′ 56″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 71.20 MBytes