对于jwilder / nginx-proxy大于8kb / 16KB(和2MB)的文件,Laravel POST TokenMismatchException

我在Laravel 5.4中编写应用程序并对其进行docker化。 要在我的主机中使用子域名,我使用jwilder/nginx-proxy反向代理将请求redirect到我的容器。 在我的应用程序允许用户上传文件,但是,当我在我的主机上运行它,并发送POST“multipart / form-data”请求大于8kb的文件,然后laravel返回TokenMismatchException 。 这是我的configuration:

在我使用的Dockerfile

 FROM php:7.1.5-alpine ... ADD ./uploads.php.ini /usr/local/etc/php/conf.d/uploads.ini ... CMD ... && php artisan serve --host=0.0.0.0 --port=80 

uploads.php.ini我有:

 file_uploads = On memory_limit = 100M upload_max_filesize = 200M post_max_size =500M max_execution_time = 600 

我以这种方式运行jwilder / nginx-proxy:

 docker pull jwilder/nginx-proxy:alpin docker run -d -p 80:80 -p 443:443 -v /path/on/host/to/my_proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy:alpine 

my_proxy.conf (对于nginxconfiguration)我有;

 server_tokens off; client_max_body_size 0; 

🙁

我花了很多时间来testing不同的方法,Finnalyfind了两个解决scheme。 文件my_proxy.conf应该看起来像这样:

 server_tokens off; client_max_body_size 0; proxy_request_buffering off; 

或者像这样(以文件<= 10MB为例)

 server_tokens off; client_max_body_size 0; client_body_buffer_size 10M; 

server_tokens on/off不是问题解决scheme的一部分。

可能问题是因为nginx将“大”请求分为较小的一个,并将它们分别“代理”(因此,只允许“大”请求的第一部分/一部分而不授权其他部分)。

当然,首先提出的解决scheme更好,因为我们不需要设置任何限制。 但是如果有人想把限制设置成代理(例如20MB),那么应该改变client_max_body_size 20M;