当前位置: 首页 > 知识库问答 >
问题:

nginx--与root和别名混淆的静态文件

壤驷旭
2023-03-14

我需要通过位于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指令被注释掉了。

如果激活并停用别名--它将停止工作。但是,当我从根目录中移除后面的/static/时,它又开始工作了。

有人能解释一下这是怎么回事吗。另外,请清楚详细地解释别名之间的区别及其用途。

共有1个答案

濮阳旭东
2023-03-14

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

rootalias指令之间有一个非常重要的区别。这种差异存在于处理别名中指定的路径的方式。

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

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

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

这是因为location部分被追加到root中指定的路径。因此,对于root,正确的方法是

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

另一方面,使用别名,位置部分会被删除。所以对于配置

location /static/ {
    alias /var/www/app/static/;
    autoindex off;           ↑
}                            |
                             pay attention to this trailing slash
/var/www/app/static

在某种程度上,这是有道理的。别名只是让我们定义一个新路径来表示现有的“真实”路径。位置部分是新路径,因此它被实际路径替换。把它看作一个符号链接。

另一方面,Root并不是一个新的路径,它包含一些信息,这些信息必须与一些其他信息进行整理才能形成最终的路径。因此,位置部分被使用,而不是被删除。

对于Nginx文档中是否强制使用尾随斜杠,没有明确的指导方针,但这里和其他地方的人们的共同观察似乎表明这是强制性的。

 类似资料:
  • 我试图让zabbix前端与nginx一起工作。这是我的nginx配置: /zabbix中的php脚本正在工作!但是像未提供(404)。在错误日志中是这样的: 所以我们可以看到,nginx正在主根目录中查找文件,而不是在别名目录中查找文件。 为什么会这样,我该如何解决?

  • 问题内容: 我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释。因此,没有Jax- rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现)以及web.xml中的以下内容。 然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。 我的问题是,为什么球衣使用s

  • 我有点困惑。请看看下面的代码。 我确信调用此序列是可能的。 虽然我仍然有一个小小的困惑,但我们可以很容易地看到也调用方法,这是一个静态方法。方法 是调用非同步静态方法的静态同步方法。当 thread-2 获得类级锁时,为什么从 Thread-1 调用 没有被阻止? 我只是在逻辑上感到困惑,如果一个线程获得类级锁定,则该类其他非同步静态方法保持打开状态,以便从其他方法(实例方法)调用。为什么?

  • 我将nginx作为apache前面的反向代理服务器运行。我需要在后端从前端访问上传的文件,所以方法是在nginx站点配置中使用别名,但是后端的静态文件应该由nginx直接处理。我是nginx新手,所以这里是我处理静态文件的部分配置。我还指定了一个别名(/images),但它不起作用,因为它被第二个条件覆盖。如何将这两个条件结合起来,使nginx能够处理来自root(后端应用程序)的静态文件和来自前

  • 问题内容: 我试图从不同的部分组成URL,并且在理解此方法的行为时遇到了麻烦。例如: Python 3.x 您能否解释这种方法的确切行为? 问题答案: (对我而言)最好的方式是第一个参数,就像您在浏览器中所在的页面一样。第二个参数是该页面上锚点的href。结果是您单击后将定向到的最终URL。 根据我的描述,这很有意义。尽管希望基础包括一个方案和领域。 如果您在某个虚拟主机上,并且有一个类似的锚,则

  • 本文向大家介绍详解Nginx静态服务配置(root和alias指令),包括了详解Nginx静态服务配置(root和alias指令)的使用技巧和注意事项,需要的朋友参考一下 静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器。同时nginx也是一个高性能的静态文件服务器。通常都会把应用的静态文件使用nginx处理。 配置nginx的静态文件有两个指令,一个 root 和一个 alias。