為什麼 Phplist 響應 500 內部伺服器錯誤?
我剛剛重新安裝了 phplist,但是當我嘗試在瀏覽器中訪問它時,我得到一個帶有狀態程式碼的空頁面:
"500 Internal Server Error"
我正在執行 CentOS 7,並且 Phplist 正在使用 Php v5.6.33 的 Apache v2.4.6 上提供服務。
我可以在我的 apache 中看到查詢
access_log
,但 error_log 中沒有條目。vhost 配置文件和.htaccess
文件似乎都正常。請幫助我調試為什麼 phplist 在全新安裝後給我一個 500 錯誤。
在研究了 phplist 程式碼幾個小時後,我通過在我的伺服器上安裝 libsodium 來解決這個問題。
首先,我發現——預設情況下——phplist 會禁止將錯誤寫入日誌。這在任何地方都沒有記錄,所以我在他們的文件頁面上留下了一個註釋,要求他們記錄如何重新啟用將錯誤消息寫入日誌文件(下面的連結)
因此,為了防止 phplist 抑制日誌文件中的錯誤,您需要更改
error_reporting(0)
為error_reporting(1)
in'lists/admin/init.php'
和我在此處描述'lists/admin/index.php'
的。然後我能夠看到文件在 apache
error_log
文件中引發了以下異常,該'lists/admin/inc/random_compat/random.php'
文件是random_compat
phplist 中包含的庫的一部分。[Thu Aug 23 00:06:29.560157 2018] [:error] [pid 17617] [client 127.0.0.1:51262] PHP Fatal error: Uncaught exception 'Exception' with message 'There is no suitable CSPRNG installed on your system' in /var/www/html/phplist.opensourceecology.org/public_html/lists/admin/inc/random_compat/random.php:204\nStack trace:\n#0 /var/www/html/phplist.opensourceecology.org/public_html/lists/admin/defaultconfig.php(3): random_bytes(10)\n#1 /var/www/html/phplist.opensourceecology.org/public_html/lists/admin/index.php(103): require_once('/var/www/html/p...')\n#2 {main}\n thrown in /var/www/html/phplist.opensourceecology.org/public_html/lists/admin/inc/random_compat/random.php on line 204
維護者的官方回應(參見 github 上 random_compat repo 的 issue #99)是簡單地添加
'/dev/urandom'
到open_basedir
in'/etc/php.ini'
. 就個人而言,這似乎不是最明智的選擇..或者,我決定安裝 libsodium。在 CentOS 7 中,這意味著只需安裝
'php-pecl-libsodium'
軟體包並重新啟動 apache 網路伺服器。yum install php-pecl-libsodium httpd -t && service httpd restart
有關此錯誤的更多資訊,請參閱我的文章,標題為fix phplist 500 error due to random_compat。