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 :

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;
[...]