IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx访问日志报错:[error] 4560#4560_ _117823 client intended to send too large body_ 7562419 bytes,错误码413 -> 正文阅读

[系统运维]nginx访问日志报错:[error] 4560#4560_ _117823 client intended to send too large body_ 7562419 bytes,错误码413

问题描述

对接其他系统接口时,对方说请求我们接口报错,让对方发了相关请求报文,查看后台程序日志,发现并没有相关请求报文日志,也没有任何访问信息,猜测是在nginx代理时候就已经出错被拦截。

解决办法

查看nginx访问错误日志,可以看到如下报错:
[error] 4560#4560: *117823 client intended to send too large body: 7562419 bytes
看报错意思是客户端请求体超长。查看nginx相关配置,发现没有额外设置扩大请求体大小。因为nginx默认最大的请求体大小为1M,看报错信息很明显超过了1M(7562419 bytes=7.21M)。通过配置client_max_body_size 20M把请求体最大值设置成20M,避免请求体过长报错解决。

client_max_body_size说明

client_max_body_size可以配置在全局的nginx.conf中的http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者有区别

  • 设置到http{}内,控制全局nginx所有请求报文大小
  • 设置到server{}内,控制该server的所有请求报文大小
  • 设置到location{}内,控制满足该路由规则的请求报文大小

ngix.conf完整配置案例:

user  nginx;

worker_processes  auto;
# worker_cpu_affinity  auto;
worker_rlimit_nofile    65536;

# pid             /data/software/nginx/run/nginx.pid;

events
{
        use     epoll;
        worker_connections      65536;
}

http
{
        include mime.types;
        default_type    application/octet-stream;
        charset  utf-8;

        server_names_hash_bucket_size 128;
      #client_header_buffer_size的配置为4k,如果(请求行+请求头)的大小如果没超过4k,放行请求。
      #如果(请求行+请求头)的大小如果超过4k,则以large_client_header_buffers配置为准
        client_header_buffer_size 4k;
       #large_client_header_buffers的配置为4 32k,则对请求有如下要求
          #请求行(request line)的大小不能超过32k,否则返回414错误
          #请求头(request header)中的每一个头部字段的大小不能超过32k,否则返回400错误(实际是494错误,但nginx统一返回400了)curl -H "header1=aaa" -H "header2=bbb" -v http://127.0.0.1/,这里的header1=xxx和header2=xxx就是请求头中的头部字段
          #(请求行+请求头)的大小不能超过128k(4 * 32k)
        large_client_header_buffers 4 32k;
        #限制请求体的大小,若超过所设定的大小,返回413错误。默认1m
        client_max_body_size 20m;
        # 指定访问日志的格式和存放路径
        access_log  /usr/local/var/log/nginx/access.log  main;
  
        open_file_cache max=65536 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 1;

        sendfile on;
        tcp_nopush on;
        keepalive_timeout 60;
        tcp_nodelay on;
        server_tokens off;
        port_in_redirect off;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 128k;

        #open gzip
        gzip on;
        gzip_vary on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types      text/plain      application/x-javascript text/css application/xml;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";

        #Proxy
        #若上传文件很大,还要适当调整上传超时时间。
        proxy_connect_timeout   600;
        #http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。
        #此参数即为服务器响应时间,默认60秒。
        proxy_read_timeout      600;
        #http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
        proxy_send_timeout      600;
        proxy_buffer_size       32k;
        proxy_buffers   4       128k;
        proxy_busy_buffers_size 256k;
        proxy_temp_file_write_size      256k;

        #Limit
        limit_req_zone $binary_remote_addr  zone=xxx:10m rate=5r/s;

        #Log format
        # 声明日志格式,request_length用来输出每一个请求的大小(请求行+请求头+请求体)
        log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" $http_x_forwarded_for';

        #server
        #{
        #listen 80 default;
        #server_name _;
        #return 403;
        #}

        include vhosts/*.conf;

}

更多nginx相关配置可以查看我这篇文章:nginx安装和配置详解

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:29:48  更:2022-06-01 15:31:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 16:43:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码