Ich erstelle eine "userdir" -Konfiguration, in der der Webserver Dateien im ~ / www-Verzeichnis jedes Benutzers bereitstellt.
Ich habe den folgenden Konfigurationsausschnitt:
server {
listen 443;
listen [::]:433;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
server_name ~^(?<user>\w+)\.example\.com$;
root /var/www/userdir;
index index.html;
error_page 404 = @not_found;
add_header X-User $user;
location / {
root /home/$user/www;
try_files $uri $uri/ =404;
}
location @not_found {
if (-f /home/$user/www/404.html)
{
root /home/$user/www;
}
try_files /404.html =500;
}
}
Wenn eine nicht vorhandene Datei angefordert wird, wird die @not_found
benannter Ort wird eingegeben. Zunächst wird geprüft, ob der Benutzer über eine benutzerdefinierte 404-Seite verfügt. Wenn dies der Fall ist, wird der Dokumentstamm auf das Benutzerverzeichnis festgelegt, bevor versucht wird, 404.html bereitzustellen.
Das Ergebnis des Konfigurationsblocks ist jedoch, dass, wenn 404.html im Benutzerverzeichnis vorhanden ist, die generische nginx 404-Seite zurückgegeben wird. Andernfalls wird /var/www/userdir/404.html zurückgegeben.
Dies scheint den Trick zu tun:
Möglicherweise müssen Sie "error_page 404 = @not_found;" entfernen.
quelle