文件上傳 > 100KB 掛起,沒有 apache 錯誤
最初發佈在 stackoverflow 上,但已刪除並移至此處。
阿帕奇 2.4.6 – PHP 7.0 – CentOS 7
VM 記憶體:8GB – CPU:2 – 可用 HD:約 200GB
有一個奇怪的問題,文件上傳超過 100KB 只是坐在那裡掛起,什麼都不做。
我已經多次增加了所有相關的配置設置,上傳大小和文章最大值高達 2GB,但沒有任何區別。
<= 100KB 的文件會立即上傳,但一個 200KB 的文件就在那裡。
這是我目前正在使用的測試腳本:
<?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') . '<br>'; echo 'max_execution_time: ' . ini_get('max_execution_time') . '<br>'; echo 'memory_limit: ' . ini_get('memory_limit') . '<br>'; echo 'post_max_size: ' . ini_get('post_max_size') . '<br>'; echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . '<br>'; echo 'max_input_time: ' . ini_get('max_input_time') . '<br>'; if (isset($_FILES['file'])){ print_r($_FILES['file']); } ?> <!DOCTYPE html> <html> <body> <form action="test.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="file" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html>
這是腳本中列印的配置設置列表:
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
- 重啟整機
但我沒有安裝 mod_fcgid。
這是我的完整 phpinfo:https ://files.fm/u/dthwdvna
我現在完全不知所措。我不知道我是否忽略了一些非常簡單的事情,或者它是否是一個複雜的問題,但除了重新創建整個伺服器之外,我已經沒有其他想法了。
這是一個空白的 CentOS 7 最小安裝,帶有 yum install httpd 等……我在其他伺服器上做過很多次,從來沒有遇到過這個問題。
從來沒有真正弄清楚到底是什麼問題,但是從使用 IP 地址切換到內部域似乎可以解決它,所以它是網路上某個地方的東西,雖然不知道是什麼。