我有一个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 /”文件夹中缺少文件有关。
我将非常高兴获得任何帮助。
答案 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