如何使用 nginx 在某个位置路径提供静态文件目录?

Posted

技术标签:

【中文标题】如何使用 nginx 在某个位置路径提供静态文件目录?【英文标题】:How to serve a directory of static files at a certain location path with nginx? 【发布时间】:2016-03-03 12:36:54 【问题描述】:

我在/Users/me/myproject 有文件,我想使用简单的 nginx 配置在http://stuff.dev/something 为它们提供服务。在/Users/me/myproject 文件夹中是这样的:

index.html
scripts/
    app.js
styles/
    style.css

所以我真的希望能够访问http://stuff.dev/somethinghttp://stuff.dev/something/scripts/app.js 等。

在我的 nginx conf 我有这个:

server 
  listen      80;
  server_name stuff.dev;

  location /something 
    index  index.html;
    root /Users/me/myproject;
  

这不起作用(如果我尝试转到上述 URL,我会得到 404),但是如果我尝试完全相同的设置但使用location / 而不是location /something ,它可以正常工作。如何静态提供此文件目录但在路径而不是位置根目录?我是否必须将文件放在名为“某物”的文件夹中,例如/Users/me/myproject/something 才能正常工作?如果是这样,有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

我在我的 VPS 上尝试过,使用 alias 命令对我有用:

server 
  listen 80;
  server_name   something.nateeagle.com;

  location /something 
    alias /home/neagle/something;
    index index.html index.htm;
  

【讨论】:

做到了!仍然很困惑为什么root 在这里的工作方式不同,但这就是我需要的。谢谢内特! 不完全确定,我只是通过文档:nginx.org/en/docs/http/ngx_http_core_module.html#root“文件的路径是通过仅将 URI 添加到根指令的值来构造的。如果必须修改 URI ,应使用别名指令。”很高兴这有帮助! 嗯,现在想想,这确实是有道理的。谢谢! 进一步参考:***.com/questions/10631933/… 正是我想要的!【参考方案2】:

我相信您可以使用 try_files 指令来完成此操作,这样的事情应该可以工作:

server 
  listen      80;
  server_name stuff.dev;

  location /something 
    root /Users/me/myproject;
    index  index.html;

    try_files /Users/me/myproject/$uri /Users/me/myproject/$uri/ =404
  

可能需要您将文件推送到 /Users/me/myproject/something 下,如果您无法做到这一点,则需要尝试类似以下的位置:

  location ~ /something(.*) 
    root /Users/me/myproject;
    index  index.html;

    try_files /Users/me/myproject$1 /Users/me/myproject$1/ =404
  

【讨论】:

有趣...我会在一分钟内尝试这个,好奇如果您必须提及整个路径,那么“root”的意义是什么...我假设 try_files 将相对于范围根值... 再看这个,可能是openresty + os x el capitan 的问题以及它是如何设置的。 :(

以上是关于如何使用 nginx 在某个位置路径提供静态文件目录?的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk Nginx 提供静态文件

如何使用自定义位置或路径而不是使用 nginx 的多个应用程序的根?

NGINX - 如何提供包含 css、pngs 和 js 作为相对路径的静态 html

nginx+gunicorn+flask部属web时,使用nginx如何指定多个静态文件路径

详解nginx如何代理静态资源(长搜索路径优先)

Nginx修改静态文件访问路径