Table des matières
Installation du serveur Web nginx
Cette page détaille la mise en place du serveur Web nginx sous Fedora.
Il faut avoir les droits administrateur (root) pour pouvoir effectuer les différentes manipulations.
Choix des paquets
# dnf list nginx* [...] Paquets disponibles nginx.x86_64 nginx-all-modules.noarch nginx-filesystem.noarch nginx-mimetypes.noarch nginx-mod-http-geoip.x86_64 nginx-mod-http-image-filter.x86_64 nginx-mod-http-perl.x86_64 nginx-mod-http-xslt-filter.x86_64 nginx-mod-mail.x86_64 nginx-mod-stream.x86_64 # dnf install nginx
La première commande recherche l'ensemble des paquets contenant le nom nginx. Quant à la seconde, elle l'installe (ainsi que ses dépendences, notamment gperftools-libs, nginx-filesystem et nginx-mimetypes).
La gestion des daemons (services)
Fedora utilise systemd, les services sont gérés à l'aide de la commande systemctl
.
Pour savoir si le serveur est en fonctionnement :
# systemctl is-active nginx.service inactive
Pour démarrer le serveur :
# systemctl start nginx.service
Pour redémarrer un service, par exemple, après avoir modifié le fichier de configuration, on utilise le paramètre restart. Pour l'arrêter c'est l'option stop.
Si on souhaite activer automatiquement un service, il faut utiliser le paramètre enable.
# systemctl enable nginx.service
Configuration du serveur
Le fichier de configuration global (nginx.conf
) est situé dans le répertoire /etc/nginx
. Vous pouvez consulter la page dédiée.
L'accès au répertoire ~/public_html
Fedora utilise SELinux (Security-Enhanced Linux), et certaines politiques de contrôle d'accès sont désactivées.
Pour lister toutes les authorisations getsebool -a
. Dans notre cas, on doit rechercher celles qui commencent par httpd_.
getsebool -a | grep httpd [...] httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_graceful_shutdown --> on httpd_manage_ipa --> off httpd_mod_auth_ntlm_winbind --> off httpd_mod_auth_pam --> off httpd_read_user_content --> off httpd_run_ipa --> off httpd_run_preupgrade --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_sys_script_anon_write --> off httpd_tmp_exec --> off httpd_tty_comm --> off httpd_unified --> off httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_use_sasl --> off httpd_verify_dns --> off
Les deux fonctions qui nous intéressent sont :
- httpd_enable_homedirs
- httpd_read_user_content
Donc nous allons les activer :
# setsebool -P httpd_enable_homedirs on # setsebool -P httpd_read_user_content on
On peut maintenant créer le dossier :
mkdir ~/public_html
Ainsi, si on applique la commande matchpathcon
on obtient ceci :
matchpathcon public_html/ public_html unconfined_u:object_r:httpd_user_content_t:s0
C'est ce que nous voulons. Si ce n'est pas le cas, il faut utiliser la commande semanage
.
# semanage fcontext -a -t httpd_user_content_t '~/public_html(/.*)?'
Tout ce qui sera dans ce dossier aura par la suite le même « contexte » (à savoir httpd_user_content_t).
On modifie la configuration pour rajouter cette fonctionnalité. On constate que l'on a une erreur 403, en fait, cela provient de nginx.
<note>
Par défaut le répertoire /home/…/
a comme permission, 700. Cela veut dire que seul le propriétaire a tous les droits dans ce répertoire et personne d'autre. Par conséquent l'utilisateur du serveur n'a pas les droits pour accéder aux fichiers situés dans /home/…/public_html/
.
</note>
Pour résoudre ce problème, il existe différentes solutions (dans la plupart des cas, on diminue la sécurité de notre système).
Pour mes besoins, (j'utilise cet ordinateur en tant que station de travail) le serveur est uniquement accessible en local). J'ai décidé de changer l'utilisateur qui exécute nginx, via la directive user.
[...] user olivierd; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; [...]