1 00:00:00,000 --> 00:00:11,279 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? 2 00:00:11,580 --> 00:00:17,179 Entonces, bueno, vamos allá. Lo tenéis aquí en la página donde os estoy dejando las cosas. 3 00:00:19,300 --> 00:00:26,820 Bueno, pues la configuración de Nginx en general es de lo que vamos a ver más o menos similar a Apache. 4 00:00:26,820 --> 00:00:33,359 Si aquí veis el aspecto que tiene, en vez de ser virtual host, pues es un bloque server y los bloques van con llaves. 5 00:00:36,620 --> 00:00:39,759 Bueno, y este es el aspecto que tienen. 6 00:00:40,460 --> 00:00:42,359 Los conceptos que vamos a ver son más o menos similares. 7 00:00:42,980 --> 00:00:47,519 Sí que os he puesto aquí alguna diferencia entre Nginx y Apache. 8 00:00:47,640 --> 00:00:49,299 Este artículo está bastante bien. 9 00:00:49,960 --> 00:00:56,280 Hay cosas en las que Nginx funciona algo mejor y cosas en las que Apache es más práctico. 10 00:00:56,280 --> 00:01:17,859 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. 11 00:01:17,859 --> 00:01:33,480 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. 12 00:01:33,480 --> 00:01:50,200 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. 13 00:01:50,200 --> 00:02:02,100 Y mientras Apache tiene varios bloques como el de directorio, ficheros y location, Nginx únicamente soporta el bloque de location. 14 00:02:03,480 --> 00:02:32,280 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. 15 00:02:32,280 --> 00:02:40,840 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. 16 00:02:44,420 --> 00:02:56,840 Entonces, bueno, vamos a ver un caso práctico de configuración de Apache, ¿vale? Con algunas cosas sencillas. 17 00:02:56,840 --> 00:03:17,840 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? 18 00:03:17,840 --> 00:03:39,520 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. 19 00:03:39,520 --> 00:03:54,320 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. 20 00:03:54,319 --> 00:04:17,740 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. 21 00:04:17,740 --> 00:04:33,360 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. 22 00:04:33,360 --> 00:04:44,620 Algunas conexiones, algunas configuraciones sobre los hilos o los procesos por los que vaya a trabajar, que lo llaman workers. 23 00:04:45,300 --> 00:04:50,100 Y tenemos un único bloque HTTP que comienza y finaliza un poco más abajo. 24 00:04:50,600 --> 00:04:59,699 Cuestiona sobre cómo se van a gestionar las conexiones TCP, sobre los tipos de features que vamos a utilizar. 25 00:04:59,699 --> 00:05:04,699 Cuando instalemos algún certificado, esta es la configuración que se va a aplicar. 26 00:05:10,579 --> 00:05:14,300 Ficheros de error y de acceso. 27 00:05:15,539 --> 00:05:21,659 Si vamos a habilitar la compresión en la transferencia de cualquier tipo de fichero. 28 00:05:21,800 --> 00:05:28,079 Por cierto, los ficheros de error y acceso los configuraremos para cada host virtual, pero por defecto están impuestos. 29 00:05:28,079 --> 00:05:44,899 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. 30 00:05:44,900 --> 00:06:12,180 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. 31 00:06:12,180 --> 00:06:21,639 Y esto sería, sencillamente, entonces vamos a ver qué es lo que tenemos aquí en SitesAvailable y SitesEnabled. 32 00:06:24,560 --> 00:06:26,860 En los sitios disponibles tenemos un default. 33 00:06:28,879 --> 00:06:32,220 Voy a poner aquí en este caso menos L, SitesEnabled. 34 00:06:32,780 --> 00:06:39,180 Tenemos también ese otro default que es un enlace suave al sitio disponible. 35 00:06:39,180 --> 00:06:50,079 Entonces vamos a ver qué es lo que nos viene por defecto. Un fichero que es cortito, pero simplemente tiene muchos comentarios. 36 00:06:51,900 --> 00:07:02,480 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. 37 00:07:02,480 --> 00:07:04,360 aquí no existe tal fichero 38 00:07:04,360 --> 00:07:06,660 si nosotros aquí indicamos simplemente 39 00:07:06,660 --> 00:07:08,360 otro puerto, el 8080 40 00:07:08,360 --> 00:07:11,000 Nginx ya lo va a abrir por defecto 41 00:07:11,000 --> 00:07:12,860 no hace falta tocar nada más 42 00:07:12,860 --> 00:07:14,759 y esta segunda línea es también 43 00:07:14,759 --> 00:07:16,939 el puerto 80 pero en IPv6 44 00:07:16,939 --> 00:07:18,600 esto sería el equivalente a decir 45 00:07:18,600 --> 00:07:21,160 la dirección que tendríamos en IPv4 46 00:07:21,160 --> 00:07:23,180 que es la 0.0.0.0 47 00:07:23,180 --> 00:07:24,939 para que lea 48 00:07:24,939 --> 00:07:26,420 de cualquier cliente 49 00:07:26,420 --> 00:07:28,400 conexiones de cualquier cliente 50 00:07:28,400 --> 00:07:30,500 en IPv6 es de todos ceros 51 00:07:30,500 --> 00:07:32,899 se pone como dos puntos, dos puntos 52 00:07:32,899 --> 00:07:34,600 entonces para separar eso 53 00:07:34,600 --> 00:07:36,819 del separador del puerto 54 00:07:36,819 --> 00:07:38,459 que es estos dos puntos, se utilizan 55 00:07:38,459 --> 00:07:40,379 los corchetes planos, ¿vale? 56 00:07:40,519 --> 00:07:42,860 simplemente, pues abre el puerto 80 57 00:07:42,860 --> 00:07:44,220 en IPv6 también 58 00:07:44,220 --> 00:07:46,560 ¿vale? configuración SSL para 59 00:07:46,560 --> 00:07:48,779 HTTPS, la vamos a 60 00:07:48,779 --> 00:07:50,600 dejar de momento, tenemos 61 00:07:50,600 --> 00:07:52,500 el document root, en este caso simplemente 62 00:07:52,500 --> 00:07:54,720 poner el root y el directorio 63 00:07:54,720 --> 00:07:57,019 nombres de dominio 64 00:07:57,019 --> 00:07:57,980 lo pondríamos aquí 65 00:07:57,980 --> 00:08:00,120 y luego pues directivas 66 00:08:00,120 --> 00:08:04,500 location y ya estaría 67 00:08:04,500 --> 00:08:08,040 aquí nos deja el caso también de una configuración 68 00:08:08,040 --> 00:08:12,340 sin comentar y como más concreta, entonces yo tengo un par de 69 00:08:12,340 --> 00:08:16,019 ficheros ya puestos y creados 70 00:08:16,019 --> 00:08:19,660 los voy a mover, simplemente los tengo en 71 00:08:19,660 --> 00:08:23,699 mi directorio de inicio, en el home, entonces voy a moverlos 72 00:08:23,699 --> 00:08:34,100 al, perdón, etc, nginx, a los sitios disponibles. 73 00:08:35,360 --> 00:08:37,159 Más que moverlos, los voy a copiar. 74 00:08:40,019 --> 00:08:46,580 ¿Vale? Y me voy a ir a esos, a los sitios habilitados. 75 00:08:46,580 --> 00:08:52,100 ¿Vale? Yo los tengo, los tengo como disponibles y los voy a habilitar. 76 00:08:52,100 --> 00:09:04,139 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. 77 00:09:04,139 --> 00:09:22,939 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. 78 00:09:22,940 --> 00:09:28,320 y aquí tengo estos dos 79 00:09:28,320 --> 00:09:30,060 picheros, vamos a ver que es lo que 80 00:09:30,060 --> 00:09:31,120 que es lo que tiene 81 00:09:31,120 --> 00:09:36,020 vale, en alfa he puesto la configuración 82 00:09:36,020 --> 00:09:38,140 más sencilla que podemos 83 00:09:38,140 --> 00:09:40,160 tener, tengo ya 84 00:09:40,160 --> 00:09:41,260 puesto este 85 00:09:41,260 --> 00:09:44,320 nombre de dominio y simplemente 86 00:09:44,320 --> 00:09:45,900 el document root 87 00:09:45,900 --> 00:09:47,260 voy a comprobar el nombre de dominio 88 00:09:47,259 --> 00:09:52,960 aquí tenemos 89 00:09:52,960 --> 00:09:54,279 esta sería la IP 90 00:09:54,279 --> 00:09:56,980 sé que es esta que le acabo de poner 91 00:09:56,980 --> 00:09:58,259 y 92 00:09:58,259 --> 00:10:00,639 y bueno 93 00:10:00,639 --> 00:10:02,919 aquí en alfa simplemente 94 00:10:02,919 --> 00:10:04,899 he dejado un fichero 95 00:10:04,899 --> 00:10:08,500 sencillo, ¿vale? Entonces 96 00:10:08,500 --> 00:10:11,179 cosas que tenemos 97 00:10:11,179 --> 00:10:12,899 que hacer, primero comprobar 98 00:10:12,899 --> 00:10:14,939 si la nueva configuración que hemos dejado 99 00:10:14,939 --> 00:10:16,899 es correcta, para eso 100 00:10:16,899 --> 00:10:29,759 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? 101 00:10:30,299 --> 00:10:44,419 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. 102 00:10:44,419 --> 00:11:06,419 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. 103 00:11:06,419 --> 00:11:18,879 ¿Vale? Y si esto está funcionando, pues vamos a ver si las pruebas las consigo hacer de forma exitosa. 104 00:11:18,879 --> 00:11:37,259 Entonces, vamos a ver si hago una consulta a este servidor. He escrito mal. Esto es DuckDNS. 105 00:11:37,259 --> 00:11:43,799 ¿Vale? Y a ver, quizás aquí hay alguna cuestión 106 00:11:43,799 --> 00:11:46,899 Vale, ha tardado un poquito, será algo de AWS 107 00:11:46,899 --> 00:11:49,759 Esto es lo que me ha devuelto, ¿vale? 108 00:11:49,840 --> 00:11:51,080 El S-Index 109 00:11:51,080 --> 00:11:54,159 Si quiero verlo un poco verbose para ver las cabeceras 110 00:11:54,159 --> 00:11:58,200 Que al final esto es bastante importante 111 00:11:58,200 --> 00:12:00,980 Veo las cabeceras que el cliente envía al servidor 112 00:12:00,980 --> 00:12:02,100 Y las de respuesta 113 00:12:02,100 --> 00:12:05,319 Lo que me importa es ver el código de estado 114 00:12:05,319 --> 00:12:06,419 ¿Vale? 200 115 00:12:06,419 --> 00:12:23,419 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. 116 00:12:23,419 --> 00:12:51,579 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. 117 00:12:51,580 --> 00:13:10,720 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. 118 00:13:10,720 --> 00:13:23,300 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. 119 00:13:23,300 --> 00:13:29,100 esta directiva try files 120 00:13:29,100 --> 00:13:32,140 es propia de Nginx 121 00:13:32,140 --> 00:13:35,040 y básicamente lo que le podemos es indicar 122 00:13:35,040 --> 00:13:37,040 qué cosas queremos que pruebe 123 00:13:37,040 --> 00:13:42,240 en el document root que tengamos 124 00:13:42,240 --> 00:13:44,880 va a mostrar la URI 125 00:13:44,880 --> 00:13:48,900 la URI podéis traducirla a URL 126 00:13:48,900 --> 00:13:52,380 la URI es una generalización de una URL 127 00:13:52,379 --> 00:14:19,360 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. 128 00:14:19,360 --> 00:14:26,139 Y sobre eso aplicaría el index.html o aunque lo podamos tener modificado. 129 00:14:26,259 --> 00:14:31,879 Y si no existe, ni como fichero ni como directorio, pues entonces aquí le decimos que devuelva un mensaje de error. 130 00:14:31,980 --> 00:14:34,159 Y todo esto lo podemos personalizar, ¿vale? 131 00:14:34,360 --> 00:14:41,460 Esto lo tenéis explicado también aquí en esta web. 132 00:14:41,580 --> 00:14:44,460 Es habitual tener esta configuración. 133 00:14:46,560 --> 00:14:48,460 Pero bueno, podríamos personalizarla. 134 00:14:49,360 --> 00:15:01,580 también vale y aquí tenemos el caso de un bloque location que está dentro del anterior 135 00:15:01,580 --> 00:15:09,840 por cierto si pongo así location y una barra lo que significa es que me pidan cualquier 136 00:15:09,840 --> 00:15:15,960 cosa que comience por barra vale no únicamente el directorio raíz por eso está aquí el 137 00:15:15,960 --> 00:15:22,360 barra img está incluido dentro del anterior. En este caso, pues he utilizado esta directiva 138 00:15:22,360 --> 00:15:33,180 try files para decir, si me has pedido una imagen que comienza por barra img barra, te 139 00:15:33,180 --> 00:15:39,360 la devuelvo si existe y si esa imagen no existe, porque igual he metido la pata en el código 140 00:15:39,360 --> 00:15:45,639 y estoy diciendo que los clientes intenten descargar una imagen que no existe o algo 141 00:15:45,639 --> 00:15:47,399 así, si no existe el fichero que 142 00:15:47,399 --> 00:15:49,080 el cliente me intenta solicitar 143 00:15:49,080 --> 00:15:51,539 le devuelvo una imagen por 144 00:15:51,539 --> 00:15:53,620 defecto, ¿vale? y si por algún motivo 145 00:15:53,620 --> 00:15:55,779 me tomas la 146 00:15:55,779 --> 00:15:57,580 pata aún y no existe esta imagen 147 00:15:57,580 --> 00:15:59,360 por defecto, pues le devuelvo un error 148 00:15:59,360 --> 00:16:01,659 404, ¿vale? y esto se aplicaría 149 00:16:01,659 --> 00:16:03,559 solo a las rutas 150 00:16:03,559 --> 00:16:05,259 que me pidan que comiencen por barra 151 00:16:05,259 --> 00:16:05,840 img 152 00:16:05,840 --> 00:16:09,480 y bueno, pues también tenemos aquí 153 00:16:09,480 --> 00:16:11,460 un alias, si en algún momento he cambiado 154 00:16:11,460 --> 00:16:13,319 el nombre del directorio de 155 00:16:13,319 --> 00:16:15,319 images a img 156 00:16:15,320 --> 00:16:44,220 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? 157 00:16:44,220 --> 00:17:13,720 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? 158 00:17:13,720 --> 00:17:33,259 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. 159 00:17:33,259 --> 00:17:52,259 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. 160 00:17:52,259 --> 00:18:20,519 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. 161 00:18:20,519 --> 00:18:35,480 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. 162 00:18:35,480 --> 00:18:53,480 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. 163 00:18:53,480 --> 00:19:07,819 network de ahí viene mdn entonces voy a probar si esto funciona mdn debería devolverme 301 vale 164 00:19:07,819 --> 00:19:17,660 con ese location que es a donde me redirigiría automáticamente un cliente web de escritorio y 165 00:19:17,660 --> 00:19:22,440 Y si pongo también mdn finalizado en barra, pues debería funcionar igual. 166 00:19:25,080 --> 00:19:31,779 Así que bueno, esto es un poco la introducción así breve que quería comentar. 167 00:19:31,779 --> 00:19:45,779 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. 168 00:19:45,779 --> 00:19:48,660 ejemplos y situaciones 169 00:19:48,660 --> 00:19:50,379 que pueden aparecer 170 00:19:50,379 --> 00:19:52,819 así que nada 171 00:19:52,819 --> 00:19:54,579 hasta aquí lo dejo por el momento 172 00:19:54,579 --> 00:19:54,819 venga