Nginx

是什麼導致上傳時 wordpress 文件為空錯誤?

  • May 22, 2016

當我嘗試在 wordpress 中上傳任何內容時,我似乎無法弄清楚為什麼會得到以下資訊……對於媒體上傳和 wordpress 導入 xml:

“抱歉,出現錯誤。文件為空。請上傳更多內容。此錯誤也可能是由 php.ini 中禁用上傳或 post_max_size >定義為小於 php.ini 中的 upload_max_filesize 引起的。 "

似乎很少有關於如何通過 nginx/php-fpm 線上解決此問題…其中大部分是關於 php.ini max configs 或 chmod,其中…在我的設置中post_max_size足夠大以及(以及超時)……並且 chmod/chown 似乎對於使用單獨的 php 池是正確的。也許有人可以對此做出正面或反面?upload_max_filesize``/etc/php5/fpm/php.ini

這是我的設置:

  • Cloudflare(已關閉)到浮動 IP
  • Digitalocean 浮動 IP 到 droplet
  • Droplet 是帶有 nginx 的 Ubuntu 14.04,使用 php-fpm 並為每個 wordpress ms 安裝創建池(x4 atm)
  • SSL with Let’s encrypt 用於每個 wpms 安裝
  • Chmod 755 用於站點根目錄中的所有 wpms 目錄
  • chmod 644 用於每個站點根目錄中的所有 wpms 文件
  • chmod 660 用於 wp-config.php
  • chown 每個 php5-fpm 池使用者在他們自己的站點根目錄中的所有文件/目錄,例如:chown -R example1:example1 /home/example1/*
  • Wordpress 是其 nginx conf 根目錄下的一個目錄。例如/home/example1/app/wordpress_files_here
  • php.ini 已使用定義的目錄(/home/tmp/)啟用上傳

使用者不在 www-data 組或 sudo 組中,我讀到這樣做是一種安全風險,但即便如此,我還是暫時嘗試將它們添加到 www-data 組以查看 wordpress 上傳是否可以工作……它沒有。我也嘗試過 chown example1:www-data 所有權,但沒有用。我也試過 chmod 777 上傳文件夾,沒有用。

錯誤日誌有以下內容:在 wpms-error.log 中(這對我來說也沒有意義)

2016/05/20 01:12:00 [crit] 1584#0: *1251 open() "/home/example1/example1.com-access.log" failed (13: Permission denied) while logging request, client: [my IP address], server: example1.com, request: "POST /wp-admin/admin-ajax.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-example1.sock", host: "example1.com", referrer: "https://example1.com/wp-admin/admin.php?import=wordpress&step=1&_wpnonce=dad4d82487"

在這些站點的 nginx conf 文件中,我有: access_log /home/example1/$host-access.log;

在 nginx.conf 中啟用了訪問日誌(即使不推薦),但每個站點的訪問日誌並未寫入其站點根目錄。

所以…在嘗試了我在網上閱讀的所有內容之後…我什至還沒有找出根本問題是什麼…因為僅文件權限似乎不是嗎?.. 是嗎???

以下(將使用者名更改為 example1 等後)是ps aux | grep php結果:

root       993  0.0  0.2 266688 11396 ?        Ss   May18   0:10 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
example1  1003  0.0  1.1 302568 45856 ?        S    May18   0:32 php-fpm: pool example1              
example1  1004  0.0  1.1 304620 47808 ?        S    May18   0:31 php-fpm: pool example1             
example2     1005  0.0  1.1 304360 47648 ?        S    May18   0:30 php-fpm: pool example2                   
example2     1007  0.0  1.1 302308 45956 ?        S    May18   0:30 php-fpm: pool example2                  
example3  1008  0.0  0.1 268640  7704 ?        S    May18   0:00 php-fpm: pool example3               
example3  1009  0.0  0.1 268640  7744 ?        S    May18   0:00 php-fpm: pool example3               
www-data  1010  0.0  0.1 266680  7560 ?        S    May18   0:00 php-fpm: pool www                     
www-data  1011  0.0  0.1 266680  7564 ?        S    May18   0:00 php-fpm: pool www                     
example4      1013  0.0  0.9 296016 39704 ?        S    May18   1:24 php-fpm: pool example4                   
example4      1014  0.0  1.3 310952 55024 ?        S    May18   1:23 php-fpm: pool example4                   
example5     1015  0.0  1.0 297352 40940 ?        S    May18   0:32 php-fpm: pool example5                  
example5     1016  0.0  1.1 305104 48232 ?        R    May18   0:32 php-fpm: pool example5                  
example4      1105  0.0  0.9 296016 39596 ?        S    May18   1:20 php-fpm: pool example4                    
example1  1313  0.0  0.9 296284 39884 ?        S    May18   0:31 php-fpm: pool example1              
example2     1317  0.0  1.1 304364 47628 ?        S    May18   0:29 php-fpm: pool example2                   
example5     1332  0.0  0.9 296880 39056 ?        S    May18   0:29 php-fpm: pool example5                   
example3  3727  0.0  0.0  11744   932 pts/1    S+   18:42   0:00 grep --color=auto php

上面的 example3 不是 wpms 站點,它只是一個空的 root atm,並且該使用者也在 sudo 組中,並且擁有自己的 ssh 登錄名。我不知道這是否相關。

這對我來說聽起來像是一個權限問題,可能是圍繞組。我將在本教程中詳細介紹,但要點如下

首先是我用來重置權限的腳本

chown -R tim:www-data *
find /var/www/wordpress -type d -exec chmod 755 {} \;
find /var/www/wordpress -type f -exec chmod 644 {} \;
find /var/www/wordpress/wp-content/uploads -type f -exec chmod 664 {} \;
find /var/www/wordpress/wp-content/plugins -type f -exec chmod 664 {} \;
find /var/www/wordpress/wp-content/themes -type f -exec chmod 644 {} \;
chmod 440 /var/www/wordpress/wp-config.php
chmod -R g+s /var/www/wordpress/

以下是我教程的要點——其中的資訊來自 wordpress.org 網站,大部分情況下,我的教程中有參考資料

  • 將所有者設置為您之前創建的使用者,並將所有權組設置為 www-data
  • 文件夾預設為 755,標準
  • 文件預設為所有者可寫,所有人可讀
  • 上傳使用者和網路伺服器可寫的文件夾,因此媒體可以由使用者上傳
  • 使用者和 Web 伺服器可寫的 Plugins 文件夾,因此可以添加外掛
  • 主題文件夾只能由所有者修改

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