2017-06-17 52 views
0

我写在Laravel 5.4应用和dockerized它更大的文件。要在我的主机中使用子域名,我使用jwilder/nginx-proxy反向代理将请求重定向到我的容器。在我的应用程序允许用户上传文件,但是,当我在我的主机上运行它并发送POST“multipart/form-data”请求大于8kb的文件时,laravel返回TokenMismatchException。下面是我的配置:Laravel POST TokenMismatchException超过8KB/16KB(和2MB)时jwilder/nginx的代理

在我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的代理这样:

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(对于nginx配置)我有;

server_tokens off; 
client_max_body_size 0; 

:(

回答

0

我花了很多时间来测试不同的方法和finnaly我发现了两个解决方案文件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不是问题解决方案的一部分。

可能是问题,因为nginx将'大'请求分为较小的和'代理'他们分开(所以laravel只授权'大'请求的第一部分/部分,而不授权其他部分)。

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

相关问题