https://tssr.nolan.ovh by Flo.
#12/05/2025 update #13/05/2025

Un serveur WEP en local

WEP: Windows, Nginx (Engine-X), PHP

Introduction (trop longue)

J'ai utilisé plusieurs outils au fil des années pour dev en local en php, passant de Xampp, à Wamp et au petit dernier Laragon. Ce dernier à l'avantage de proposer l'utilisation de Nginx à défaut d'Apache.

J'utilisais une vielle version de Laragon, aujourd'hui je me décide à le mettre à jour et je constate que ce dernier est maintenant passé sous Licence. Je comprends et respecte tout à fait l'auteur du Soft qui doit y consacrer beaucoup de temps, lui même explique que l'on peut toujours utiliser la v6 si on ne souhaite pas acheter de licence.

Cela fait plus de 10ans que je fais du PHP, je suis en capacité de mettre en place un serveur Web et pourtant je suis toujours dépendant d'un soft tier pour le dev en local.

Le grand atout de ces derniers et d'automatiser un certains nombre de tâches, les certificats ssl auto-signés, l'édition du fichier host, la possibilité d'ajouter tout un tas de services: nodejs, les différentes DB, un service Mail, ils sont donc très pratique.

A l'heure actuelle, il est de plus en plus facile d'installer sous Windows NodeJS, Nginx, PHP, des exécutables sont disponibles. Alors, je me suis dis pourquoi pas tenter de se configurer un petit serveur LEMP WEP en local, avec l'aide de ChatGPT, mon expérience en déploiement de serveur Web, cela doit être faisable!

Le serveur HTTP/S

Dans un premier temps, on va mettre en place Nginx.

La doc est plutôt claire.

On a un exécutable, ce dernier s'utilise via la console et n'est pas disponible en tant que service:

  • start nginx > permet de démarrer Nginx
  • tasklist /fi "imagename eq nginx.exe" > permet de voir si les processus sont bien lancés
  • nginx -s stop > arrêt brutal
  • nginx -s quit > stop
  • nginx -s reload
  • nginx -s reopen

Pour les fichiers de conf. de chaque site (virtual host), on peut les placer où l'on veut, faut adapter la configuration en conséquence.

Les certificats auto-signés

Perso, je les place dans un sous dossier "ssl" du répertoire "nginx". Dans ce dossier, je créer le fichier localhost.cnf:

[req]
default_bits       = 2048
prompt             = no
default_md         = sha256
req_extensions     = req_ext
distinguished_name = dn

[dn]
CN = localhost

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

[ext]
subjectAltName = @alt_names

Puis, j'exécute la commande suivante:

openssl req -x509 -nodes -days 365 ^
    -newkey rsa:2048 ^
    -keyout localhost.key ^
    -out localhost.crt ^
    -config localhost.cnf ^
    -extensions ext

Alors oui ce n'est pas parfait, on a toujours l'avertissement dans le navigateur.

Un "virtual Host"

Voici un exemple de config pour un site:

server {
    listen       80;
    server_name  mon_super_site.local;
    return       301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    http2 on;
    server_name  mon_super_site.local;

    ssl_certificate     C:/username/bin/nginx/ssl/localhost.crt;
    ssl_certificate_key C:/username/bin/nginx/ssl/localhost.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root   C:/username/projects/mon_super_site/www;
    index   index.html index.php index.htm;

    location / {
        try_files $uri $uri/ =404;
        # ou on redirige tout vers l'index
        #try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

Adapter suivant les besoins.

Pour lancer Nginx, suffit de lancer l'exécutable nginx.exe dans une console.

Le fichier Host

Afin de faire fonctionner notre NDD en local il est nécessaire de modifier le fichier %SystemRoot%\System32\drivers\etc\hosts.

On indique le NDD en ajoutant une ligne au fichier: 127.0.0.1 mon-super-site.local.

Ici on voit l'intérêt de développer un soft qui automatise cette tâche pour nous.

PHP

On récupère l'archive qui va bien depuis windows.php.net

Perso, j'ai un dossier bin qui contient le répertoire nginx et un répertoire php qui contiendra les différentes versions.

php.ini

Copier l'un des deux fichier php.ini-xxx, le renommer en php.ini.

Perso j'active souvent ces extensions en dev: curl, exif, fileinfo, gd, intl, mbstring, pdo_mysl et pdo_sqlite.

Ne pas oublier d'indiquer où aller chercher ces extensions via: extension_dir = "ext"

Ne reste plus qu'à démarrer php: php-cgi.exe -b 127.0.0.1:9000 -c php.ini

On fait ainsi pour chaque version de php que l'on souhaite utiliser, bien sûre il faut indiquer un port différent à chaque fois.

Automatiser via .bat

Après avoir un peu batailler avec ChatGPT voici une première approche. Un petit script qui lance php et nginx, où l'on garde la main pour exécuter les commandes Nginx.

Et un autre pour arrêter php et Nginx.

Démarrer Php et Nginx

Voici start-nginx-php.bat:

@ECHO OFF
REM —————————————————————————
REM 0) Forcer la console en UTF-8
REM —————————————————————————
chcp 65001 >nul

REM —————————————————————————
REM 1) PHP
REM —————————————————————————
REM Démarre php-cgi.exe en mode FastCGI sur le port 9000
cd /d C:\username\bin\php\8.3.21-nts
start /B "" php-cgi.exe -b 127.0.0.1:9000 -c php.ini

REM —————————————————————————
REM 2) NGINX
REM ————————————————————————
cd /d C:\username\bin\nginx
start /B "" nginx.exe 

REM —————————————————————————
REM 3) Message et reprise de la main
REM —————————————————————————
echo.
echo ===========================================
echo  PHP et NGINX sont démarrés en arrière-plan.
echo  Tapez vos commandes NGINX (e.g. nginx -s reload).
echo ===========================================
echo.

REM Lancer une nouvelle invite interactive dans cette même fenêtre
cmd

Stopper Php et Nginx

stop-nginx-php.bat:

@ECHO OFF
taskkill /F /IM php-cgi.exe
taskkill /F /IM nginx.exe

J'ai commencé à ajouter MariaDb. Je pense faire un projet à part entière dédié à un serveur WEMP pour dev en local.


Les sources: Mon Xp et chatGPT.

Voici quelques sources utilisées par chatGPT: