Rumah pembangunan bahagian belakang tutorial php 解决nginx下载大文件出现文件损坏,文件大小不一致

解决nginx下载大文件出现文件损坏,文件大小不一致

Jul 29, 2016 am 09:05 AM
fastcgi nginx timeout

小伙伴今天反馈了一个问题,说,网页上传了一个2MB的文件,在网页下载时,只有64KB,并且打开失败。确认该BUG确实存在且必现后,我,踏上了调试解决此BUG之路。

1、系统是nginx+php+mysql,凭经验判断与mysql无关,可以无视TA。
2、从PHP网页上传2MB文件后,直接在服务器打开该文件,可以正常查阅,并且与原文件二进制一样。
3、用不同浏览器,不同电脑反复从PHP网页下载该文件,发现下载的文件均只有64KB。
4、换一个体积只有90KB的文件,从PHP网页上传下载,均无异常。
通过以上4点,基本可以判定,问题出在nginx上。这时候,打开nginx的日志文件,发现如下错误log,
[crit] 21636#0: *843968 open() “/home/www/local/nginx/fastcgi_temp/0/11/0000000110” failed (13: Permission denied) while reading upstream,…..
可以大胆猜测,由于没有足够权限操作fastcgi_temp文件夹,所以无法得到正常的文件,于是,为该文件夹赋上权限后,问题解决。

回头看,这到底是什么原因呢?

查看nginx配置文件,可以找到下面这一段:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
**fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;**
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
每次下载失败时文件的大小总是64KB,应该跟这里有关。原来,nginx会使用fastcgi_buffer_size指定的大小的缓冲区用于缓存fastcgi流的内容。当大小超出此大小时会继续用fastcgi_buffers指定的数量和大小申请缓冲区。如果依然超出此大小,会将多出的内容写入临时文件。也就是说,在本情况下,nginx首先会使用一个64K的缓冲区缓冲fastcgi流的第一部分,超出后最多申请4*64K=256K的缓冲区用于缓冲。如果继续超出,则写入临时文件。所以,在下载大于256K文件的时候,需要用到临时文件夹进行缓冲,而这里没有权限操作,就导致了该问题。

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了解决nginx下载大文件出现文件损坏,文件大小不一致,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1659
14
Tutorial PHP
1259
29
Tutorial C#
1233
24
Cara Mengkonfigurasi Nginx di Windows Cara Mengkonfigurasi Nginx di Windows Apr 14, 2025 pm 12:57 PM

Bagaimana cara mengkonfigurasi nginx di Windows? Pasang Nginx dan buat konfigurasi hos maya. Ubah suai fail konfigurasi utama dan sertakan konfigurasi hos maya. Mulakan atau Muat semula Nginx. Uji konfigurasi dan lihat laman web. Selektif membolehkan SSL dan mengkonfigurasi sijil SSL. Selektif tetapkan firewall untuk membolehkan trafik port 80 dan 443.

Cara Memulakan Bekas oleh Docker Cara Memulakan Bekas oleh Docker Apr 15, 2025 pm 12:27 PM

Docker Container Startup Langkah: Tarik Imej Bekas: Run "Docker Pull [Mirror Name]". Buat bekas: Gunakan "Docker Buat [Pilihan] [Nama Mirror] [Perintah dan Parameter]". Mulakan bekas: Jalankan "Docker Start [Nama Container atau ID]". Semak Status Kontena: Sahkan bahawa bekas sedang berjalan dengan "Docker PS".

Cara memeriksa nama bekas Docker Cara memeriksa nama bekas Docker Apr 15, 2025 pm 12:21 PM

Anda boleh menanyakan nama kontena Docker dengan mengikuti langkah -langkah: Senaraikan semua bekas (Docker PS). Tapis senarai kontena (menggunakan arahan grep). Mendapat nama kontena (terletak di lajur "Nama").

Cara memeriksa sama ada nginx dimulakan Cara memeriksa sama ada nginx dimulakan Apr 14, 2025 pm 01:03 PM

Bagaimana untuk mengesahkan sama ada nginx dimulakan: 1. Gunakan baris arahan: status sistem sistem nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. Periksa sama ada port 80 dibuka; 3. Semak mesej permulaan Nginx dalam log sistem; 4. Gunakan alat pihak ketiga, seperti Nagios, Zabbix, dan Icinga.

Cara membuat bekas untuk Docker Cara membuat bekas untuk Docker Apr 15, 2025 pm 12:18 PM

Buat bekas di Docker: 1. Tarik Imej: Docker Pull [Nama Cermin] 2. Buat bekas: Docker Run [Options] [Mirror Name] [Command] 3. Mulailah bekas: Docker Start [Nama Container]

Cara memeriksa versi nginx Cara memeriksa versi nginx Apr 14, 2025 am 11:57 AM

Kaedah yang boleh menanyakan versi nginx adalah: gunakan perintah nginx -v; Lihat arahan versi dalam fail nginx.conf; Buka halaman ralat Nginx dan lihat tajuk halaman.

Cara mengkonfigurasi nama domain pelayan awan di nginx Cara mengkonfigurasi nama domain pelayan awan di nginx Apr 14, 2025 pm 12:18 PM

Cara mengkonfigurasi nama domain Nginx pada pelayan awan: Buat rekod yang menunjuk ke alamat IP awam pelayan awan. Tambah blok hos maya dalam fail konfigurasi Nginx, menyatakan port pendengaran, nama domain, dan direktori akar laman web. Mulakan semula nginx untuk memohon perubahan. Akses konfigurasi ujian nama domain. Nota Lain: Pasang sijil SSL untuk membolehkan HTTPS, pastikan firewall membenarkan trafik port 80, dan tunggu resolusi DNS berkuatkuasa.

Apa yang perlu dilakukan jika pelayan nginx digantung Apa yang perlu dilakukan jika pelayan nginx digantung Apr 14, 2025 am 11:42 AM

Apabila pelayan Nginx turun, anda boleh melakukan langkah penyelesaian masalah berikut: periksa bahawa proses Nginx sedang berjalan. Lihat log ralat untuk mesej ralat. Semak sintaks konfigurasi Nginx. Pastikan Nginx mempunyai keizinan yang anda perlukan untuk mengakses fail. Semak deskriptor fail untuk membuka had. Sahkan bahawa Nginx sedang mendengar di port yang betul. Tambah peraturan firewall untuk membolehkan trafik nginx. Semak tetapan proksi terbalik, termasuk ketersediaan pelayan backend. Untuk bantuan lanjut, sila hubungi Sokongan Teknikal.

See all articles