Nginx的 - 有根及别名静态文件服务的混乱Nginx的 - 有根及别名静态文件服务的混乱(Ngi

2019-05-14 07:17发布

我需要通过在我的应用程序服务器提供我的应用程序8080 ,我的静态文件从一个目录不碰应用服务器。 nginx的配置我是这样的......

    # 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;
            }
    }

现在,有了这个配置,一切工作正常。 需要注意的是, root指令删除注释。

如果我激活root和停用的alias -它停止工作。 然而,当我删除尾随/static/root就开始工作了。

一个人能解释这是怎么回事。 还请解释清楚和冗长之间有什么区别rootalias ,它们的目的。

Answer 1:

我已经找到答案,我的困惑。

还有就是之间的很重要的区别rootalias指令。 的方式的这种差异存在于指定的路径rootalias处理。

在的情况下, root指令, 完整路径中的情况下, 附加到根包括位置部分 ,而alias指令, 只有不包括位置部分的路径的一部分被附加到别名

为了显示:

比方说,我们有配置

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

在这种情况下的Nginx将获得最终的路径将是

/var/www/app/static/static

这将返回404 ,因为没有static/static/

这是因为,位置部分被附加到在指定的路径root 。 因此,有root ,正确的方法是

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

在另一方面, alias ,位置的部分被丢弃 。 所以对于配置

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

最终路径将正确被形成为

/var/www/app/static

看到这里的文档: http://wiki.nginx.org/HttpCoreModule#alias



Answer 2:

因为说的那样@treecoder

在的情况下, root指令,完整路径中的情况下,附加到根包括位置部分,而alias指令,只有不包括位置部分的路径的一部分被附加到别名。

一张图片胜过千言万语

root

对于alias



Answer 3:

你的情况,你可以用root指令,因为$uri的一部分location指令是与去年同root指令的一部分。

Nginx的文件通知:它还有:
当位置指令的值的最后一部分相匹配:

 location /images/ { alias /data/w3/images/; } 

最好是用root指令来代替:

 location /images/ { root /data/w3; } 

root指令将追加$uri的路径。



Answer 4:

只是一个快速的增编@ good_computer的非常有用的答案,我想,以取代与一个文件夹中的URL的根,但只有当它匹配包含静态文件(我想保留的路径的一部分)的子文件夹。

例如,如果请求的文件在/app/js/app/css ,在查找/app/location/public/[that folder]

我得到这个使用正则表达式来工作。

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


Answer 5:

server {
    server_name xyz.com;
    root /home/ubuntu/project_folder/;

    client_max_body_size 10M;
    access_log  /var/log/nginx/project.access.log;
    error_log  /var/log/nginx/project.error.log;

    location /static {
        index index.html;
    }

    location /media {
        alias /home/ubuntu/project/media/;
    }
}

服务器块住上nginx的静态页面。



文章来源: Nginx — static file serving confusion with root & alias
标签: nginx