Nginx sirve directorios de usuarios y raíz web al mismo tiempo


0

Quiero servir directorios del directorio de inicio de cada usuario; como el example.com/~userque se servirá desde /home/user/www. Hay algunos ejemplos por ahí (como https://unix.stackexchange.com/questions/126745/set-up-nginx-to-serve-files-from-subdirectories ); lo que en parte funciona para mí

Mi problema es: si pudiera habilitar los directorios de usuarios, la raíz (examle.com/) da 404 no encontrado. Tanto el directorio raíz como los directorios de usuario no se pueden habilitar al mismo tiempo.

Probablemente estoy estropeando la configuración. Aquí esta mi /etc/nginx/sites-enabled/default. He intentado poner el bloque "dir de usuario" encima y debajo de la ubicación "raíz"; Pero el resultado es el mismo.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #[trimmed]...

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm;

    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

}


server {

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #[trimmed]...

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name example.com; # managed by Certbot

    #root
    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    #user dir
    location ~ ^/(.+?)(/.*)?$ {
        alias /home/$1/www$2;
        index  index.html index.htm;
        autoindex on;
    }


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    #[trimmed]...

}
server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 ;
    listen [::]:80 ;
    server_name example.com;
    return 404; # managed by Certbot
}

¿Alguien podría ayudarme a servir el directorio raíz web y los directorios de usuarios al mismo tiempo?


Parece que te falta un ~en tu expresión regular. Prueba:location ~ ^/~([^/]+)(/.*)?$ { ... }
Richard Smith

¡Oh, funciona! ¿Pero por qué? Sin lo que falta ~, debería haber podido acceder example.com/user(no example.com/~user), ¿no? Pero no pude hacerlo.
afedersin

Sí, pero la raíz web no funcionaría.
Richard Smith

Gracias, ¿le gustaría publicar su comentario como respuesta para que pueda aceptarlo como la solución?
afedersin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.