Serveur web local
Nginx pour macOS

15 décembre 2017
(publié initialement le 5 janvier 2016 )

Cherchant une solution satisfaisante pour créer un serveur web local permettant de programmer sous macOS avec PHP et MySQL, j’ai été déçu de constater que les solutions « clés en main » étaient loin d’égaler les WAMP qui peuvent exister sous Windows.

C’était oublier qu’macOS est un système Unix, et que contrairement à Windows, il est parfaitement possible d’y créer un serveur local sur mesure avec quelques paquets.

Nous allons voir ici comment installer Nginx, PHP-FPM et MariaDB (MySQL) sous macOS High Sierra grâce au gestionnaire de paquets Homebrew.

Homebrew

HomeBrew est un gestionnaire de paquets pour macOS, qui permet d’installer facilement différentes applications Unix.

Pour l’installer, il suffit d’exécuter la commande indiquée sur le site officiel:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Si vous ne les avez pas déjà, macOS vous proposera d’installer préalablement les outils en ligne de commande Xcode.

Nginx

Bien qu’une version d’Apache soit nativement fournie avec macOS, nous nous proposons ici d’installer Nginx, particulièrement léger et facilement configurable.

Installation

Pour installer et lancer Nginx au démarrage, on utilise:

brew install nginx
sudo brew services start nginx

Bien qu’il ne faille pas utiliser sudo avc brew install, il est nécessaire de l’utiliser pour lancer Nginx afin de pouvoir l’utiliser sur le port 80.

Configuration

Nous souhaitons pouvoir stocker notre site internet dans le dossier de notre choix, et y accéder à l’URL http://localhost/. Pour cela, on édite le fichier de configuration :

nano /usr/local/etc/nginx/nginx.conf

To begin, we will have to give to Nginx the permission to access our files and avoid a nasty 403 Forbidden error. To do so, we change the first line, where <user> is your username:

Pour commencer, il va nous falloir donner à Nginx la permission d’accéder aux fichiers, pour éviter une erreur 403 Forbidden. Pour ce faire, on change la première ligne, où <user> est votre nom d’utilisateur :

user <user> staff;

Ensuite, pour ajouter un nouveau site, on ajoute une nouvelle section dans la partie http du fichier :

server {
  listen 80;
  server_name localhost;
  root /Users/<user>/Documents/chemin/vers/votre/site;
  index index.html index.htm;
}

Ensuite, nous relançons Nginx pour que les changements soient pris en compte :

sudo brew services restart nginx

PHP

Pour utiliser PHP avec Nginx, nous allons utiliser PHP-FPM. Nous allons ici utiliser PHP 7.2, mais il est facile d’obtenir d’autres versions :

brew install php72

Ensuite, on édite à nouveau le fichier de configuration :

nano /usr/local/etc/nginx/nginx.conf

On modifie la ligne commençant par index par :

index index.php index.html;

Enfin, on ajoute dans la rubrique server les lignes suivantes pour faire fonctionner PHP pour tous les fichiers ayant l’extension .php :

location ~ \.php {
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
}

Pour éviter l’erreur File not found., il faut également donner les droits d’accès à PHP-FPM. Pour cela, on édite le fichier suivant :

nano /usr/local/etc/php/7.2/php-fpm.d/www.conf

On modifie les paramètres suivants :

user = <user>
group = staff

Enfin, on redémarre Nginx pour activer ces changements, et on lance bien PHP-FPM pour éviter un 502 Bad Gateway:

sudo brew services restart nginx
sudo brew services start php72

MySQL

On installe et lance désormais MariaDB pour obtenir une base MySQL :

brew install mariadb
brew services start mariadb

Enfin, on finalise l’installation en choisissant un mot de passe root pour MySQL :

mysql_secure_installation

Et voici une installation MAMP idéale!