Créez des hôtes virtuels, des répertoires de mot de passe Protéger et des certificats SSL à l'aide de «Nginx Web Server» dans Arch Linux

Créez des hôtes virtuels, des répertoires de mot de passe Protéger et des certificats SSL à l'aide de «Nginx Web Server» dans Arch Linux

L'article précédent Arch Linux 'LEMP' vient de couvert des trucs de base, de l'installation des services réseau (NGINX, MySQL Database et PhpMyAdmin) et configurer une sécurité minimale requise pour MySQL Server et PhpMyAdmin.

Configurations Nginx utiles sur Arch Linux

Ce sujet est strictement lié à l'ancienne installation de LEMP sur Arch Linux et vous guidera à travers la définition de configurations plus complexes pour la pile LEMP, en particulier Nginx Configurations de serveurs Web, comme la création Hôtes virtuels, utiliser Répertoires protégés par mot de passe, créer et configurer Couche de sockets sécurisés HTTP, Http insécurité redirige vers Https et vous présentera également des scripts bash utiles qui faciliteront le travail sur l'activation des hôtes virtuels et généreront Certificat et clés SSL.

Exigences

Installez LEMP avec la base de données MARIADB dans Arch Linux

Étape 1: Activer les hôtes virtuels sur Nginx

L'une des méthodes la plus simples pour activer Hôtes virtuels utilise inclure Instructions sur le fichier de configuration principal Nginx, ce qui rend le travail de configurations supplémentaires plus simples et plus efficaces car vous pouvez créer des fichiers simples pour chaque nouvel hôte et garder le nettoyant de fichier de configuration principale.

Cette approche fonctionne de la même manière que sur Serveur Web Apache, La première chose que vous devez faire est de spécifier le nouveau Uri chemin où Nginx doit lire les directives de fichiers.

1. Alors, ouvert nginx.confli Fichier principal situé sur / etc / nginx / Chemin du système et en bas, avant le dernier support bouclé ""Ajoutez le chemin d'accès où les futurs fichiers de configuration d'hôte virtuel résideront.

$ sudo nano / etc / nginx / nginx.confli

En bas Ajouter une instruction suivante.

include / etc / nginx / sites compatible / *.conf;
Activer les hôtes virtuels sur Nginx

Cette directive indique à nginx qu'elle devrait lire tous les fichiers trouvés dans / etc / nginx / sites compatible / qui se termine par un .confli extension.

2. L'étape suivante consiste à créer compatible avec les sites Le répertoire et un autre, appelé les sites disponibles, où vous stockez tous vos fichiers de configuration d'hôtes virtuels.

$ sudo mkdir / etc / nginx / sites-disponible / etc / nginx / sites compatible

3. Il est maintenant temps de créer un nouvel hôte virtuel. Cet exemple utilisera l'adresse IP système comme nom d'hôte virtuel, alors créez un nouveau fichier nommé nom-ip.confli.

sudo nano / etc / nginx / sites-disponible / name-ip.confli

Ajouter le contenu suivant.

## Contenu de fichier ## Server écouter 80; server_name 192.168.1.33; Access_log / var / log / nginx / 192.168.1.33.accès.enregistrer; error_log / var / log / nginx / 192.168.1.33.erreur.enregistrer; root / srv / http; Emplacement / Index Index.index html.index HTM.PHP; AutoIndex sur; autoIndex_Exact_Size OFF; autoIndex_Localtime sur;  Emplacement / PhpMyAdmin Rewrite ^ / * / phpMyAdmin Last;  Emplacement ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Selon votre configuration de socket PHP-FPM) FastCGI_PASS UNIX: / run / php-fpm / php-fpm.chaussette; Index FastCGI_INDEX.PHP; Inclure FastCGI.conf; 
Créer un nouvel hôte virtuel

La directive qui active l'hôte virtuel est nom du serveur déclaration sous le port d'écoute. En outre, une autre directive importante ici est racine instruction qui pointe l'hôte virtuel nginx pour servir le contenu du fichier à partir de / srv / http / chemin du système.

4. La dernière étape consiste à créer / srv / http / répertoire et faire nom-ip.confli Configuration du fichier disponible pour la lecture de Nginx (en utilisant un lien symbolique), puis redémarrez le démon pour rendre les nouvelles configurations visibles.

$ sudo mkdir / srv / http / $ sudo ln -s / etc / nginx / sites-disponible / name-ip.conf / etc / nginx / sites compatible / $ sudo systemctl redémarrer nginx
Démarrer le serveur Web Nginx

5. Pour le vérifier, pointez votre navigateur pour arcter l'adresse IP du système et vous devriez voir que le contenu Web est différent de http: // localhost. Ici, j'ai ajouté un petit script PHP qui vérifie également Fastcgi php configurations comme dans la capture d'écran ci-dessous.

$ sudo nano / srv / http / info.php
## Contenu de fichier ## 
Vérifiez les configurations FASTCGI PHP

6. Une autre méthode que j'ai développée pour activer ou désactiver les hôtes virtuels sur Nginx est plus élégant et il est inspiré d'Apache a2eniste scénario.

Pour utiliser cette méthode, ouvrez un éditeur de fichiers et créez un nouveau fichier, appelé n2ensite, Sur ton $ Home Chemin avec le contenu ci-dessous, faites-le exécutable, exécutez-le avec des privilèges racine et passez en option à votre nouveau nom d'hôte virtuel sans .confli fin (remplissez libre pour le modifier en fonction de vos besoins).

$ sudo nano n2ensite
## Contenu de fichier ## #!/ bin / bash si test -d / etc / nginx / sites-disponible && test -d / etc / nginx / sites compatible; Puis écho "----------------------------------------------- "Else mkdir / etc / nginx / sites-disponible mkdir / etc / nginx / sites compatible fi.Avo).confied = / etc / nginx / sites-compatible / site = "ls / etc / nginx / sites-disponible /" if ["$ #" != "1"]; puis écho "Utiliser le script: n2ensite virtual_site" echo -e "\ hosts virtuels navalables: \ n $ site" exit 0 else if test -e $ disponible; alors sudo ln -s $ disponible $ activé else echo -e "$ disponible hôte virtuel n'existe pas! Veuillez en créer un!\ n $ Site "Exit 0 fi si test -e $ activé / 1 $.conf; Puis écho "Succès!! Redémarrez maintenant le serveur Nginx: sudo systemctl redémarrer nginx "else echo -e" hôte virtuel $ disponible n'existe pas!\ nPlease Voir les hôtes virtuels disponibles: \ n $ Site "Exit 0 fi fi
Utiliser le script a2eniste

Faites-le exécutable et exécutez-le comme le spectacle.

$ sudo chmod + x n2ensite $ sudo ./ n2ensite your_virtual_host
Activer l'hôte virtuel

7. Pour désactiver les hôtes virtuels, créez un nouveau n2dissite fichier avec le contenu suivant et appliquer les mêmes paramètres que ci-dessus.

$ sudo nano n2dissite
## Contenu de fichier ## #!/ bin / bash avail = / etc / nginx / sites compatible / 1 $.confied = / etc / nginx / sites compatible site = "ls / etc / nginx / sites-compatible /" if ["$ #" != "1"]; puis écho "Utiliser le script: n2dissite virtual_site" echo -e "\ hosts virtuels navalables: \ n $ site" exit 0 else if test -e $ disponible; alors sudo rm $ vase else echo -e "$ great virtuel hôte n'existe pas! Sortant!"Exit 0 fi si test -e $ activé / 1 $.conf; puis écho à "Erreur!! Impossible de supprimer un hôte virtuel $ disponible!Le succès "echo -e"! $ la disponibilité a été supprimée!\ nplease redémarrer nginx: sudo systemctl redémarrer nginx "exit 0 fi fi
Désactiver les hôtes virtuels

8. Vous pouvez maintenant utiliser ces deux scripts pour activer ou désactiver n'importe quel hôte virtuel, mais si vous souhaitez l'appliquer en tant que commandes à large / usr / local / bin / Et puis vous pouvez l'utiliser sans spécifier le chemin.

$ sudo cp n2ensite n2dissite / usr / local / bin /
Utilisez le script n2ensite pour activer ou désactiver les hôtes

Étape 2: Activer SSL avec des hôtes virtuels sur Nginx

SSL (Calque de sockets sécurisé) est un protocole conçu pour chiffrer les connexions HTTP sur les réseaux ou Internet, qui font que le flux de données est transmis sur un canal sécurisé en utilisant des clés de cryptographie symétrique / asymétrique et est fourni dans Arch Linux par package OpenSSL.

$ sudo pacman -s openssl
Installer le package OpenSSL

9. Pour activer les connexions HTTP. De plus, pour simplifier les choses, j'ai développé un petit script qui génère automatiquement des clés cryptographiques sur / etc / nginx / ssl Chemin de répertoire, en utilisant la dénomination de l'hôte virtuel comme noms de clés.

Créer un fichier nommé nginx_gen_ssl et ajouter le contenu suivant.

$ sudo nano nginx_gen_ssl
## Contenu de fichier ## #!/ bin / bash mkdir / etc / nginx / ssl cd / etc / nginx / ssl echo -e "Entrez votre hôte virtuel fqdn: \ nthis générera le nom par défaut du certificat nginx ssl!"Read cert OpenSSL Genpkey -Algorithm RSA -pkeyopt rsa_keygen_bits: 2048 -out $ Cert.CLÉ CHMOD 600 $ CERT.Key OpenSSL REQ -NEW -KEY $ CERT.Key -out $ Cert.CSR OpenSSL X509 -req -Days 365 -in $ Cert.CSR -SIGNKEY $ CERT.Key -out $ Cert.CRT ECHO -E "Le certificat $ CERT a été généré!\ nplease le lier au site Web disponible Nginx SSL!"LS -all / etc / nginx / ssl exit 0
Générer des touches d'hôtes virtuelles

dix. Une fois le script créé, ajoutez des autorisations d'exécution, exécutez-la et fournissez vos options de certificat, la plus importante étant Nom commun Champ (ajouter le nom de domaine officiel ici) et laisser le mot de passe et les champs d'entreprise facultatifs vides.

$ sudo chmod + x nginx_gen_ssl $ sudo ./ nginx_gen_ssl
Définir les autorisations d'exécution Générer des touches SSL

À la fin de la tâche de génération de touches, une liste avec toutes les touches disponibles dans le répertoire Nginx SSL sera affichée.

Liste toutes les touches disponibles

De plus, si vous souhaitez que ce script soit utilisé comme commande système, copiez-le ou déplacez-le vers / usr / local / bin /.

$ sudo mv nginx_gen_ssl / usr / local / bin

11. Après avoir généré des clés nécessaires à l'hôte virtuel Nginx SSL, il est temps de créer un fichier de configuration d'hôte virtuel SSL. Utilisez la même adresse IP système pour l'hôte virtuel que ci-dessus nom du serveur directive mais, modifiez légèrement le nom de fichier hôte virtuel en ajoutant SSL avant .confli, pour vous rappeler que ce fichier représente nom-ip Hôte virtuel SSL.

$ sudo nano / etc / nginx / sites-loulabe / name-ip-ssl.confli

Sur ce changement de fichier écouter déclaration du port à 443 SSL et fournissez des chemins de fichiers SSL et de clés de certificat avec ceux créés plus tôt pour ressembler à ci-dessous extrait.

## Contenu de fichier ## Server écouter 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.clé; ssl_session_cache partagée: ssl: 1m; ssl_session_timeout 5m; SSL_CIPHERS HIGH:!anull:!MD5; ssl_prefer_server_ciphers sur; Access_log / var / log / nginx / 192.168.1.33-SSL.accès.enregistrer; error_log / var / log / nginx / 192.168.1.33-SSL.erreur.enregistrer; root / srv / http; Emplacement / Index Index.index html.index HTM.PHP; AutoIndex sur; autoIndex_Exact_Size OFF; autoIndex_Localtime sur;  Emplacement / PhpMyAdmin Rewrite ^ / * / phpMyAdmin Last;  Emplacement ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Selon votre configuration de socket PHP-FPM) FastCGI_PASS UNIX: / run / php-fpm / php-fpm.chaussette; Index FastCGI_INDEX.PHP; Inclure FastCGI.conf; 
Créer des hôtes virtuels SSL

12. Une fois le fichier créé à utiliser n2ensite script ou LN ligne de commande pour l'activer (crée un lien symbolique de fichier dans compatible avec les sites répertoire), puis redémarrez le démon Nginx pour appliquer les paramètres.

$ sudo ./ n2ensite name-ip-ssl ou $ sudo ln -s / etc / nginx / sites-disponible / name-ip-ssl.conf / etc / nginx / sites compatible / $ sudo systemctl redémarrer nginx
Hôtes virtuels SSL actifs

13. Poignez à nouveau votre navigateur à URL IP arc Mais cette fois en utilisant le protocole HTTPS - https: // 192.168.1.33 sur mon système et un Connexion non fiable L'erreur de sécurité doit apparaître ( Ajouter et confirmer l'exception de sécurité pour aller plus loin à la page).

Vérifiez la connexion HTTPS Vérifiez le contenu de l'hôte virtuel Vérifiez la configuration de PHP

Comme vous pouvez maintenant le voir votre hôte virtuel Nginx sert le même contenu que nom-ip Hôte mais cette fois en utilisant une connexion sécurisée HTTP.

Étape 3: Accédez à PhpMyAdmin via l'hôte virtuel

Si l'hôte virtuel est activé sur nginx, nous n'avons plus accès à http: // localhost Contenu du chemin (LocalHost sert généralement du contenu à l'aide de l'adresse IP de Loopback ou de l'adresse IP système si elle n'est pas configurée autrement) car nous avons utilisé une IP du système Arch comme nom du serveur Donc, notre chemin de contenu a changé.

14. La méthode la plus simple pour accéder à Phpmyadmin via le Web, c'est créer un lien symbolique entre / usr / share / webapps / phpmyadmin / Chemin et notre nouveau chemin d'hôte virtuel défini (/ srv / http).

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

15. Après avoir exécuté la commande ci-dessus, actualisez votre page et vous verrez un nouveau dossier phpmyadmin auto-index Instruction activée sur l'hôte virtuel Nginx ou pointez votre URL directement dans le dossier PhpMyAdmin https: // arch_ip / phpmyadmin.

16. Si vous souhaitez désinfecter la chaîne phpmyadmin sur le navigateur, modifiez vos fichiers d'hôtes virtuels et ajoutez le contenu suivant sous bloc serveur.

Emplacement / phpMyAdmin Rewrite ^ / * / phpMyAdmin Last; 
Accéder à phpmyadmin via l'hôte virtuel

Étape 4: Activer le répertoire protégé par mot de passe sur Nginx

Contrairement à Apache, Nginx utilise Httpauthbasic module à activer Répertoires protégés par mot de passe mais ne fournit aucun outil pour créer un chiffre d'affaires .htpasswd déposer.

17. Pour obtenir une protection de mot de passe du répertoire avec Nginx sur Arch Linux, installez le serveur Web Apache et utilisez ses outils pour générer un chiffre d'affaires .htaccess déposer.

$ sudo pacman -s apache

18. Après avoir installé Apache, créez un nouveau répertoire sous / etc / nginx / nommé intuitivement passwd où .htpasswd Le fichier sera stocké et utilise htpasswd commander avec -c Allumez d'abord l'utilisateur ajouté pour générer un fichier, alors si vous souhaitez ajouter plus d'utilisateurs Utiliser htpasswd sans -c changer.

$ 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 tiers_user
Activer le répertoire protégé par mot de passe

19. Afin de protéger nom-ip-ssl Racine de l'hôte virtuel / srv / http / Chemin servi avec tous ses sous-dossiers et fichiers en dessous, ajoutez les instructions suivantes à l'intérieur de votre bloc de serveur hôte virtuel sous la directive racine et pointez-le en absolu .htpasswd chemin du fichier.

auth_basic "site Web restreint"; auth_basic_user_file / etc / nginx / passwd /.htpasswd;
Configuration du site Web restreint

20. Après avoir redémarré le service Nginx, une page de rafraîchissement et un Authentification requise La popup devrait sembler exigeant pour vos informations d'identification.

Authentification requise

Maintenant, vous avez réussi à activer nginx Répertoires protégés par mot de passe Mais sachez que le serveur Web Apache en même temps est installé dans votre système, alors assurez-vous qu'il reste désactivé et ne le démarrez en aucun cas car peut entraîner des ports en conflit avec Nginx.

Étape 5: Redirigez HTTP vers HTTPS sur Nginx

21. Si vous souhaitez que les navigateurs redirigent automatiquement toutes les demandes HTTP non sécurisées vers le protocole HTTPS ouvert et modifiez, vous êtes non-SSL Hôte virtuel et ajouter les instructions suivantes sous nom du serveur directif.

réécrire ^ https: // $ server_name $ request_uri? permanent;
Rediriger HTTP vers HTTPS

Tous les paramètres présentés sur cet article où Arch Linux Le système qui agit comme un serveur, mais la plupart d'entre eux, en particulier ceux concernant les fichiers de configurations Nginx, sont disponibles sur la plupart des systèmes Linux avec des différences légèrement.