NGINX, hosts virtuales
Nginx está compuesto por una serie de módulos que son controlados por directivas especificadas en el archivo de configuración.
Estas directivas se dividen en simples y de bloque.
Una
directiva simple
consiste en el nombre y los parámetros separados por espacio y terminados en punto y coma;
Una
directiva de block
tiene la misma estructura que una simple, pero en lugar de;
termina con un conjunto adicional de instrucciones entre llaves{ }
. Si una directiva de bloque contiene otras directivas dentro de llaves, se denomina contexto.
Se considera que están dentro del contexto principal aquellas directivas colocadas en el archivo de configuración fuera de cualquier contexto.
Los eventos y las directivas http residen en el contexto principal, el servidor en http y la ubicación en el servidor.
Archivos de configuración
Los archivos de configuración de Nginx se encuentran en el directorio:
y el archivo de configuración global es:
La estructura de configuración del archivo de configuración principal se muestra como sigue:
Tener en cuenta que, en Ubuntu existe una directiva de inclusión adicional:
porque el directorio /etc/nginx/sites-enabled/
almacena los enlaces simbólicos a los archivos de configuración de sitios web creados en /etc/nginx/sites-available/
para habilitar los sitios. Y el hecho de eliminar un enlace simbólico deshabilita ese sitio en particular.
El directorio donde se localizan todos los archivos de configuración de Nginx es /etc/nginx/ y dentro debemos tener en consideración /etc/nginx/sites-available, /etc/nginx/sites-enable
y el propio /etc/nginx/nginx.conf
que vimos anteriormente.
Archivo /sites-available/default
Este sería el bloque del servidor Nginx predeterminado de muestra ubicado en
/etc/nginx/conf.d/default.conf
en el sistema de prueba.
Donde:
listen: especifica el puerto en el que escucha el servidor.
server_name: define el nombre del servidor, que puede ser nombres exactos, nombres comodín o expresiones regulares.
root: especifica el directorio desde el cual Nginx servirá páginas web y otros documentos.
index: especifica los tipos de archivos de índice que se publicarán.
location: se utiliza para procesar solicitudes de archivos y carpetas específicos.
Solo de tener instalado el Nginx, si escribimos: localhost en el navegador veremos su página por defecto. Esto es:
Sirviendo contenido estático
Es de suponer que una tarea importante del servidor web es entregar archivos del tipo imágenes o páginas HTML estáticas. Vamos a implementar un ejemplo en el que, según la solicitud, los archivos se entregarán desde diferentes directorios locales /var/www/
con archivos HTML y /var/www/images
que contiene imágenes.
Hay que tener en cuenta que debemos crear nuestro contenido web en un directorio. Podemos utilizar el directorio por defecto: /var/www/
y si lo analizamos, veremos que dentro se encuentra una carpeta llamada /var/www/html
que contiene el archivo que se muestra desde el navegador: index.nginx-debian.html
cuando escribimos: localhost
en la barra de navegación.
Sitios web de prueba
En mi caso, crearé dos directorios dentro de la carpeta /var/www/
:
/var/www/example1.com
y /var/www/example2.com
Dentro de /var/www/example1.com
creamos una carpeta para las imágenes. En este caso:
/var/www/example1.com/img
de modo que tendremos una estructura como la siguiente:
El archivo index.html
es muy simple:
Para el caso de example2.com
hacemos algo similar.
Archivos de configuración en nginx
Ya tenemos dos sitios web. Ahora tenemos que crear los ficheros de configuración dentro de /etc/nginx/sites-available
:
En el archivo de configuración predeterminado default
ya se incluye un ejemplo del bloque del servidor. Se encuentra comentado pero lo podemos utilizar copiando y pegando el propio archivo default, des comentamos las líneas y adecuamos a nuestras necesidades.
Por tanto, el archivo de configuración para el sitio web example1.com
sería /etc/nginx/sites-available/example1.conf
Y similar para el caso del sitio web example2.com
sería /etc/nginx/sites-available/example2.conf
Tener en cuenta que hemos utilizado un puerto diferente para cada sitio web: el 8080 para el example1.com y el 8081 para el example2.com.
Resultado
Podremos visualizar las dos páginas web desde un equipo cliente (en mi caso Ubuntu Desktop por red interna) utilizando la IP aunque no el dominio, esto es:
Si quiero verificar los puertos abiertos en el servidor podemos hacer:
sudo netstat –tlpn | grep nginx
y nos muestra lo siguiente:
Acceso personalizado
En lugar de utilizar los archivos de registro predeterminados, podemos definir archivos de registro personalizados para diferentes sitios web.
Para restringir el acceso a un sitio web/aplicación o algunas partes del mismo, podemos configurar la autenticación HTTP básica. Esto se puede utilizar esencialmente para restringir el acceso a todo el servidor HTTP, bloques de servidores individuales o bloques de ubicación. Para ello instalamos apache2-utils
:
A continuación, mediante la utilidad htpasswd
, crearemos el archivo que almacenará nuestras credenciales de acceso (nombre de usuario/contraseña). Y como ejemplo, agreguemos el administrador de usuarios (en mi caso kirby) a esta lista. Tened en consideración que podemos agregar tantos usuarios como necesitemos.
Una vez que presione Enter, se te pedirá ingresar la contraseña del usuario:
Las opciones que vamos a utilizar son:
-c especificar el archivo de contraseña -B cifrar la contraseña.
Para mayor información acerca del funcionamiento de la herramienta htpasswd
, puedes hacer:
Luego, asignamos los permisos y la propiedad adecuados al archivo de contraseña (reemplaza el usuario y grupo por www-data
).
Se puede restringir el acceso al servidor web, un solo sitio web (usando su bloque de servidor) o un directorio o archivo específico. Se pueden usar dos directivas útiles para lograr esto:
auth_basic: activa la validación del nombre de usuario y la contraseña mediante el protocolo "Autenticación básica HTTP".
auth_basic_user_file: especifica el archivo de la credencial.
Protegiendo un directorio específico
Veamos a ver cómo proteger con contraseña el directorio /var/www/kirby.com/protected
. Dentro de la carpeta /protected he puesto el archivo index.html
para hacer la prueba.
Para ello agregamos el bloque location /protected
en el archivo de configuración kirby.com.conf:
Ahora, guardamos los cambios y reiniciamos el servicio Nginx.
o bien:
Con esto, la próxima vez que intentes acceder a ese directorio http://www.kirby.com/protected
te pedirá que ingreses las credenciales de inicio de sesión (en mi caso user: kirby
y password: la elegida).
Un inicio de sesión exitoso te permite acceder al contenido del directorio; de lo contrario, obtendrá un error de Se requiere autorización 401
.
En este ejemplo no hemos creado ningún contenido dentro del directorio protected
así que para testear correctamente el sitio deberíamos hacerlo.
Last updated
Was this helpful?