Cree hosts virtuales, directorios de protección de contraseña y certificados SSL utilizando el servidor web nginx en Arch Linux

Cree hosts virtuales, directorios de protección de contraseña y certificados SSL utilizando el servidor web nginx en Arch Linux

El artículo anterior de Arch Linux 'lemp' acaba de cubrir cosas básicas, desde la instalación de servicios de red (NGINX, MySQL Database y PhpMyAdmin) y configure la seguridad mínima requerida para MySQL Server y PhpMyAdmin.

Configuraciones útiles de Nginx en Arch Linux

Este tema está estrictamente relacionado con la instalación anterior de LEMP en Arch Linux y lo guiará a través de la configuración de configuraciones más complejas para LEMP Stack, especialmente Nginx Configuraciones del servidor web, como crear Hosts virtuales, usar Directorios protegidos con contraseña, crear y configurar Capa de enchufes seguros http, Http inseguro redireccionamiento a Https y también le presentará algunos scripts de bash útiles que aliviarán el trabajo en la activación de hosts virtuales y generar Certificado y claves SSL.

Requisitos

Instale lemp con base de datos Mariadb en Arch Linux

Paso 1: Habilitar hosts virtuales en nginx

Uno de los métodos más simples para habilitar Hosts virtuales esta usando incluir declaraciones en el archivo de configuración Nginx principal, lo que hace que el trabajo de configuraciones adicionales sea más simple y eficiente porque puede crear archivos simples para cada nuevo host y mantener el archivo de configuración principal más limpio.

Este enfoque funciona de la misma manera que en Servidor web de Apache, Lo primero que debe hacer es especificar el nuevo Uri ruta donde nginx debería leer las directivas de archivo.

1. Entonces, abierto nginx.confusión Archivo principal ubicado en /etc/nginx/ ruta del sistema y en la parte inferior, antes del último soporte rizado ""Agregue la ruta donde residirán los archivos de configuración del host virtual futuros.

$ sudo nano/etc/nginx/nginx.confusión

En el fondo agregar la siguiente declaración.

incluir/etc/nginx/sites-habilitado/*.conf;
Habilitar hosts virtuales en nginx

Esta directiva le dice a NGINX que debería leer todos los archivos que se encuentran en /etc/nginx/sitios habilitado/ que termina con un .confusión extensión.

2. El siguiente paso es crear sitios habilitados directorio y otro, llamado sitios disponibles, donde almacena todos sus archivos de configuración de hosts virtuales.

$ sudo mkdir/etc/nginx/sites-disponible/etc/nginx/sitios habilitado

3. Ahora es el momento de crear un nuevo host virtual. Este ejemplo utilizará la dirección IP del sistema como nombre de host virtual, por lo que cree un nuevo archivo llamado Nombre-IP.confusión.

sudo nano/etc/nginx/sites disponible/nombre-ip.confusión

Agregar el siguiente contenido.

## Contenido del archivo ## servidor escuchar 80; server_name 192.168.1.33; access_log/var/log/nginx/192.168.1.33.acceso.registro; ERROR_LOG/VAR/LOG/NGINX/192.168.1.33.error.registro; raíz /srv /http; ubicación / índice índice.índice HTML.índice HTM.php; autoindex on; autoindex_exact_size off; autoindex_localtime on;  ubicación /phpmyadmin reescritura ^ /* /phpmyadmin último;  ubicación ~ \ \.PHP $ #FASTCGI_PASS 127.0.0.1: 9000; (Dependiendo de su configuración de socket Php-FPM) fastcgi_pass unix:/run/php-fpm/php-fpm.calcetín; Índice FastCGI_Index.php; incluir fastcgi.conf; 
Crear un nuevo host virtual

La directiva que activa el host virtual es nombre del servidor Declaración en puerto de escucha. Además, otra directiva importante aquí es raíz Declaración de que señala el host virtual nginx para servir contenido de archivo desde /srv/http/ ruta del sistema.

4. El último paso es crear /srv/http/ directorio y hacer Nombre-IP.confusión Configuración del archivo disponible para la lectura NGINX (usando el enlace simbólico), luego reinicie Daemon para hacer que las nuevas configuraciones sean visibles.

$ sudo mkdir/srv/http/$ sudo ln -s/etc/nginx/sites-disponible/name-ip.conf/etc/nginx/sites-habilitado/$ sudo systemctl reiniciar nginx
Iniciar servidor web Nginx

5. Para verificarlo, apunte a su navegador a la dirección IP del sistema de arco y debería ver que el contenido web es diferente de http: // localhost. Aquí he agregado un pequeño script PHP que también verifica Fastcgi PHP configuraciones como en la captura de pantalla a continuación.

$ sudo nano/srv/http/info.php
## Contenido del archivo ## 
Verifique las configuraciones de FastCGI PHP

6. Otro método que me he desarrollado para habilitar o deshabilitar hosts virtuales en NGINX es más elegante y está inspirado desde Apache a2eniste guion.

Para usar este método, abra un editor de archivos y cree un nuevo archivo, llamado N2ensita, en tu $ Inicio ruta con el siguiente contenido, hágalo ejecutable, ejecutarlo con privilegios raíz y pasar como una opción para su nuevo nombre de host virtual sin .confusión Finalizar (llenar liberando para modificarlo de acuerdo con sus necesidades).

$ sudo nano n2ensite
## Contenido del archivo ## #!/bin/bash if test -d/etc/nginx/sites -disponible && test -d/etc/nginx/sites -habilitado; luego hacer eco "----------------------------------------------- "De lo contrario, mkdir/etc/nginx/sites-disponible mkdir/etc/nginx/sites-habilitado Fi disponible =/etc/nginx/sites-disponible/$ 1.conf Encabled =/etc/nginx/sites-habilitado/sitio = "ls/etc/nginx/sites-disponible/" if ["$#" != "1"]; luego echo "Use script: n2ensite virtual_site" echo -e "\ navailable hosts virtual: \ n $ sitio" Salir 0 de lo contrario si prueba -e $ disponible; entonces sudo ln -s $ disponible $ habilitado else echo -e "$ disponible host virtual no existe! Por favor cree uno!\ n $ sitio "Salir 0 fi si prueba -e $ habilitado/$ 1.conf; luego hacer eco "éxito!! Ahora reinicie el servidor Nginx: sudo systemCtl reiniciar nginx "else eco -e" host virtual $ disponible no existe!\ nlease Ver hosts virtuales disponibles: \ n $ sitio "Salida 0 fi Fi
Use el script A2eniste

Hazlo ejecutable y ejecutarlo como programa.

$ sudo chmod +x n2ensite $ sudo ./n2ensite your_virtual_host
Habilitar el host virtual

7. Para deshabilitar hosts virtuales cree un nuevo n2dissite Archivo con el siguiente contenido y aplique la misma configuración que la anterior.

$ sudo nano n2dissite
## Contenido del archivo ## #!/bin/bash dispone =/etc/nginx/sites-habilitado/$ 1.conf Enshabled =/etc/nginx/sites-habilitado sitio = "ls/etc/nginx/sites-habilitado/" if ["$#" != "1"]; luego echo "Usar script: n2dissite virtual_site" echo -e "\ navailable hosts virtual: \ n $ sitio" salida 0 de lo contrario si prueba -e $ disponible; entonces sudo rm $ disponible else echo -e "$ disponible host virtual no existe! Que sale!"Salir 0 fi si prueba -e $ habilitado/$ 1.conf; luego hacer eco "error!! No se pudo eliminar el host virtual $ disponible!"más eco -e" éxito! $ disponible ha sido eliminado!\ nlease reinsart nginx: sudo systemctl reiniciar nginx "salida 0 fi Fi
Deshabilitar hosts virtuales

8. Ahora puede usar estos dos scripts para habilitar o deshabilitar cualquier host virtual, pero si desea aplicarlo como comandos de todo el sistema, simplemente copie ambos scripts a /usr/local/bin/ y luego puedes usarlo sin especificar la ruta.

$ sudo cp n2ensite n2dissite/usr/local/bin/
Use el script N2SITE para habilitar o deshabilitar hosts

Paso 2: Habilite SSL con hosts virtuales en Nginx

Ssl (Asegurar la capa de enchufes) es un protocolo diseñado para cifrar conexiones HTTP a través de redes o internet, que hacen que el flujo de datos se transmitiera a través de un canal seguro utilizando claves de criptografía simétricas/asimétricas y se proporciona en Arch Linux por el paquete OpenSSL.

$ sudo Pacman -s OpenSSL
Instalar el paquete OpenSSL

9. Para habilitar las conexiones HTTPS con Nginx, la primera parte que debe hacer es generar claves de hosts virtuales. Además, para simplificar las cosas, he desarrollado un pequeño scripts que genera automáticamente claves criptográficas en /etc/nginx/ssl ruta del directorio, utilizando el nombre del host virtual como nombres de claves.

Crea un archivo llamado nginx_gen_ssl y agregar el siguiente contenido.

$ sudo nano nginx_gen_ssl
## Contenido del archivo ## #!/bin/bash mkdir/etc/nginx/ssl cd/etc/nginx/ssl echo -e "Ingrese su host virtual fqdn: \ nthis generará el nombre predeterminado para el certificado NGINX SSL!"Leer certificador OpenSsl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits: 2048 -out $ cert.clave chmod 600 $ cert.clave OpenSSL req -New -Key $ cert.clave -Out $ cert.CSR OpenSSL x509 -req -days 365 -in $ cert.CSR -SignKey $ cert.clave -Out $ cert.CRT ECHO -E "Se ha generado el certificado $ certificador!\ nlease enlazarlo al sitio web disponible de Nginx SSL!"LS -ALL/ETC/NGINX/SSL EXIT 0
Generar claves de hosts virtuales

10. Una vez que se haya creado el script permisos de ejecución de aperturas, ejecutelo y proporcione sus opciones de certificado, la más importante es Nombre común campo (agregue el nombre de dominio oficial aquí) y deje contraseña y campos de empresa opcionales en blanco.

$ sudo chmod +x nginx_gen_ssl $ sudo ./nginx_gen_ssl
Establecer permisos de ejecución Generar teclas SSL

Al final de la tarea de generación de claves, se mostrará un listado con todas las claves disponibles en el directorio NGINX SSL.

Lista todas las claves disponibles

Además, si desea que este script se use como comando de sistema, copie o muévelo a /usr/local/bin/.

$ sudo mv nginx_gen_ssl/usr/local/bin

11. Después de haber generado las teclas necesarias para el host virtual NGINX SSL, es hora de crear un archivo de configuración del host virtual SSL. Utilice la misma dirección IP del sistema para el host virtual como se indicó anteriormente en nombre del servidor directiva pero, cambie ligeramente el nombre del archivo de host virtual al agregar SSL antes .confusión, Para recordarle que este archivo representa Nombre-IP Host virtual SSL.

$ sudo nano/etc/nginx/sites-avalabe/name-ip-ssl.confusión

En este archivo de cambio escuchar declaración de puerto a 443 SSL y proporcionar rutas de archivos de clave SSL y certificado con las creadas anteriormente para verse en extracto a continuación.

## Contenido del archivo ## servidor escuchar 443 ssl; server_name 192.168.1.33; ssl_certificate/etc/nginx/ssl/192.168.1.33.CRT; ssl_certificate_key/etc/nginx/ssl/192.168.1.33.llave; ssl_session_cache compartido: ssl: 1m; ssl_session_timeout 5m; SSL_CIPHERS ALTO:!Anull:!MD5; ssl_prefer_server_ciphers on; access_log/var/log/nginx/192.168.1.33-SSL.acceso.registro; ERROR_LOG/VAR/LOG/NGINX/192.168.1.33-SSL.error.registro; raíz /srv /http; ubicación / índice índice.índice HTML.índice HTM.php; autoindex on; autoindex_exact_size off; autoindex_localtime on;  ubicación /phpmyadmin reescritura ^ /* /phpmyadmin último;  ubicación ~ \ \.PHP $ #FASTCGI_PASS 127.0.0.1: 9000; (Dependiendo de su configuración de socket Php-FPM) fastcgi_pass unix:/run/php-fpm/php-fpm.calcetín; Índice FastCGI_Index.php; incluir fastcgi.conf; 
Crear hosts virtuales SSL

12. Después de que se haya creado el archivo, use N2ensita guión o LN línea de comando para activarlo (crea un enlace simbólico de archivo en sitios habilitados directorio), luego reinicie el demonio nginx para aplicar la configuración.

$ sudo ./n2ensite name-ip-ssl o $ sudo ln -s/etc/nginx/sites-disponible/name-ip-ssl.conf/etc/nginx/sites-habilitado/$ sudo systemctl reiniciar nginx
Hosts virtuales SSL activos

13. Nuevamente apunte a tu navegador a URL de arco IP Pero esta vez usando el protocolo HTTPS - https: // 192.168.1.33 en mi sistema y un Conexión sin confianza Debe aparecer un error de seguridad ( Agregar y confirmar la excepción de seguridad para ir más allá en la página).

Verificar la conexión HTTPS Verificar contenido de host virtual Verificar la configuración de PHP

Como puede ver ahora, su host virtual Nginx sirve el mismo contenido que el anterior Nombre-IP host pero esta vez usando una conexión segura HTTP.

Paso 3: Acceda a PhPMyAdmin a través del host virtual

Si el host virtual está habilitado en NGINX, ya no tenemos acceso a http: // localhost Contenido de la ruta (localhost generalmente sirve contenido utilizando la dirección IP de bucleback o la dirección IP del sistema si no está configurada de otra manera) porque hemos utilizado el sistema de arco IP como nombre del servidor Entonces nuestra ruta de contenido ha cambiado.

14. El método más simple para obtener acceso a Phpmyadmin a través de la web es crear un enlace simbólico entre /usr/share/webapps/phpmyadmin/ ruta y nuestra nueva ruta de host virtual definida (/srv/http).

$ sudo ln -s/usr/share/webapps/phpmyadmin//srv/http/

15. Después de ejecutar el comando anterior, actualice su página y verá una nueva carpeta PhPMyadmin aparece, si autointex Declaración habilitada en el host virtual NGINX o apunte su URL directamente a la carpeta PhPMyAdmin https: // arch_ip/phpmyadmin.

dieciséis. Si desea desinfectar la cadena PhPMyAdmin en el navegador Edite sus archivos de hosts virtuales y agregue el siguiente contenido en el bloque del servidor.

ubicación /phpmyadmin reescritura ^ /* /phpmyadmin último; 
Acceder a phpmyadmin a través del host virtual

Paso 4: Habilite el directorio protegido con contraseña en NGINX

A diferencia de Apache, Nginx usa Httpauthbasic módulo para habilitar Directorios protegidos con contraseña pero no proporciona ninguna herramienta para crear un .htpasswd archivo.

17. Para lograr la protección de la contraseña de directorio con Nginx en Arch Linux Instale el servidor web Apache y use sus herramientas para generar un cifrado .htaccess archivo.

$ sudo Pacman -S Apache

18. Después de haber instalado Apache, cree un nuevo directorio en /etc/nginx/ nombrado intuitivamente passwd donde .htpasswd el archivo se almacenará y usará htpasswd ordenar con -C activar primero el usuario agregado para generar archivo, entonces si desea agregar más usuarios usar htpasswd sin -C cambiar.

$ sudo mkdir/etc/nginx/passwd $ sudo htpasswd -c/etc/nginx/passwd/.htpasswd first_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd Second_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd Third_user
Habilitar el directorio protegido de contraseña

19. Con el fin de proteger nombre-ip-ssl Raíz host virtual /srv/http/ Ruta servida con todas sus subpoletas y archivos debajo agregue las siguientes instrucciones dentro de su bloque de servidor host virtual en la directiva raíz y apunte a absoluto .htpasswd ruta de archivo.

auth_basic "Sitio web restringido"; auth_basic_user_file/etc/nginx/passwd/.htpasswd;
Configuración restringida del sitio web

20. Después de reiniciar el servicio Nginx, actualizar la página y una Autenticacion requerida La ventana emergente debería parecer exigente para sus credenciales.

Autenticacion requerida

Ahora ha habilitado con éxito NGINX Directorios protegidos con contraseña Pero tenga en cuenta que al mismo tiempo se instala el servidor web Apache en su sistema, así que asegúrese de que permanezca deshabilitado y, por cualquier medio, no lo inicie porque puede conducir a puertos en conflicto con Nginx.

Paso 5: redirige HTTP a HTTPS en Nginx

21. Si desea que los navegadores redirigan automáticamente todas las solicitudes HTTP inseguras al protocolo HTTPS abierto y editen usted no SSL Host virtual y agregue la siguiente instrucción en nombre del servidor directiva.

Reescribir ^ https: // $ server_name $ request_uri? permanente;
Redirigir http a https

Todas las configuraciones presentadas en este artículo se realizan bajo un Arch Linux El sistema que actúa como servidor, pero la mayoría de ellos, especialmente aquellos con respecto a los archivos de configuración NGINX, están disponibles en la mayoría de los sistemas Linux con ligeramente diferencias.