需求
需要使用nginx代理访问服务器上某个目录的图片。图片存放目录为:/data/images/。
第一次尝试
location /images {
root /data/images;
}
访问失败,查看nginx的错误日志:
2018/12/07 15:28:18 [error] 22894#0: *7 open() "/data/images/images/test.jpeg" failed (2: No such file or directory),
client: 192.168.0.128, server: localhost, request: "GET /images/test.jpeg HTTP/1.1", host: "192.168.0.51"
日志打印了 open() "/data/images/images/test.jpeg" failed , No such file or directory,可以看出与我们想要的结果:/data/images/test.jpeg 有所出入,
即多了一层/images。
第二次尝试
通过 rewrite 模块,将访问路径重写。
location /images {
rewrite ^/images/(.*)$ /data/images/$1 break;
}
还是访问失败,查看nginx的错误日志:
2018/12/07 15:13:31 [error] 22611#0: *3 open() "/usr/local/nginx/html/data/images/test.jpeg" failed (2: No such file or directory),
client: 192.168.0.128, server: localhost, request: "GET /images/test.jpeg HTTP/1.1", host: "192.168.0.51"
日志打印了 open() "/usr/local/nginx/html/data/images/test.jpeg" failed , No such file or directory,这次多了/usr/local/nginx/html。
而/usr/local/nginx是 nginx 的安装目录,所以可以�猜想,rewrite 默认是重定向到 nginx目录下的 html 目录。
�所以可以得出结论:rewrite 到 /data/images/,不是路由到�根目录下的 data 目录。
再结合第一次尝试的 root 配置,可以直接路由到文件系统的根目录。所以有了第三次尝试。
第三次尝试
location /images {
rewrite ^/images/(.*)$ /$1 break;
root /data/images;
}
重新加载配置。 成功访问。
附 —— nginx重新加载配置
$ nginx -s reload