大文件上传
client_max_body_size 1000m;
client_header_timeout 1m;
client_body_timeout 5m;
proxy_connect_timeout 60s;
proxy_read_timeout 1m;
proxy_send_timeout 1m;
send_timeout 20s;
每个参数的意思:
client_max_body_size
限制请求体的大小,若超过所设定的大小,返回413错误。
client_header_timeout
读取请求头的超时时间,若超过所设定的大小,返回408错误。
client_body_timeout
读取请求实体的超时时间,若超过所设定的大小,返回413错误。
proxy_connect_timeout
http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。
此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。
proxy_read_timeout
http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。
此参数即为服务器响应时间,默认60秒。
proxy_send_timeout
http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
send_timeout
服务器把结果返回的时间
大文件上传费时的是文件到代理服务器(Nginx)的时间,所以proxy_xxx相关的时间不用配置的过长
动静分离
upstream filetest_psvmc {
server 127.0.0.1:8905;
}
server {
listen 80;
server_name filetest.psvmc.cn;
listen 443;
ssl on;
ssl_certificate /etc/nginx/cert/psvmc.pem;
ssl_certificate_key /etc/nginx/cert/psvmc.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location ^~ /static/ {
index index.html;
root /data/wwwjarapi/8905xhkjfileapitest/;
}
location / {
proxy_pass http://filetest_psvmc/;
proxy_cookie_path / /;
proxy_redirect / /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1000m;
client_body_buffer_size 128k;
client_body_timeout 5m;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_buffer_size 64k;
proxy_buffers 8 64k;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
send_timeout 20s;
}
}
注意
20行的代码root的路径不要配置为/data/wwwjarapi/8905xhkjfileapitest/static/
否则会在static文件夹下再查找static文件夹
location基本语法
- location [=||*|^~|@] pattern{……}
- = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
- ~ 匹配区分大小写的定的正则表达式
- ~* 匹配不区分大小写的定的正则表达式
- ^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配, 那么就停止搜索其他模式了
- !~ 不匹配区分大小写的定的正则表达式
- !~* 不匹配不区分大小写的定的正则表达式
示例
location = / {
# 只匹配 / 的查询.
[ configuration A ]
}
location / {
# 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处理。
[ configuration D ]
}
location ~*.(gif|jpg|swf)$ {
valid_referers none blocked image.psvmc.cn static.psvmc.cn;
if ($invalid_referer) {
#防盗链
rewrite ^/ http://$host/daolian.png;
}
[ configuration E ]
}
各请求的处理如下例:
/ → configuration A
/documents/document.html → configuration B
/images/1.gif → configuration C
/documents/1.jpg → configuration D
查找顺序
- 带有=的精确匹配优先
- 没有修饰符的精确匹配
- 正则表达式按照他们在配置文件中定义的顺序
- 带有^~修饰符的,开头匹配
- 带有~ 或~* 修饰符的,如果正则表达式与URI匹配
- 没有修饰符的,如果指定字符串与URI开头匹配
root、alias指令区别
location /img/ {
alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]
区别
alias是一个目录别名的定义,root则是最上层目录的定义。
alias后面必须要用/结束,否则会找不到文件的 而root则可有可无
文件下载
location /download/ {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Content-Type' 'application/octet-stream';
alias /data/wwwjarapi/8908schoolfiletest/static/;
}
关键语句
add_header 'Content-Type' 'application/octet-stream';