1

I recently migrated our old Laravel app hosted with apache to a newer elasticbeanstalk with nginx as the proxy server. Everything is working as expected except the max upload size. I already implemented client_max_body_size 10M; and it works correctly.

My problem is when I upload a bigger file (15mb), instead of my api returning an api response with an error from laravel validatiion. In the new elasticbeanstalk, the api response is the 413 error html of nginx. In my apache (old elasticbeanstalk), max file size error was displayed as JSON from laravel validation.

nginx error on response enter image description here

Is there a way to bypass the default apache 413 html error and instead use laravel file upload max size validation?

btw: I'm very not familiar with nginx so I'm still trying to understand how nginx works. Thank you!

my nginx conf:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
}

the default php.conf for nginx

root /var/www/html/public;

index index.php index.html index.htm;

location ~ \.(php|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;

    fastcgi_intercept_errors on;
    fastcgi_index  index.php;

    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;

    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REQUEST_SCHEME     $scheme;
    fastcgi_param  HTTPS              $https if_not_empty;

    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;

    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param  REDIRECT_STATUS    200;

    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO $fastcgi_path_info;
    fastcgi_pass   php-fpm;

user3883507
  • 69
  • 1
  • 8
  • I think you have to increase `client_max_body_size` even more to let PHP even have a chance to process the request. I don't know laravel, but these days JavaScript can check the size of the file before the form is submitted, so the best option would be to show an error before the file upload even starts. – stefansundin Jun 26 '20 at 21:42
  • Hi @stefansundin Thanks for your reply, I did increase my client_max_body_size and now it works! What you said is correct and the file is validated by laravel (PHP) – user3883507 Jun 27 '20 at 12:08
  • Please make sure this configuration is deploying to all the eb instances. I have faced such issue and it got solved by below thread. https://stackoverflow.com/questions/18908426/increasing-client-max-body-size-in-nginx-conf-on-aws-elastic-beanstalk/61943622#61943622 – Jijo Cleetus Jun 27 '20 at 14:09
  • @user3883507 I am glad it solved your problem. I posted it as a proper answer so you can accept it. Thank you! – stefansundin Jun 27 '20 at 21:24

1 Answers1

1

You have to increase client_max_body_size even more to give PHP a chance to even receive the request and return any kind of error.

I don't know laravel, but these days JavaScript can check the size of the file before the form is submitted, so the best option would be to show an error before the file upload even starts.

stefansundin
  • 2,826
  • 1
  • 20
  • 28