【问题标题】:Laravel POST TokenMismatchException for files bigger than 8kb/16KB (and 2MB) when jwilder/nginx-proxy当 jwilder/nginx-proxy 时,对于大于 8kb/16KB(和 2MB)的文件,Laravel POST TokenMismatchException
【发布时间】:2017-09-19 16:07:21
【问题描述】:

我在 Laravel 5.4 中编写应用程序并将其 docker 化。要在我的主机中使用子域,我使用 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;

:(

【问题讨论】:

    标签: laravel post nginx docker reverse-proxy


    【解决方案1】:

    我花了很多时间来测试不同的方法,最后我找到了两个解决方案。文件my_proxy.conf 应如下所示:

    server_tokens off;
    client_max_body_size 0;
    proxy_request_buffering off;
    

    或者像这样(以文件

    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;

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2019-07-01
      • 2020-05-03
      • 2020-12-31
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多