初学openResty,从最简单,实用的的地方入手,一步步掌握openResty的配置以及开发。
现在我们从简单的入手,实现一个简单的文件下载功能。
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name localhost;
location /download {
alias /home/moon/openresty_workspace/download_test/download_dir;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
}
}
我把下载文件放在/home/moon/openresty_workspace/download_test/download_dir
这个目录中,这个目录中可以包含子目录。
该目录结构是这样的
.
├── 2.txt
└── temp
└── 1.txt
运行
cd到工作目录
openresty -p `pwd` -c conf/nginx.conf
-p 指定工作目录
-c 指定配置文件
reload 配置文件也要带上启动时的 -p -c
openresty -p `pwd` -c conf/nginx.conf -s reload
就这么简单。
总结一下:
1.nginx配置文件中的http模块:
sendfile on;
原因如下:
sendfile: 设置为on表示启动高效传输文件的模式。
sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。
如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。
2.在http模块的server的location设置autoindex on; 并设置下载路径,保证该下载路径存在。
location /download {
alias /home/moon/openresty_workspace/download_test/download_dir;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
Module ngx_http_autoindex_module
另外:设置下载路径的设置有alias和root都可以,但二者有区别。
语法:
alias path;
说明:alias是用来设置文件资源路径的,与root的不同点在于如何解读location后面的uri参数,alias和root会以不同的方式将用户请求映射到真正的磁盘文件上。
例如,有一个请求的uri是/config/nging.conf,而实际文件是在/usr/local/nginx/conf /nginx.conf,那么可以用下面两种方式设置:
location /conf {
alias /usr/local/nginx/conf /;
}
location /conf {
root /usr/local/nginx
}
参考:
OpenResty 搭建文件服务器
Nginx --sendfile配置
Module ngx_http_autoindex_module
Module ngx_http_dav_module
Openresty学习(五):nginx作为文件服务器使用
openresty实现图片(文件)服务器
Nginx+Lua 搭建文件服务器
openresty(nginx) 配置 http与https使用同一个端口,禁止 IP 直接访问