使用 nginx 从给定目录的子目录中提供静态文件

问题描述 投票:0回答:3

我的服务器上有几组静态

.html
文件,我想使用 nginx 直接为它们提供服务。例如,nginx 应提供以下模式的 URI:

www.mysite.com/public/doc/foo/bar.html

使用位于

.html
/home/www-data/mysite/public/doc/foo/bar.html
文件。您可以将
foo
视为设置名称,将
bar
视为此处的文件名。

我想知道下面的 nginx 配置是否可以完成这项工作:

server {
    listen        8080;
    server_name   www.mysite.com mysite.com;
    error_log     /home/www-data/logs/nginx_www.error.log;
    error_page    404    /404.html;

    location /public/doc/ {
        autoindex         on;
        alias             /home/www-data/mysite/public/doc/;
    }

    location = /404.html {
        alias             /home/www-data/mysite/static/html/404.html;
    }
}

换句话说,所有

/public/doc/.../....html
模式的请求都将由 nginx 处理,如果未找到任何给定的 URI,则返回默认的
www.mysite.com/404.html

nginx static-files
3个回答
143
投票

它应该可以工作,但是http://nginx.org/en/docs/http/ngx_http_core_module.html#alias说:

当位置与指令值的最后部分匹配时: 最好使用 root 指令来代替:

这会产生:

server {
  listen        8080;
  server_name   www.mysite.com mysite.com;
  error_log     /home/www-data/logs/nginx_www.error.log;
  error_page    404    /404.html;

  location /public/doc/ {
    autoindex on;
    root  /home/www-data/mysite;
  } 

  location = /404.html {
    root /home/www-data/mysite/static/html;
  }       
}

6
投票

您可以使用以下代码。 您还可以使用此代码来提供vuejs或reactjs静态文件,只需修改

alias
以指向文件目录的根目录;

location /files {
    #autoindex on;
    alias  /files;
    try_files $uri /index.html =404;
  }

确保访问权限也正确。

sudo chown -R 1000 /files

如何访问文件的示例

http://example.com/files/text-file.txt


0
投票

例如,如果您使用静态中间件

app.use(express.static('assets'));

假设你的项目中有一张图片地址/assets/media/cat1.jpg 并且您的应用程序正在使用端口 3000

为了提供该图像,这是 nginx 配置

位置/媒体/ {

 proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
© www.soinside.com 2019 - 2024. All rights reserved.