Fork me on GitHub

Nginx配置,413 Request Entity Too Large错误解决

今天有同事找我,说图片上传之后,不知道去哪里了。分析了一下问题,找到原因之后做了处理,这里简要记录一下。

问题原因:

1.首先后台log并无错误信息;

2.捡查了一下浏览器,发现network中有报错,413 Request Entity Too Large,但前台未报错。

 

解决办法:

1.备份Nginx配置文件;(个人习惯,免得修改之后,如果需要还原,忘记原来的配置)

2.查看当前Nginx配置文件:

[root@VM_0_16_centos nginx]# cat nginx.conf | grep client_max_body_size

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

            client_max_body_size    10m;

结果发现涉及到很多项目,继续查询

cat /etc/nginx/nginx.conf | grep -C 10 client_max_body_size

得到结果如下:

[root@VM_0_16_centos nginx]# cat /etc/nginx/nginx.conf | grep -C 10 client_max_body_size
        # Load configuration files for the default server block.
        #include /etc/nginx/default.d/*.conf;

        location  ^~ /b1/ {
            proxy_pass http://b1_server/;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            # client_max_body_size    10m;

        access_log  /logs/nginx/access_api_b1.log  main;
            error_log /logs/nginx/error_api_b1.log info;
        }

        location ^~ /bn/ {
            proxy_pass http://bn_server/;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            # client_max_body_size    10m;

       access_log  /logs/nginx/access_api_bn.log  main;
           error_log /logs/nginx/error_api_bn.log info;
        }

    # 由于boss程序中web路径已经带/boss前缀,所以proxy_pass不能带/后缀,后续再调整,切记切记!
        location ^~ /boss/ {
            proxy_pass http://boss_server;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            # client_max_body_size    10m;

        access_log  /logs/nginx/access_api_boss.log  main;
            error_log /logs/nginx/error_api_boss.log info;
        }

        location ^~ /detector/ {
            proxy_pass http://detector_server/;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            client_max_body_size    10m;
        
        access_log  /logs/nginx/access_api_detector.log  main;
            error_log /logs/nginx/error_api_detector.log info;
        }

        location ^~ /sales/ {
            proxy_pass http://sales_server/;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            # client_max_body_size    10m;

         access_log  /logs/nginx/access_api_sales.log  main;
            error_log /logs/nginx/error_api_sales.log info;
        }

        location ^~ /qn/prv/ {
            proxy_pass http://private.haochuang.cn/;
        }

        location ^~ /qn/pub/ {
--
            error_log /logs/nginx/error_admin_boss.log info;
        }

        location ^~ /boss/ {
            proxy_pass http://boss_server;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            # client_max_body_size    10m;

        access_log  /logs/nginx/access_api_boss.log  main;
            error_log /logs/nginx/error_api_boss.log info;
        }
    
    location ^~ /stats/ {
            proxy_pass http://stats_server;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header  Host  $http_host;
            proxy_set_header Connection close;
            proxy_connect_timeout 5000ms;
            client_max_body_size    10m;

            access_log  /logs/nginx/access_api_stats.log  main;
            error_log /logs/nginx/error_api_stats.log info;
        }


     location ^~ /qn/prv/ {
            proxy_pass http://private.haochuang.cn/; 
    }

 

3.修改配置文件:

location / {
            root   html;
            index  index.html index.htm;
   client_max_body_size    1000m;
  }

 

修改client_max_body_size 配置:

server
{
    listen   80;
    server_name  chat.erp.360buy.com;
    #access_log    /export/servers/nginx/logs/chat.erp.360buy.com;
    location / {
        proxy_pass     http://tomcat;
        client_max_body_size    10m; #表示最大上传10M,需要多大设置多大。
} }

 

3.重新加载配置文件,并重新加载nginx:

[root@VM_0_16_centos nginx]# /usr/sbin/nginx  -c /etc/nginx/nginx.conf

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)

nginx: [emerg] still could not bind()

[root@VM_0_16_centos nginx]# /usr/sbin/nginx  -s reload

4.如果还未生效,重启nginx:

[root@VM_0_16_centos nginx]# /usr/sbin/nginx  -s reload

[root@VM_0_16_centos nginx]# service nginx restart

Redirecting to /bin/systemctl restart  nginx.service

5.再次验证结果,结果可见,最终问题已解决。

 
附录:
1.测试nginx配置是否正确
/usr/local/nginx/sbin/nginx -t

2.重新加载nginx,nginx相关参数

[root@VM_0_16_centos nginx]# which nginx

/usr/sbin/nginx

[root@VM_0_16_centos nginx]# /usr/sbin/nginx -h

nginx version: nginx/1.12.2

Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

 

Options:

  -?,-h         : this help

  -v            : show version and exit

  -V            : show version and configure options then exit

  -t            : test configuration and exit

  -T            : test configuration, dump it and exit

  -q            : suppress non-error messages during configuration testing

  -s signal     : send signal to a master process: stop, quit, reopen, reload

  -p prefix     : set prefix path (default: /usr/share/nginx/)

  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)

  -g directives : set global directives out of configuration file

 

 

 ...

posted @ 2018-11-12 14:10  念槐聚  阅读(677)  评论(0编辑  收藏  举报

IT技术&应用开发&研究 - 创建于 2008年05月12日

这是一位IT工程师的个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

致力于软件学习&研究工作,涉及Linux与软件开发出、测试、产品、行业相关知识,关注互联网前沿技术与与创业趋势等。


博客园 | Github | W3C

返回顶部