nginx静态文件访问

976 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如何配置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会把指定路径接到文件路径,再进行访问。