ENbext.dev
DocumentationCompatibilité nginx

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

Sur cette page

Couverture de la directive

bext prend en charge 68 des 70 directives nginx couramment utilisées (couverture de 97 %). Cette page documente chaque directive prise en charge et comment elle correspond à la configuration interne de bext.

Directives de blocage du serveur#

listen#

Analysé avec une prise en charge complète de toutes les options courantes :

nginx
listen 80;
listen 443 ssl http2;
listen [::]:80;
listen 0.0.0.0:8080 default_server;

Extraits : port, adresse, drapeau SSL, drapeau HTTP/2 et désignation default_server.

server_name#

Tous les modèles de noms sont pris en charge :

nginx
server_name example.com;                    # Exact match
server_name *.example.com;                  # Wildcard prefix
server_name example.*;                      # Wildcard suffix
server_name ~^api\d+\.example\.com$;        # Regex
server_name .example.com;                   # Exact + wildcard prefix
server_name _;                              # Catch-all

Priorité de correspondance (identique à nginx ) : exacte > préfixe de caractère générique le plus long > suffixe de caractère générique > première correspondance d'expression régulière > serveur par défaut.

root et index#

nginx
root /var/www/html;
index index.html index.htm index.php;

error_page#

nginx
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

default_type#

nginx
default_type application/octet-stream;

Blocs de localisation#

Les cinq types de correspondance d'emplacement nginx sont pris en charge avec la priorité correcte :

nginx
location = /health { }         # Exact match (highest priority)
location ^~ /static/ { }       # Prefix priority (skips regex)
location ~ \.php$ { }          # Regex (case-sensitive)
location ~* \.(jpg|png)$ { }   # Regex (case-insensitive)
location /api/ { }             # Plain prefix (lowest priority)

Les emplacements imbriqués sont pris en charge :

nginx
location /api/ {
    location /api/v2/ {
        proxy_pass http://backend-v2;
    }
    proxy_pass http://backend-v1;
}

Directives de procuration#

proxy_pass#

nginx
location /api/ {
    proxy_pass http://backend;
    proxy_pass http://127.0.0.1:3000;
    proxy_pass http://upstream_name;
}

Détecte automatiquement les références en amont et les résout. Les en-têtes de mise à niveau WebSocket sont détectés et traités.

proxy_set_header#

nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Toutes les variables nginx sont remplacées par des espaces réservés d'exécution bext.

proxy_redirect#

nginx
proxy_redirect off;
proxy_redirect default;
proxy_redirect http://backend/ /;

Délais d'expiration du proxy#

nginx
proxy_read_timeout 60s;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;

Cache proxy#

nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;

location / {
    proxy_cache my_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
    proxy_cache_bypass $http_pragma;
    proxy_no_cache $http_authorization;
    proxy_cache_use_stale error timeout updating;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 5s;
}

Blocs en amont#

Prise en charge complète de l'équilibrage de charge :

nginx
upstream backend {
    least_conn;                    # or: ip_hash, hash $uri
    server 127.0.0.1:3001 weight=3;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003 backup;
    server 127.0.0.1:3004 down;
    keepalive 32;
}

Stratégies d'équilibrage de charge : round-robin (par défaut), least_conn, ip_hash, hash (avec variables).

Réécriture et redirection#

rewrite#

nginx
rewrite ^/old/(.*)$ /new/$1 permanent;  # 301 redirect
rewrite ^/temp/(.*)$ /new/$1 redirect;  # 302 redirect
rewrite ^/api/v1/(.*)$ /api/v2/$1 last; # internal rewrite
rewrite ^/legacy/(.*)$ /current/$1 break;

Les groupes de capture ( $1, $2, etc.) sont conservés et remplacés.

return#

nginx
return 301 https://$host$request_uri;  # HTTPS redirect
return 200 "OK";                       # Fixed response
return 403;                            # Status-only

Blocs conditionnels#

nginx
if ($request_uri ~ ^/old/) {
    return 301 /new/;
}

if (-f $request_filename) {
    break;
}

if (-d $request_filename) {
    rewrite ^(.*)$ $1/index.html break;
}

if ($http_x_forwarded_proto != "https") {
    return 301 https://$host$request_uri;
}

Prend en charge l'existence de fichiers ( -f ), l'existence de répertoires ( -d ), la correspondance d'expressions régulières ( ~, ~* ), l'égalité ( =, != ) et les vérifications d'existence de variables.

try_files#

nginx
try_files $uri $uri/ =404;                      # Static site
try_files $uri $uri/ /index.html;                # SPA fallback
try_files $uri $uri/ /index.php?$query_string;   # PHP/Laravel
try_files $uri @backend;                          # Named location

Ordre de résolution :

  1. Vérifiez chaque modèle (variable-substituée, chemin-traversal-gardé)
  2. Si un fichier existe, servez-le
  3. Si un répertoire existe, recherchez les fichiers d'index
  4. Revenez au dernier argument : code d'état, redirection interne ou emplacement nommé

SSL/TLS#

nginx
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_dhparam /etc/nginx/dhparam.pem;

Tous les certificats sont chargés dans le résolveur SNI de bext pour la prise en charge de plusieurs certificats.

Compression#

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

Limitation du débit#

nginx
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

location /api/ {
    limit_req zone=api burst=20 nodelay;
    limit_conn addr 10;
}

Contrôle d'accès#

nginx
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;

auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;

En-têtes#

nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff";
add_header Strict-Transport-Security "max-age=31536000" always;

Variables et cartes#

map#

nginx
map $http_accept_language $lang {
    default en;
    ~^fr    fr;
    ~^de    de;
}

geo#

nginx
geo $country {
    default        US;
    192.168.0.0/16 INTERNAL;
    10.0.0.0/8     INTERNAL;
}

set#

nginx
set $backend "http://127.0.0.1:3000";

FastCGI (PHP)#

nginx
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php-fpm.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
}

Converti en runtime PHP intégré de bext ou proxy vers un processus PHP-FPM externe.

Autres directives#

nginx
autoindex on;                              # Directory listing
stub_status;                               # Status page
sub_filter 'old-text' 'new-text';          # Response body substitution
sub_filter_once off;
expires 30d;                               # Cache expiration header
client_max_body_size 50m;                  # Request body limit
keepalive_timeout 65;

Substitution de variables#

Toutes les variables nginx sont mappées aux espaces réservés d'exécution bext :

Variable nginx Espace réservé bext
$host {host}
$uri, $document_uri {uri}
$request_uri {request_uri}
$args, $query_string {query_string}
$is_args {is_args}
$scheme {scheme}
$request_method {method}
$remote_addr {client_ip}
$server_name {server_name}
$server_port {server_port}
$server_protocol {server_protocol}
$document_root {document_root}
$request_filename {request_filename}
$http_* {header:*}
$cookie_* {cookie:*}
$arg_* {arg:*}
Remarque

Les variables qui ne figurent pas dans ce tableau (par exemple $realpath_root, $upstream_addr ) sont transmises sous forme de chaînes littérales plutôt que remplacées. Exécutez bext nginx check pour faire apparaître toutes les variables non reconnues dans votre configuration.

En rapport#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.