我在Laravel 5.4中编写应用程序并将其停靠。要在我的托管中使用子域,我使用jwilder/nginx-proxy
反向代理将请求重定向到我的容器。在我的应用程序中允许用户上传文件,但是,当我在我的主机上运行它并发送POST" multipart / form-data"请求大于8kb的文件,然后laravel返回TokenMismatchException
。这是我的配置:
在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
(对于nginx配置)我有;
server_tokens off;
client_max_body_size 0;
:(
答案 0 :(得分:0)
我花了很多时间来测试不同的方法,最终我发现了两个解决方案。文件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;
。