ENbext.dev
DocumentationMigration

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Migrer depuis nginx

bext remplace entièrement nginx — TLS, proxy inverse, service statique, compression, PHP, hôtes virtuels — dans un seul binaire. Il existe deux voies de migration :

Option A : Automatique (Zéro configuration)#

bext peut lire directement votre configuration nginx existante. Aucune traduction manuelle n’est nécessaire.

bash
# Build with nginx-compat feature
cargo build -p bext-server --features nginx-compat --release

# Launch the preflight dashboard (auto-detects /etc/nginx/nginx.conf)
sudo ./target/release/bext-server nginx-takeover

Cela ouvre un tableau de bord Web sur http://localhost:9999 affichant :

  • Tous les hôtes virtuels avec noms de serveur, ports, SSL et emplacements
  • Vérifications en amont (accès aux certificats, disponibilité des ports, autorisations)
  • Cliquez sur « Prendre le contrôle » pour arrêter nginx et desservir tout le trafic via bext.
  • Cliquez sur "Rollback" pour restaurer instantanément nginx

Ce qui est détecté automatiquement#

Fonctionnalité nginx Manutention bext
Blocs server {} Routage d'hôte virtuel
server_name (exact, joker, regex) Correspondance du nom d'hôte
listen 80/443 ssl http2 Liaison de port + TLS
ssl_certificate / ssl_certificate_key chargement du certificat rustls
location (=, ^~, ~, ~ *, préfixe) Correspondance de priorité compatible nginx
proxy_pass + proxy_set_header Proxy inverse avec injection d'en-tête
upstream {} (least_conn, ip_hash) Équilibrage de charge
try_files Sondage de fichiers + repli SPA/PHP
fastcgi_pass Runtime PHP intégré
gzip compression gzip + brotli + zstd
add_header En-têtes de réponse
return / redirections HTTP → HTTPS, redirections de domaine
include (globes récursifs) Extension complète

Ce qui est ignoré (avec avertissements)#

Un petit nombre de directives — notamment les scripts njs ( js_set, js_content ) — sont analysées sans erreurs mais ne sont pas traduites. Le tableau de bord les affiche sous forme d'avertissements.

Option B : traduction manuelle#

Pour un bon démarrage, traduisez votre configuration nginx en bext.config.toml.

Site statique#

nginx
# nginx
server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    root /var/www/html;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
toml
# bext.config.toml
[server]
listen = "0.0.0.0:443"
static_dir = "/var/www/html"

[tls]
mode = "manual"
cert = "/etc/ssl/cert.pem"
key = "/etc/ssl/key.pem"

Proxy inverse#

nginx
# nginx
upstream api {
    least_conn;
    server 10.0.0.1:8080 weight=3;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080 backup;
    keepalive 32;
}
server {
    listen 80;
    location /api/ {
        proxy_pass http://api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
toml
# bext.config.toml
[server]
listen = "0.0.0.0:80"

[upstreams.api]
strategy = "least_conn"
keepalive = 32
servers = [
    { url = "http://10.0.0.1:8080", weight = 3 },
    { url = "http://10.0.0.2:8080" },
    { url = "http://10.0.0.3:8080", backup = true },
]

[[route_rules]]
pattern = "/api/**"
proxy = "api"

PHP ( Laravel / WordPress )#

nginx
# nginx
server {
    listen 80;
    root /var/www/html;
    index index.php index.html;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
toml
# bext.config.toml
[server]
listen = "0.0.0.0:80"

[php]
enabled = true
document_root = "/var/www/html"
workers = 4
index = "index.php"

bext utilise un runtime PHP intégré (pas de PHP-FPM externe), donc aucune configuration socket/TCP n'est nécessaire.

SSL avec renouvellement automatique#

nginx
# nginx (with certbot)
server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
server {
    listen 80;
    return 301 https://$host$request_uri;
}
toml
# bext.config.toml
[server]
listen = "0.0.0.0:443"

[tls]
mode = "acme"
domains = ["example.com"]
email = "admin@example.com"

bext gère les défis ACME, la fourniture de certificats et le renouvellement automatique en interne – aucun certbot n'est nécessaire.

Compression Gzip#

nginx
# nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_comp_level 6;
gzip_min_length 256;

bext active la compression gzip + brotli + zstd par défaut. Aucune configuration nécessaire. Pour personnaliser :

toml
# bext.config.toml (optional — defaults are sensible)
[[route_rules]]
pattern = "/**"
compression = "balanced"  # off | fast | balanced | max

Différences clés#

nginx bext
PHP-FPM externe sur FastCGI Runtime PHP intégré (pas de configuration de socket)
certbot pour Let's Encrypt ACME intégré (aucun certbot requis)
Module gzip séparé gzip + brotli + zstd intégrés
sites-available / sites-enabled bext.config.toml unique ou détection automatique
nginx -t pour le test de configuration bext config validate
nginx -s reload Rechargement à chaud POST /api/reload ou bext-server
Fichier PID + maître/travailleur Processus unique avec pool de threads
Accéder aux fichiers journaux Journaux JSON structurés + OpenTelemetry
deny all / allow WAF avec filtrage IP, géoblocage, limitation de débit
limit_req_zone Limiteur de débit intégré (en mémoire ou sauvegardé sur Redis)
proxy_cache Cache ISR avec invalidation basée sur des balises

Restauration#

Si vous avez utilisé la reprise automatique et devez revenir en arrière :

  1. Cliquez sur « Restaurer vers nginx » dans le tableau de bord de contrôle en amont.
  2. Ou manuellement : sudo systemctl start nginx

bext enregistre l'état système de nginx et le restaure exactement lors de la restauration.

Conseil

Avant de vous engager dans une prise de contrôle complète, exécutez bext-server nginx-takeover en mode d'inspection en lecture seule pour examiner le rapport de couverture des directives : le tableau de bord signale toutes les directives qui seront ignorées, telles que les scripts njs, afin que vous sachiez quoi gérer avant de procéder au basculement.

Remarque

Le runtime PHP intégré ( [php] ) gère FastCGI en interne — il n'y a pas de socket externe à configurer. Si vous comptiez auparavant sur un chemin de socket PHP-FPM spécifique, déplacez la configuration PHP vers bext.config.toml [php] plutôt que de repointer fastcgi_pass. Voir le PHP & nginx -documents compatibles pour plus de détails.

En rapport#

  • nginx.org — documentation officielle nginx et référence du module
Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.