在某些情况下需要以web的方式访问静态文件资源,其实有两种方式可以实现:
1. alias

  可以在nginx.conf的server中这样配置:

server {
        listen       80;

        location /file/ {
          alias /home/;
        }
}

虚拟机的IP: 192.168.43.52
比如/home下的文件是这些:

[root@localhost home]# ll
total 8
-rw-r--r--. 1 root root  199 Jan  3 08:16 aa.txt
drwxr-xr-x. 3 root root   25 Jan  3 01:54 app
drwxr-xr-x. 6 root root 4096 Jan  3 08:18 backup
drwxr-xr-x. 4 root root   28 Jan  3 00:36 data
[root@localhost home]# 

此时在宿主机浏览器输入:http://192.168.43.52/file/aa.txt
实际上访问的是/home/aa.txt

其实还可以使用正则表达式来定义:

location ~ ^/f/(\w+).(\w+)$ {
   alias /home/$1/$1.$2;
}

此时访问http://192.168.43.52/f/data.txt 实际上访问的是/home/data/data.txt

上面的正则表达式的含义是这样:
~ 表示区分大小写的匹配
^ 表示以...开头,上面的正则表示以/f开头
\w+ 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'
$    表示以...结尾
$1  匹配结果的第1个分组
$2  匹配结果的第2个分组
因此/f/data.txt 会被正则匹配解析成两个分组,第一个分组$1=data,第2个分组$2= data.txt, 因此会动态组成新的路径home/data/data.txt,最终返回这个文件
这样的规则有何用处呢?
目的是返回一个与文件夹同名的文件.

2.root
  
  使用root关键字可以重新定义路径

server {

    ...

    location /data/ {
	    root /home/;
    }

}

比如/home/下有这些文件
/home/data/data.txt
/home/data/d.txt
/home/data/firewall.txt
/home/data/man.txt

访问http://192.168.43.52/data/man.txt时实际上访问的是/home/data/main.txt
访问http://192.168.43.52/data/data.txt时实际上访问的是/home/data/data.txt
可以看到这种方式是把url中的一部分内容直接拼接到配置的路径后面,然后进行访问。
 

3.返回结果

经过测试访问不同后缀的文件,返回方式有以下3种情况:
a. 直接打开文件内容
    .txt  .json  图片文件,这些文件可以直接在浏览器里展示出具体内容
b.下载文件
    .log   .gz .zip 文件可以直接下载,
c. 打开文件并渲染
    .html .htm 文件可以被直接打开并且进行渲染

但是需要注意的是,这种方式无法访问目录

以上介绍了这么多,nginx访问静态资源具体有何真正的用处呢,其实一个真实的案例就是可以配置一个location,以便在浏览器上返回某些系统的日志,将会在后续的文章中给出具体的案例。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐