如何使用 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/something
、http://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