try_files $uri - Nginx - archivo estático que sirve confusión con la raíz y el alias





2 Answers

como se dice como @treecoder

En el caso de la directiva root , la ruta completa se agrega a la raíz que incluye la parte de ubicación, mientras que en el caso de la directiva de alias , solo la parte de la ruta que NO incluye la parte de ubicación se agrega a la alias.

Una imagen vale mas que mil palabras

para la root :

para alias :

static server index

Necesito servir mi aplicación a través de mi servidor de aplicaciones en 8080 , y mis archivos estáticos de un directorio sin tocar el servidor de aplicaciones. La configuración de nginx que tengo es algo como esto ...

    # app server on port 8080
    # nginx listens on port 8123
    server {
            listen          8123;
            access_log      off;

            location /static/ {
                    # root /var/www/app/static/;
                    alias /var/www/app/static/;
                    autoindex off;
            }


            location / {
                    proxy_pass              http://127.0.0.1:8080;
                    proxy_set_header        Host             $host;
                    proxy_set_header        X-Real-IP        $remote_addr;
                    proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
    }

Ahora, con esta configuración, todo funciona bien. Tenga en cuenta que la directiva root está comentada.

Si activo la root y desactivo el alias , deja de funcionar. Sin embargo, cuando quito la root /static/ de la root , comienza a funcionar de nuevo.

¿Puede alguien explicar lo que está pasando? También explique de manera clara y detallada cuáles son las diferencias entre la root y el alias , y sus propósitos.




Solo una adición rápida a la respuesta muy útil de @ good_computer, quería reemplazar la raíz de la URL con una carpeta, pero solo si coincidía con una subcarpeta que contenía archivos estáticos (que quería conservar como parte de la ruta).

Por ejemplo, si el archivo solicitado está en /app/js o /app/css , busque en /app/location/public/[that folder] .

Conseguí esto para trabajar usando un regex.

 location ~ ^/app/((images/|stylesheets/|javascripts/).*)$ {
     alias /home/user/sites/app/public/$1;
     access_log off;
     expires max;
 }



Related


Tags

nginx