Este tutorial muestra cómo puede usar la autenticación HTTP básica con Nginx para proteger directorios con contraseña en su servidor o incluso en un sitio web completo. Este es el equivalente de Nginx a la autenticación HTTP básica en Apache con .htaccess /.htpasswd.
1 nota preliminar
Estoy usando el sitio web www.example.com aquí con la raíz del documento /var/www/www.example.com/web/ y el archivo de configuración de Nginx vhost /etc/nginx/sites-enabled/www.example.com. anfitrión El directorio que quiero proteger con contraseña es /var/www/www.example.com/web/test/.
2 Creando el Archivo de Contraseñas
Necesitamos un archivo de contraseña donde los usuarios que deberían poder iniciar sesión se enumeran con sus contraseñas (en forma cifrada). Para crear un archivo de contraseñas de este tipo, podemos usar la herramienta htpasswd de Apache o la secuencia de comandos Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.
2.1 Usando el comando htpasswd de Apache
Si desea utilizar el comando htpasswd de Apache, compruebe si existe en su sistema:
which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#
Si obtiene un resultado como el de arriba, todo está bien:htpasswd ya está instalado. Si el comando regresa sin ningún resultado, htpasswd no existe en su sistema y debe instalarlo. En Debian/Ubuntu, es parte del paquete apache2-utils que podemos instalar de la siguiente manera:
apt-get -y install apache2-utils
Quiero crear el archivo de contraseña /var/www/www.example.com/.htpasswd ahora y almacenar el usuario falko en él (puede darle al archivo de contraseña el nombre que desee, no es necesario llamarlo .htpasswd; yo simplemente lo nombré .htpasswd porque así se nombran los archivos de contraseña en Apache):
htpasswd -c /var/www/www.example.com/.htpasswd falko
Se le pedirá una contraseña para el usuario falko. Tenga en cuenta que el interruptor -c hace que el archivo se cree desde cero; si antes no existía, se creará; si existía antes, se sobrescribirá con uno nuevo y todos los usuarios del archivo anterior se perderán. Por lo tanto, si desea agregar otro usuario sin eliminar todos los usuarios existentes, use el comando htpasswd sin el modificador -c:
htpasswd /var/www/www.example.com/.htpasswd till
El último comando agrega el usuario till a /var/www/www.example.com/.htpasswd para que ahora tengamos los usuarios falko y till en él.
2.2 Uso de la secuencia de comandos de Python htpasswd.py
Si no quiere o no puede usar el comando htpasswd de Apache, puede usar la secuencia de comandos de Python desde http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.
Lo descargamos a /usr/local/bin y lo hacemos ejecutable de la siguiente manera:
cd /usr/local/bin
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py
chmod 755 /usr/local/bin/htpasswd.py
Quiero crear el archivo de contraseña /var/www/www.example.com/.htpasswd ahora y almacenar el usuario falko en él (puede darle al archivo de contraseña el nombre que desee, no es necesario llamarlo .htpasswd; yo simplemente lo nombré .htpasswd porque así se nombran los archivos de contraseña en Apache):
htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret
Reemplace falkossecret con una contraseña para el usuario falko. Tenga en cuenta que el interruptor -c hace que el archivo se cree desde cero; si antes no existía, se creará; si existía antes, se sobrescribirá con uno nuevo y todos los usuarios del archivo anterior se perderán. Por lo tanto, si desea agregar otro usuario sin eliminar todos los usuarios existentes, use el comando htpasswd.py sin el modificador -c:
htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret
El último comando agrega el usuario till a /var/www/www.example.com/.htpasswd para que ahora tengamos los usuarios falko y till en él.
3 Configuración de Nginx
Ahora que tenemos nuestro archivo de contraseña en su lugar, solo necesitamos agregarlo a nuestra configuración de vhost de Nginx en /etc/nginx/sites-enabled/www.example.com.vhost, dentro del contenedor del servidor {}.
nano /etc/nginx/sites-enabled/www.example.com.vhost
Como quiero proteger con contraseña el directorio de prueba en la raíz del documento, uso la ubicación / prueba {} aquí (para proteger con contraseña todo el sitio web, usaría la ubicación / {}):
server { listen 80; server_name www.example.com example.com; root /var/www/www.example.com/web; [...] location /test { auth_basic "Restricted"; auth_basic_user_file /var/www/www.example.com/.htpasswd; } [...] }
Vuelva a cargar Nginx después:
service nginx reload
¡Eso es todo! Ahora puede ir a su directorio de prueba en un navegador (http://www.example.com/test), y se le pedirá un nombre de usuario y una contraseña:
Si ingresa el nombre de usuario y la contraseña correctos, se le otorgará acceso:
De lo contrario, verá un mensaje de error 401 Autorización requerida:
4 Enlaces
- Nginx:http://nginx.org/
- Wiki de Nginx:http://wiki.nginx.org/
- htpasswd.py Secuencia de comandos Python:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
Acerca del autor
Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultrarrápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los principales desarrolladores de ISPConfig (desde 2000). También ha contribuido al libro de O'Reilly "Administración del sistema Linux".