绕过 Elasticbeanstalk 中托管的 api 响应上的 NGINX 413 错误页面
Posted
技术标签:
【中文标题】绕过 Elasticbeanstalk 中托管的 api 响应上的 NGINX 413 错误页面【英文标题】:Bypass NGINX 413 error page on api response hosted in Elasticbeanstalk 【发布时间】:2020-10-17 12:42:30 【问题描述】:我最近将我们用 apache 托管的旧 Laravel 应用程序迁移到了一个新的以 nginx 作为代理服务器的 elasticbeanstalk。除了最大上传大小外,一切都按预期工作。我已经实现了client_max_body_size 10M;
,它可以正常工作。
我的问题是当我上传一个更大的文件 (15mb) 时,我的 api 没有返回一个带有 laravel 验证错误的 api 响应。在新的elasticbeanstalk中,api响应是nginx的413错误html。在我的 apache(旧 elasticbeanstalk)中,最大文件大小错误显示为来自 laravel 验证的 JSON。
nginx 响应错误
有没有办法绕过默认的 apache 413 html 错误,而是使用 laravel 文件上传最大大小验证?
顺便说一句:我对 nginx 非常不熟悉,所以我仍在尝试了解 nginx 的工作原理。谢谢!
我的 nginx 配置文件:
location /
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
nginx 的默认 php.conf
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;
【问题讨论】:
我认为你必须进一步增加client_max_body_size
才能让 PHP 甚至有机会处理请求。我不知道 laravel,但是这些天 javascript 可以在提交表单之前检查文件的大小,所以最好的选择是在文件上传开始之前显示错误。
嗨@stefansundin 感谢您的回复,我确实增加了我的client_max_body_size,现在它可以工作了!你说的是正确的,该文件已通过 laravel (PHP) 验证
请确保此配置正在部署到所有 eb 实例。我遇到了这样的问题,并通过下面的线程解决了。 ***.com/questions/18908426/…
@user3883507 很高兴它解决了您的问题。我将其发布为正确答案,因此您可以接受。谢谢!
【参考方案1】:
您必须进一步增加client_max_body_size
才能让 PHP 有机会接收请求并返回任何类型的错误。
我不知道 laravel,但是现在 JavaScript 可以在提交表单之前检查文件的大小,所以最好的选择是在文件上传开始之前显示错误。
【讨论】:
以上是关于绕过 Elasticbeanstalk 中托管的 api 响应上的 NGINX 413 错误页面的主要内容,如果未能解决你的问题,请参考以下文章
在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是啥?