如何配置nginx,访问服务器上的静态文件?
假设:在/home/www/jsonfolder下有一个data.json文件,内容如下:
{
"action":"query",
"name":"device1",
"key":"temp"
}
1、修改nginx配置文件,文件路径/etc/nginx/sites-available/default(或者/etc/nginx/conf.d/xxx.conf,多应用时可能需要配置这个文件),分为两种方式:
- 按目录匹配
server块内添加如下内容:
server {
.
.
location ^~ /jsonfolder/ {
root /home/www/;
}
.
.
}
配置完后重启nginx,重启方法请参见我之前的博客,此时访问http://127.0.0.1/jsonfolder/data.json 将会匹配到/home/www/jsonfolder/data.json文件。
如果采用post方式将无法正确返回,需要修改nginx的源码src/http/modules/ngx_http_static_module.c,
注释掉如下内容:
if (r->method & NGX_HTTP_POST) {
return NGX_HTTP_NOT_ALLOWED;
}
执行make命令重新编译,执行cp objs/nginx /usr/local/nginx/sbin/nginx,将objs目录下生成nginx命令拷贝到nginx安装目录sbin目录下,重启即可。(此方法未验证)
- 按文件后缀匹配
server {
.
.
location ~ \.(txt|json)$ {
root /home/www/;
}
.
.
}
匹配文件后缀为txt和json的文件,例如http://127.0.0.1/data.json 会匹配到 /home/www/data.json
如果以上方法未成功,可尝试以下方法:
通过nginx访问静态文件配置,均是在server模块中配置,有两种方式:
1、alias
通过alias关键字,重定义路径,如
server{
listen 7001;
server_name 127.0.0.1;
location /file/ {
alias /home/china/areas/;
}
}
此时,通过浏览器访问http://127.0.0.1:7001/file/t.txt,则访问服务器的文件是/home/china/areas/t.txt
2、root
通过root关键字,重定义路径,如
server{
listen 7002;
server_name 127.0.0.1;
location / {
root /home/china/areas/;
}
}
此时,通过浏览器访问http://127.0.0.1:7001/t.txt,则访问服务器的文件是/home/china/areas/t.txt
上述两种方法均可达到目的,区别是它们对路径的解析方式不同,alas会把指定路径当作文件路径,
而root会把指定路径接到文件路径,再进行访问。