Tag: Apache

Shell Script – 發現 Load Average 高自動執行指令

當系統的 Load Average 很高時, 可能面臨當機的風險, 遇到這個問題可以用 Shell Script 定時檢查系統的 Load Average, 當發現 Load Average 到達某一個設定好的數值時, 便自動執行一些指令, 例如重啟服務, kill process 或向系統管理員發出電郵通知等。以下 Shell Script 會透過定時讀取 /proc/loadavg 的數值, 當發現 Load Average 高時 (以下設定為 …

Shell Script 檢查並自動重啟 Apache httpd

如果主機出現問題時, 可能負載過高或者服務當掉, 最理想的做法還是要找出原因, 很多時只要修改一些設定便可以。 早前遇到一位客戶, 他安裝在 VPS 的 Apache 會無故當掉, 間隔由幾小時到一天不等, 檢查後 Load Average 一點也不高, 當掉後只要重新啟動 Apache 便沒問題, 初部估計可能是 mpm_prefork 的設定問題。由於修改後要觀察一段時間, 這段時間 Apache 也可能當掉, 便寫了這支 Shell Script, 會自動檢查 Apache 是否能回應請求, …

強制 PHP 顯示錯誤訊息

很多主機基於保安理由, 將 PHP 執行時的錯誤訊息隱藏, 當 PHP 程式執行時遇到錯誤, 即使是 run time error 這類錯誤, 都只會顯示空白內容。原因是在 php.ini 設定了這兩行:display_errors = Off error_reporting = Off上面兩個設定, 只要其中其中一個設定成 Off, 都不會顯示錯誤訊息, 這樣對於程式除錯很麻煩, 要暫時顯示 PHP 的錯誤訊息方便除錯, 分別可以修改 PHP 及 …

禁止個別 VirtualHost 或目錄使用 PHP mail() 函式

PHP 的 disable_functions 選項可以停用某些特定的 PHP 函式, 主要是基於安全理由, 將一些對系統有威脅的函式停用, 但 disable_functions 必須透過 php.ini 設定, 因為如果可以在 httpd.conf 或 .htaccess 設定, 使用者便很容易將停用的函式開啟。之前遇到一個情況, 要將個別 VirtualHost 的 mail() 函式停用, 但主機內其他 VirtualHost 仍要繼續開啟 mail()。雖然 disable_functions 不能在 …

個別 VirtualHost 或目錄停用 PHP

在 Linux 安裝 Apache 及 PHP 後, 可以按需要設定個別 VirtualHost 或目錄停用 VirtualHost, 例如一個只用作儲存上載圖片的目錄, 不需要執行 PHP 的權限, 以下的設定方法。VirtualHost 停用 PHP: 首先開啟儲存 VirtualHost 的檔案, RHEL 及 CentOS 是 /etc/httpd/conf/httpd.conf, 而 Debian 及 Ubuntu …

PHP 5.4 或以上重現 Register Globals

很久以前的 PHP 預設開啟 Register Globals 選項, 這樣寫程式就很方便, 但這個方便也帶來安全性問題, 所以後來 PHP 預設會將 Register Globals 關閉, 對於一些要開啟 Register Globals 的程式, 在不修改程式碼的情況下, 還可以透過修改 php.ini 或 .htaccess 的方法解決。但在 PHP 5.4 開始, PHP 開發團隊將 Register …

Apache Log 儲存到 MySQL

Apache 預設會將 Log 記錄檔儲存到文字檔,一般會在 logs/ 目錄,或者 /var/log/httpd/ 目錄。將 Apache Log 儲存到 MySQL 除了可以方便過濾記錄檔內資訊外,也可以實現多個 Apache Log 集中管理。以前試過自己寫 Shell Script 將 Log 插入 MySQL,但原來已經有 Apache Module 可以做這件事,十分方便。以下是 Apache 設定將 Log 儲存到 MySQL …

解決 WordPress 的 xmlrpc.php DDOS 攻擊

XML-RPC 是 WordPress 的 API, 給開發者開發手機 Apps, 桌面應用程式或其他服務時, 可以跟 WordPress 溝通, 從遠端能達到很多需要登入 WordPress 後台才能做的工作。xmlrpc.php 則是負責這個 API 的檔案, 而很多針對 WordPress 的 DDOS 攻擊也是針對這個檔案。早前在一台 VPS 上面, MySQL 的使用資源很高, 停止 Apache 後便沒有問題, 查看 …

Apache 設定忽略檔案字母大小寫

在 Unix Like 的作業系統, 檔案及目錄名稱的英文字母大小寫有分別, 而在 Windows 內則沒有分別, 所以有些網頁放在 Windows 主機上可以正常瀏覽, 而放到 Linux 上便會出現連結失效, 或者圖片, CSS, Javascript 不能載入等問題。例如這樣一個超連結:〈a href=’Filename.htm’〉links〈/a〉在 Windows 下, 只要檔案符合連結內的字母, 不會區分大小寫, 所以如果檔案名稱是 “filename.htm” 可以正確瀏覽, 而在 Linux 下相同情況便會出現連結失效。如果未能將網頁內容一一修正, 可以設定 …

Apache 動態管理 VirtualHost

VirtualHost 可以讓多個網站在一台主機上運行, 一般上每個 VirtualHost 都需要加入一段 “ “, 然後設定 ServerName, ServerAlias 及 DocumentRoot, 例如有兩個網址, 分別是 www.mydomain.com 及 blog.mydomain.com, 在 httpd.conf 部份要加入類似這樣的設定:另一種方法是動態設定 VirtualHost, 以上面的例子, 可以用一段 設定。首先開啟 httpd.conf: # vi /etc/httpd/conf/httpd.conf 將上面兩個 VirtualHost …