Serving websitesServir des sites web
Tauri provides two web servers: http (plain) and https (TLS 1.3). Both serve static files and PHP pages, route many domains through virtual hosts, and run as long-lived daemons. This page covers where site files go, how requests are handled, and how to start the servers — including at boot.
Tauri fournit deux serveurs web : http (clair) et https (TLS 1.3). Tous deux servent des fichiers statiques et des pages PHP, routent de nombreux domaines par des hôtes virtuels, et tournent en démons durables. Cette page couvre l'emplacement des fichiers d'un site, le traitement des requêtes et le lancement des serveurs — y compris au démarrage.
1. Starting a serverDémarrer un serveur
Both servers are root-only and detach by themselves: they fork into the background and give the shell back at once. Each connection is then handled by a process that drops its privileges. Les deux serveurs sont réservés à root et se détachent seuls : ils passent en arrière-plan et rendent la main aussitôt. Chaque connexion est ensuite traitée par un processus qui abandonne ses privilèges.
https 443 # TLS on 443, default web root# TLS sur 443, racine web par défaut
http 80 redirect # plain on 80, everything redirected to HTTPS# clair sur 80, tout redirigé vers HTTPS
| FormForme | MeaningSignification |
|---|---|
https [PORT] [WEBROOT] [strict-sni] | TLS 1.3 server, port 443 by default, 8 pre-forked workers.Serveur TLS 1.3, port 443 par défaut, 8 workers pré-forkés. |
http [PORT] [WEBROOT] [redirect] | Plain HTTP server, port 80 by default, one process per connection.Serveur HTTP clair, port 80 par défaut, un processus par connexion. |
Before accepting a connection, both apply a per-source-IP rate limit (burst of 50, then about 15 new connections per second — a browser using keep-alive never reaches it), cap keep-alive at 100 requests per connection, and drop connections idle for 10 s (anti-slowloris). Avant d'accepter une connexion, tous deux appliquent une limite de débit par adresse source (rafale de 50, puis environ 15 nouvelles connexions par seconde — un navigateur en keep-alive ne l'atteint jamais), plafonnent le keep-alive à 100 requêtes par connexion, et coupent les connexions inactives depuis 10 s (anti-slowloris).
2. Where files go — the web rootOù placer les fichiers — la racine web
Without a web-root argument, a server serves c:/user/root/www/<port>: c:/user/root/www/443 for HTTPS, c:/user/root/www/80 for HTTP. The request path is appended to the root: GET /css/site.css opens c:/user/root/www/443/css/site.css. Any absolute directory can be served instead:
Sans argument de racine, un serveur sert c:/user/root/www/<port> : c:/user/root/www/443 en HTTPS, c:/user/root/www/80 en HTTP. Le chemin de la requête est ajouté à la racine : GET /css/site.css ouvre c:/user/root/www/443/css/site.css. Tout répertoire absolu peut être servi à la place :
https 443 c:/user/root/www/monsite
Hosting accounts each have their own docroot, c:/user/<compte>/www/, reached through their virtual host (section 6); they upload to it over FTPS.
Les comptes d'hébergement ont chacun leur docroot, c:/user/<compte>/www/, atteint par leur hôte virtuel (section 6) ; ils y déposent par FTPS.
3. Static filesFichiers statiques
- Directory requests: over HTTPS,
/or/dir/servesindex.phpif present, otherwiseindex.html; plain HTTP triesindex.htmlfirst. There is no directory listing: a directory without an index answers 404.Requêtes de répertoire : en HTTPS,/ou/dir/sertindex.phps'il existe, sinonindex.html; le HTTP clair essaie d'abordindex.html. Pas de listing de répertoire : un répertoire sans index répond 404. - Content types follow the extension (web, image, audio, video, font and document types); the default is
text/html; charset=utf-8.Les types de contenu suivent l'extension (types web, image, audio, vidéo, police, documents) ; le défaut esttext/html; charset=utf-8. - If a
<file>.gzsits next to a file and the client accepts gzip, the pre-compressed version is served.Si un<fichier>.gzest présent à côté d'un fichier et que le client accepte gzip, la version pré-compressée est servie. HEAD, conditional304 Not Modified(ETag) and singleRangerequests (206, for media) are supported.HEAD, le304 Not Modifiedconditionnel (ETag) et les requêtesRangeà une plage (206, pour les médias) sont pris en charge.- Any path segment starting with a dot (
.env,.git/,.htaccess…) is refused with 403, except/.well-known/.Tout segment de chemin commençant par un point (.env,.git/,.htaccess…) est refusé en 403, sauf/.well-known/.
4. .htaccess filesFichiers .htaccess
Applications ship .htaccess files to protect their private folders and to route requests to a front controller. The servers read them, from the web root down to the requested file's folder, and apply the useful subset:
Les applications livrent des fichiers .htaccess pour protéger leurs dossiers privés et router les requêtes vers un contrôleur frontal. Les serveurs les lisent, de la racine web jusqu'au dossier du fichier demandé, et en appliquent le sous-ensemble utile :
- Access:
Require all denied,Deny from all(403);Require all grantedin a deeper folder reopens it;<Files>,<FilesMatch>sections apply to file names.Accès :Require all denied,Deny from all(403) ;Require all granteddans un dossier plus profond le rouvre ; les sections<Files>,<FilesMatch>s'appliquent aux noms de fichiers. - Rewriting: the usual front controller —
RewriteCond %{REQUEST_FILENAME} !-f+RewriteRule … index.php— sends unknown paths toindex.php(pretty URLs for WordPress, Symfony, Laravel, Grav, Kanboard…);[F]gives 403,[R=404]404.Réécriture : le contrôleur frontal habituel —RewriteCond %{REQUEST_FILENAME} !-f+RewriteRule … index.php— envoie les chemins inconnus versindex.php(jolies URL de WordPress, Symfony, Laravel, Grav, Kanboard…) ;[F]donne 403,[R=404]404. - A directive or regular expression that is not understood is ignored, never guessed. Other Apache directives (PHP settings, headers, redirects to other hosts) have no effect.Une directive ou une expression régulière non comprise est ignorée, jamais devinée. Les autres directives d'Apache (réglages PHP, en-têtes, redirections vers d'autres hôtes) sont sans effet.
5. Dynamic pages (PHP)Pages dynamiques (PHP)
A request that resolves to a .php file is executed by the PHP engine — nothing to enable. The script receives the query string, POST body, cookies, $_SERVER and $_FILES; its output, with the headers it sets, is sent back and never cached. On a virtual host that belongs to a hosting account, PHP runs under that account's identity, confined to its home. See PHP & applications.
Une requête qui aboutit à un fichier .php est exécutée par le moteur PHP — rien à activer. Le script reçoit la query string, le corps POST, les cookies, $_SERVER et $_FILES ; sa sortie, avec les en-têtes qu'il pose, est renvoyée et jamais mise en cache. Sur un hôte virtuel qui appartient à un compte d'hébergement, le PHP tourne sous l'identité de ce compte, confiné à son répertoire. Voir PHP & applications.
- Request bodies are capped at 2 MB;
multipart/form-datais parsed into$_POSTand$_FILES.Le corps des requêtes est plafonné à 2 Mo ; lemultipart/form-dataest analysé en$_POSTet$_FILES. - A page that runs longer than 60 s is stopped.Une page qui tourne plus de 60 s est arrêtée.
- A suspended account's site answers
402with a sober “account suspended” page; nothing is deleted.Le site d'un compte suspendu répond402avec une page sobre « compte suspendu » ; rien n'est effacé.
6. Several sites — virtual hostsPlusieurs sites — hôtes virtuels
vhostadm (root) maps each Host: to its own web root, in the @:/vhosts/ table. Hosting accounts get theirs from compteadm; add your own by hand:
vhostadm (root) associe chaque Host: à sa propre racine, dans la table @:/vhosts/. Les comptes d'hébergement reçoivent la leur de compteadm ; ajoutez les vôtres à la main :
vhostadm list
vhostadm add blog.example.com c:/user/root/www/blog
vhostadm add shop.example.com c:/user/alice/www -u alice # PHP runs as alice# le PHP tourne en alice
vhostadm del blog.example.com
vhostadm reload # apply the changes, live# appliquer les changements, à chaud
- Matching is exact and case-insensitive — no wildcards — with one implicit twin: a line for
example.comalso serveswww.example.com(and the reverse), with the same certificate, unless the twin has its own line.www.www.example.comis not a twin.La correspondance est exacte et insensible à la casse — pas de jokers — avec un seul jumeau implicite : une ligne pourexample.comsert aussiwww.example.com(et inversement), avec le même certificat, sauf si le jumeau a sa propre ligne.www.www.example.comn'est pas un jumeau. - As soon as one virtual host is declared, a request whose
Host:is a domain name matching no line (nor its twin) is answered421 Misdirected Request— declare the operator's own domain too. A request made by IP address falls back to the default web root and default certificate.Dès qu'un hôte virtuel est déclaré, une requête dont leHost:est un nom de domaine sans ligne (ni jumeau) reçoit421 Misdirected Request— déclarez aussi le domaine de l'opérateur. Une requête faite par adresse IP retombe sur la racine web et le certificat par défaut. - Up to 512 virtual hosts.
vhostadm addrefuses beyond that limit rather than silently serving a site with the wrong certificate.Jusqu'à 512 hôtes virtuels. Au-delà,vhostadm addrefuse plutôt que de servir un site avec le mauvais certificat sans rien dire. - Domain shorter than 64 characters, docroot shorter than 200. The shared WordPress core cannot be used as a docroot.Domaine de moins de 64 caractères, docroot de moins de 200. Le cœur WordPress partagé ne peut pas servir de docroot.
add and del only change the table. vhostadm reload makes the running servers re-read it — virtual hosts and their certificates — without restarting and without interrupting the other sites. compteadm does it by itself.
add et del ne changent que la table. vhostadm reload la fait relire aux serveurs en marche — hôtes virtuels et leurs certificats — sans redémarrage ni coupure des autres sites. compteadm le fait de lui-même.
7. Per-domain certificates (SNI)Certificats par domaine (SNI)
During the TLS handshake the server picks the certificate matching the client's SNI name; without a match (or without SNI) it uses the default certificate. Attach a certificate to a domain with acme deploy-vhost (see TLS), or give existing files to vhostadm add:
Pendant la négociation TLS, le serveur choisit le certificat correspondant au nom SNI du client ; sans correspondance (ou sans SNI), il prend le certificat par défaut. Attachez un certificat à un domaine avec acme deploy-vhost (voir TLS), ou donnez des fichiers existants à vhostadm add :
vhostadm add shop.example.com c:/user/root/www/shop \
c:/user/root/tls/shop.key.bin c:/user/root/tls/shop.cert.der c:/user/root/tls/shop.chain.der
Strict SNI: start the server with https 443 strict-sni to answer 421 Misdirected Request when the request's Host: differs from the negotiated SNI name.
SNI strict : lancez le serveur avec https 443 strict-sni pour répondre 421 Misdirected Request quand le Host: de la requête diffère du nom SNI négocié.
8. HTTP → HTTPS redirect & HSTSRedirection HTTP → HTTPS & HSTS
http 80 redirect answers every request with a 301 to https://<Host><path>, except the ACME challenges under /.well-known/acme-challenge/, served in clear so that certificate issuance works. HSTS is sent by the HTTPS server itself, on every TLS response.
http 80 redirect répond à chaque requête par un 301 vers https://<Host><chemin>, sauf les challenges ACME sous /.well-known/acme-challenge/, servis en clair pour que l'émission de certificats fonctionne. Le HSTS est envoyé par le serveur HTTPS lui-même, sur chaque réponse TLS.
9. Starting the servers at bootLancer les serveurs au démarrage
Register the servers with serviceadm so that they start after every reboot. Use the never policy: the servers detach by themselves, so never means “start once at boot” — always would start duplicates.
Enregistrez les serveurs auprès de serviceadm pour qu'ils démarrent après chaque redémarrage. Utilisez la policy never : les serveurs se détachent seuls, never signifie donc « lancer une fois au démarrage » — always créerait des doublons.
serviceadm add web-https root never https 443
serviceadm add web-http root never http 80 redirect
Effective at the next reboot. See Networking for how serviceadm works.
Effet au prochain redémarrage. Voir Réseau pour le fonctionnement de serviceadm.
NextSuite
Next: TLS & certificates — obtaining and renewing the certificates this page assumes. Ensuite : TLS & certificats — obtenir et renouveler les certificats que cette page suppose en place.