Centos

文件上傳 > 100KB 掛起,沒有 apache 錯誤

  • May 27, 2020

最初發佈在 stackoverflow 上,但已刪除並移至此處。

阿帕奇 2.4.6 – PHP 7.0 – CentOS 7

VM 記憶體:8GB – CPU:2 – 可用 HD:約 200GB

有一個奇怪的問題,文件上傳超過 100KB 只是坐在那裡掛起,什麼都不做。

我已經多次增加了所有相關的配置設置,上傳大小和文章最大值高達 2GB,但沒有任何區別。

<= 100KB 的文件會立即上傳,但一個 200KB 的文件就在那裡。


這是我目前正在使用的測試腳本:

&lt;?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('html_errors', 1);
error_reporting(E_ALL);

echo 'file_uploads: ' . ini_get('file_uploads') . '&lt;br&gt;';
echo 'max_execution_time: ' . ini_get('max_execution_time') . '&lt;br&gt;';
echo 'memory_limit: ' . ini_get('memory_limit') . '&lt;br&gt;';
echo 'post_max_size: ' . ini_get('post_max_size') . '&lt;br&gt;';
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . '&lt;br&gt;';
echo 'max_input_time: ' . ini_get('max_input_time') . '&lt;br&gt;';


if (isset($_FILES['file'])){
 print_r($_FILES['file']);
}
?&gt;

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt;

&lt;form action="test.php" method="post" enctype="multipart/form-data"&gt;
   Select image to upload:
   &lt;input type="file" name="file" id="fileToUpload"&gt;
   &lt;input type="submit" value="Upload Image" name="submit"&gt;
&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;

這是腳本中列印的配置設置列表:

file_uploads: 1
max_execution_time: 120
memory_limit: 512M
post_max_size: 100M
upload_max_filesize: 100M
max_input_time: 120

嘗試上傳,httpd 錯誤日誌中沒有列印任何內容。

這是error_log,重啟httpd後:

[Mon Jul 30 10:11:33.843669 2018] [mpm_prefork:notice] [pid 3811] AH00170: caught SIGWINCH, shutting down gracefully
[Mon Jul 30 10:11:35.103671 2018] [core:notice] [pid 3897] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Jul 30 10:11:35.105963 2018] [suexec:notice] [pid 3897] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.8.6.155. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 30 10:11:35.168442 2018] [auth_digest:notice] [pid 3897] AH01757: generating secret for digest authentication ...
[Mon Jul 30 10:11:35.170108 2018] [lbmethod_heartbeat:notice] [pid 3897] AH02282: No slotmem from mod_heartmonitor
[Mon Jul 30 10:11:35.356666 2018] [mpm_prefork:notice] [pid 3897] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.30 configured -- resuming normal operations
[Mon Jul 30 10:11:35.356845 2018] [core:notice] [pid 3897] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

這是嘗試上傳 200KB 文件後的 error_log,在程序最終崩潰並且我在瀏覽器中收到錯誤頁面(我沒有收到 500 錯誤或任何內容,只是“此頁面無法正常工作。頁面沒有發送任何數據。ERR_EMPTY_RESPONSE"):

[Mon Jul 30 10:11:33.843669 2018] [mpm_prefork:notice] [pid 3811] AH00170: caught SIGWINCH, shutting down gracefully
[Mon Jul 30 10:11:35.103671 2018] [core:notice] [pid 3897] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Jul 30 10:11:35.105963 2018] [suexec:notice] [pid 3897] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.8.6.155. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 30 10:11:35.168442 2018] [auth_digest:notice] [pid 3897] AH01757: generating secret for digest authentication ...
[Mon Jul 30 10:11:35.170108 2018] [lbmethod_heartbeat:notice] [pid 3897] AH02282: No slotmem from mod_heartmonitor
[Mon Jul 30 10:11:35.356666 2018] [mpm_prefork:notice] [pid 3897] AH00163: Apache/2.4.6 (CentOS) PHP/7.0.30 configured -- resuming normal operations
[Mon Jul 30 10:11:35.356845 2018] [core:notice] [pid 3897] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

因此,error_log 中沒有添加任何新內容。我不知道這些啟動錯誤中的任何一個是否相關,但我在其他 centos 伺服器上得到了一些,它們的上傳工作正常。


我試過了:

  • 更改 php.ini 和腳本本身中的配置設置
  • 刪除 php 7.2 並安裝 php 7.0
  • 刪除 httpd 並重新安裝
  • 檢查以確保任何 apache conf 文件中都沒有 LimitRequestBody
  • 將 tmp 上傳目錄設置為 /tmp
  • 完全禁用selinux
  • 重啟整機

聽起來與此非常相似:https ://stackoverflow.com/questions/6970317/uploading-100kb-zip-files-gives-an-internal-server-error

但我沒有安裝 mod_fcgid。

這是我的完整 phpinfo:https ://files.fm/u/dthwdvna

我現在完全不知所措。我不知道我是否忽略了一些非常簡單的事情,或者它是否是一個複雜的問題,但除了重新創建整個伺服器之外,我已經沒有其他想法了。

這是一個空白的 CentOS 7 最小安裝,帶有 yum install httpd 等……我在其他伺服器上做過很多次,從來沒有遇到過這個問題。

從來沒有真正弄清楚到底是什麼問題,但是從使用 IP 地址切換到內部域似乎可以解決它,所以它是網路上某個地方的東西,雖然不知道是什麼。

引用自:https://serverfault.com/questions/924072