Nginx和PHP-FPM-下载大小限制为〜3MB

时间:2019-05-09 12:52:46

标签: php nginx fpm

我有一个CSV下载,使用Docker,Nginx和PHP-FPM,一切正常,直到下载 变得更大,然后增加2-3 MB。生成的CSV文件存在于php容器中(在我的tmp中 目录/ var / www / symfony / var / tmp / ...,看起来不错),但Nginx无法为它们提供服务。 Nginx错误日志显示了这一点

  

2019/05/09 12:09:29 [crit] 7#7:* 747 open()   “ / var / tmp / nginx / fastcgi / 2/07/0000000072”失败(13:权限   拒绝),同时读取上游,客户端:172.18.0.1,服务器:,   请求:“获取/ catalog-download HTTP / 1.1”,上游:   “ fastcgi://172.18.0.3:9001”,主机:“ localhost”,引荐来源网址:   “ http://localhost/catalog

好像我的csv文件不存在,Nginx或某人应该将它们移至 Nginx tmp文件夹。

有一些关于Nginx下载问题的文章,但其中大多数 遇到300MB及更大的问题。所以我认为我的问题有所不同。下装 很好,但限制为<〜2-3MB。

Nginx Config是

user www;

worker_processes 4;
pid /run/nginx.pid;

events {
    worker_connections  2048;
    multi_accept on;
    use epoll;
}

http {
    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 15;
    types_hash_max_size 2048;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log off;
    error_log off;
    gzip on;
    gzip_disable "msie6";
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    open_file_cache max=100;
    client_body_temp_path /tmp 1 2;
    client_body_buffer_size 256k;
    client_body_in_file_only off;
    client_max_body_size 50M;
}

upstream php-upstream {
    server php:9001;
}

server {
    listen 80;
    server_name mydomain.tk;
    server_tokens off;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name mydomain.tk;
    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/mydomain.tk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.tk/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/symfony/public;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/.+\.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_read_timeout 240;
        internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
}

PHP FPM配置为

[symfony]
user = www
group = www
listen = 0.0.0.0:9001
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
catch_workers_output = yes
request_terminate_timeout = 240

php.ini中的更改为

date.timezone = 'Europe/Berlin'
memory_limit = 512M

opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
realpath_cache_size = 4096K
realpath_cache_ttl = 600

post_max_size = 50M
upload_max_filesize = 50M
max_execution_time = 240
sendmail_path = "/usr/bin/msmtp -t"

但是目前,我不认为PHP-FMP存在问题,因为存在csv文件。它与“ / var / tmp / nginx / fastcgi /”文件夹中缺少文件有关。

我将非常高兴获得任何帮助。

2 个答案:

答案 0 :(得分:0)

幸运的是,阅读这篇文章后,我能够找到解决方案

https://serverfault.com/questions/235154/permission-denied-while-reading-upstream

我添加了权利“ chown www.www / var / tmp / nginx /” 因此nginx可以使用他的tmp文件夹。

似乎,nginx仅在需要时是自己的tmp文件夹 文件变得大于2-3 MB。非常棘手。 我以为存在版权,是因为少量下载就可以了...

答案 1 :(得分:0)

php.ini 文件中搜索以下文本:

;是否允许HTTP文件上传。 file_uploads =开

; HTTP上载文件的临时目录(如果未指定,将使用系统默认值)。

; upload_tmp_dir =

;上载文件的最大允许大小。 upload_max_filesize = 128M