Nginx 限制上传文件大小,大文件失败

      • 一 故障原因
      • 二 解决步骤
      • 三 注意事项

Nginx 限制上传文件大小,大文件失败_第1张图片

  • 问题描述: 公司ios和Android客户端时有上传图片失败的情况,经过测试确认只有大文件上传失败。

  • nginx.conf 配置

#user nobody;
worker_processes  4; # 进程数,建议跟CPU核数相同

error_log  logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
    worker_connections  65535; # origin is 1024
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8; # 头文件中的默认的字符集

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    server_names_hash_bucket_size 1280;

    client_header_buffer_size 1280m;
    large_client_header_buffers 4 1280m;
    client_max_body_size 1000m; # 允许客户端请求的最大单文件字节数
    client_body_buffer_size 2560m; # 缓冲区代理缓冲用户端请求的最大字节数

    server_tokens  off;
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;

    keepalive_timeout  10; # 原始值为 65

    proxy_connect_timeout 60;
    proxy_read_timeout 60;
    proxy_send_timeout 60;
    proxy_buffer_size 32k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k; # 缓存文件夹大小
    proxy_temp_path /tmp/proxy_temp_dir; # 缓存目录
    proxy_cache_path /tmp/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=7d max_size=2g;

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 5m;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/javascript application/xml application/xml+rss;

    include conf.d/*.conf;

}

一、 故障原因

  • 当上传的文件大于 “proxy_temp_file_write_size“ 设置的值时,nginx会先将文件写入“proxy_temp_path ”缓存目录(默认为nginx安装目录下/proxy_temp目录)
  • 3服务器没有创建 /tmp/proxy_temp_dir 目录
  • 4服务器 /tmp/proxy_temp_dir nobody用户没有写权限

二、 解决步骤

  • 3 服务器:创建 /tmp/proxy_temp_dir 更改拥有者为nobody
  • 4 服务器:/tmp/proxy_temp_dir 更改拥有者为nobody
  • nginx 重启 问题解决

三、 注意事项

  • nginx 如果开启缓存参数,当前运行nginx的用户对两个参数设置的目录和上层目录一定要有写入权限。
    • proxy_temp_path
    • proxy_cache_path

你可能感兴趣的:(Troubleshooting)