站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Mysql Apache PHP-黃金架站組合

內容

  1. 前言
  2. 實作環境
  3. 安裝及設定
  4. MySQL
    1. 步驟1.安裝 MySQL 套件
    2. 步驟2.修改 rc.conf
    3. 步驟3.啟動 MySQL 服務
    4. 步驟4.設定 MySQL 管理者密碼
    5. 步驟5.測試登入 MySQL
    6. 步驟6.建立其它 MySQL 帳號
    7. 補充:基本 MySQL 操作指令
  5. Apache 1.x
    1. 步驟1.安裝 Apache_modssl 套件
    2. 步驟2.修改 rc.conf
    3. 步驟3.啟動 Apache 服務
    4. 補充1.Apache 設定檔說明 (httpd.conf)
    5. 補充2.備份 Apache Log
    6. 補充3. .htaccess 應用
      1. 補充3-1.設定 .htaccess 檔
      2. 補充3-2.建立 .htpasswd 密碼檔
    7. 補充4.Apache ExtendedStatus 應用
    8. 補充5.Redirect 轉址應用
  6. Apache 2.x
    1. 步驟1.安裝 Apache22 套件
    2. 步驟2.修改 rc.conf
    3. 步驟3.啟動 Apache 服務
    4. 補充1.mod_cband 頻寬限制
  7. PHP
    1. 步驟1.安裝 PHP 5
    2. 步驟2.安裝 PHP Extension
    3. 步驟3.測試 Apache 能否處理 PHP 檔案
    4. 步驟4.安裝 PHP 加速器 (Zend Optimizer)
  8. 參考
  9. Me FAQ
    1. Q1.安裝 mysql323-server 套件時出現錯誤訊息?
    2. Q2.安裝 mod_php5 套件時出現錯誤訊息?
    3. Q3.安裝完 mod_php5 後無法看到 PHP 的資訊網頁卻直接看到文字?
    4. Q4.安裝完 mod_php5 後卻無法看到 PHP 的資訊網頁卻變成下載?
    5. Q5.如何讓瀏覽器不能看到網站目錄結構?
    6. Q6.Apache 服務無法啟動且出現錯誤訊息?
    7. Q7.更新 Apache 版本為 1.3.31 之後卻無法啟動服務?
    8. Q8.無法傳遞參數給 PHP?
    9. Q9.無法連結 cgi-bin 下的檔案且出現錯誤訊息 ?
    10. Q10.如何判斷 PHP 是否支援 GD 功能?
    11. Q11.無法正確載入 PHP 擴充模組?
    12. Q12.無法完整顯示 PHP 資訊頁面?
    13. Q13.無法建立資料庫 Can't create database ?
    14. Q14.無法啟動 MySQL 服務?
    15. Q15.php4-extensions 安裝後無法使用?
    16. Q16.安裝 Zend Optimizer 後 segmentation fault (core dump)?
    17. Q17.無法啟動 MySQL 服務 InnoDB: Error: pthread_create returned 35?
    18. Q18.PHP 無法連結 MySQL 並出現錯誤 Call to undefined function: mysql_pconnect()?
    19. Q19.MySQL 服務無法啟動 Can't open privilege tables: Table 'mysql.host' doesn't exist?
    20. Q20.無法安裝 php5-snmp extension?

前言

[LAMP],簡單說就是利用 [OpenSource] 其低成本、高穩定性的特性來建置或應用於一般中/小企業上,成為目前最火紅的選擇。有關於 Web Server 可參考站內文章 WEB 伺服器的原理與運作流程

實作環境

安裝及設定

本篇分為三部份說明即 MySQL (Database)、PHP (Web Language)、Apache (Web Server),有關於 FreeBSD 如何安裝則不在此綴述請參考站內文章 Install-圖解安裝 FreeBSD 5.x

MySQL

步驟1.安裝 MySQL 套件

切換至 Ports Tree 路徑安裝 MySQL 套件,並且設定 MySQL 預設編碼採用 UTF-8 並安裝 (支援) 所有編碼格式。

安裝編碼格式參數說明:

 #cd /usr/ports/databases/mysql41-server                    //路徑 
 #make WITH_CHARSET=utf8 WITH_XCHARSET=all install clean    //指定 MySQL 預設的字集為 UTF-8,並另外支援所有的字集

步驟2.修改 rc.conf

修改 /etc/rc.conf 以便當系統重新開機時能自動載入 MySQL 服務,此次實作中將 MySQL 資料庫存放路徑指定至 /home/db/mysql 下 (我喜歡將資源都收集到 /home 下),因此記得先建立該資料夾並指定擁有者為 mysql 以便後續 mysql 服務能存取該資料夾。

 #mkdir /home/db/mysql                                      //建立 MySQL 存放資料夾
 #chown -R mysql:mysql /home/db/mysql                       //指定權限 (以利後續 mysql 服務存取)
 #vi /etc/rc.conf                                           //修改 rc.conf 檔加入如下二行
 mysql_enable="YES"                                         //啟動 MySQL 服務
 mysql_dbdir="/home/db/mysql"                               //指定資料庫存放路徑 (例如資料庫指定在/home/db則db資料夾必須事先建立)

步驟3.啟動 MySQL 服務

鍵入如下指令來啟動 MySQL 服務

 #/usr/local/etc/rc.d/mysql-server.sh start                 //啟動 MySQL 服務 

步驟4.設定 MySQL 管理者密碼

剛安裝好的 MySQL 記得趕快設定管理者密碼,因為預設密碼為 空白 (下列所設定的 MySQL 管理者帳號 root 跟 FreeBSD 的 SuperUser Root 沒關係哦)

 #mysqladmin -u root password YOUR_PASSWORD                 //設定 MySQL 管理者密碼
 #mysqladmin -u root -p password NEW_PASSWORD               //日後若要更改密碼則請加上參數 -p (會請你先輸入舊密碼)

步驟5.測試登入 MySQL

設定好 MySQL 管理者密碼後,請登入 MySQL 確定您所設定的 MySQL 管理帳號密碼可進行存取。

 #mysql -u root -p
 Enter password:                                            //輸入剛才設定的 MySQL 管理者密碼
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 1581 to server version: 5.0.27
 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 mysql>                                                     //成功登入 MySQL

步驟6.建立其它 MySQL 帳號

下列指令將建立允許 sqluser1 的 MySQL 帳號可對 testdb 資料庫進行任何操作。

 mysql> grant all privileges on testdb.* to sqluser1@localhost IDENTIFIED BY '1234';
 Query OK, 0 rows affected (0.00 sec)
 mysql> FLUSH PRIVILEGES ;                                  //重新載入(使變更生效)
 Query OK, 0 rows affected (0.01 sec)

補充:基本 MySQL 操作指令

以下記錄常用基本 MySQL 指令及語法,詳細內容可參考 [MySQL :: MySQL 5.1參考手冊 :: 13. SQL語句語法]

Apache 1.x

步驟1.安裝 Apache_modssl 套件

切換至 Ports Tree 路徑安裝 Apache_modssl 套件 (具有 SSL 模組的 Apache)

 #cd /usr/ports/www/apache13-modssl                         //切換至安裝路徑
 #make install clean                                        //安裝套件並清除安裝過程中產生不必要檔案

步驟2.修改 rc.conf

修改 /etc/rc.conf 以便系統重新開機時能自動載入 Apache 服務

 #vi /etc/rc.conf                                           //修改 rc.conf檔內容如下
 apache_enable="YES"                                        //加入此行

步驟3.啟動 Apache 服務

鍵入如下指令來啟動 Apache 服務

 #/usr/local/etc/rc.d/apache.sh start                       //啟動 Apache 服務 

鍵入如下指令來檢查 Apache 服務是否啟動成功,由於此次實作安裝具有 SSL 模組 (HTTPs) 的 Apache,因此啟動 Apache 服務之後系統應該要開啟相對應的服務埠號 HTTP (Port 80)、HTTPs (Port 443) 才是正確的,有關於 SSL 的部份則不在此篇討論中請參考站內文章 SSL Certificate-自行產生 SSL 憑證

 #sockstat |grep http                                       //聆聽 Port 443 表示 Apache modssl 執行成功
 www     httpd        86990 16 tcp4   61.60.59.58:80      *:*
 www     httpd        86990 17 tcp4   61.60.59.58:443     *:*

補充1.Apache 設定檔說明 (httpd.conf)

簡述 httpd.conf 參數及意義

補充2.備份 Apache Log

當 Apache Log 隨著網站經營時間、網路流量增大...等,Apache Log 日漸肥大若沒規劃好 Log 產生的方式的話,除了在分析/備份 Apache Log 造成麻煩之外更可能因為硬碟空間規劃不當而造成空間爆滿。以下介紹二種方式 (newsyslog.conf、cronolog) 來處理 Apache Log。

我們可透過修改 newsyslog.conf 來達成定期備份 Apache Log 的目的,但有一點請注意也就是必須加上 (/var/run/httpd.pid) 使 newsyslog 服務在 Rotate Apache Log 之後能傳送 SIGHUP 給 Apache 服務 (Apache 服務重新啟動),否則將因為 Apache 服務未重新啟動而造成相關錯誤發生 (ex. newsyslog[66253]: logfile turned over),有關於 newsyslog 可參考站內文章 newsyslog.conf

 #vi /etc/newsyslog.conf
 /var/log/httpd-access.log               644  7     *    @T00  Z /var/run/httpd.pid
 /var/log/httpd-error.log                644  7     *    @T00  Z /var/run/httpd.pid

[cronolog] 套件的功能也是 Rotate Apache Log 且經過 [cronolog] 處理過的 Apache Log 又容易應用於分析軟體上,而透過修改 Apache 設定檔 (httpd.conf) 我們可每天產生 Apache Log。

 #cd /usr/ports/sysutils/cronolog                                             //切換到 cronolog 安裝路徑
 #make install clean                                                          //安裝套件並清除安裝過程中產生不必要檔案

修改 Apache 設定檔,使用 cronolog 指令並配合參數 (%Y=year, %m=month, %d=day) 來每天產生 Log

 #vi /usr/local/etc/apache/httpd.conf
 ErrorLog /var/log/httpd-error.log                                            //預設值
 ErrorLog "|/usr/local/sbin/cronolog /home/log/%Y_%m_%d-error.log"            //修改後
 CustomLog /var/log/httpd-access.log combined                                 //預設值
 CustomLog "|/usr/local/sbin/cronolog /home/log/%Y_%m_%d-access.log" combined //修改後

補充3. .htaccess 應用

當您網站上有某些網頁不想讓人可以隨便瀏覽 (例如:管理介面、程式後台.....),此時可利用 Apache 內的 .htaccess 功能來替網頁進行管制保護,以下實作為利用 .htaccess 來保護指定網頁。

.htaccess 設定注意事項:

補充3-1.設定 .htaccess 檔

此次實作為保護在網站根目錄 (/home/weithenn/web) 下 admin 資料夾,管制方式為管制來源 IP (也就是只有允許的來源 IP 才能連結) 及使用者帳號/密碼的驗證。

 #cd /home/weithenn/web/admin                             //切換到要保護的目錄下
 #vi .htaccess                                            //建立.htaccess 檔內容如下      
 AuthType Basic
 AuthName "Weithenn Admin Auth"                           //驗證視窗說明文字
 AuthUserFile /home/weithenn/web/.htpasswd                //指定密碼檔的存放路徑
 require valid-user
 <Limit GET> 
 order deny,allow 
 deny from all 
 allow from 61.60.59.58                                   //允許來源 IP 為 61.60.59.58 能瀏覽管理網頁 (適用於來源從 Internet 設定)
 allow from 192.168.1.                                    //允許來源網段 IP 為 192.168.1.x 能瀏覽管理網頁 (適用於內部設定)
 allow from .weithenn.lan                                 //允許來源網域 DNS 尾碼為 weithenn.lan 能瀏覽網頁 (適用於內部設定)
 </Limit>

補充3-2.建立 .htpasswd 密碼檔

切換到我們剛才指令存放密碼檔的路徑 (/home/weithenn/web) 下之後利用 htpasswd 指令來建立 .htaccess 驗證的使用者帳號及密碼,以下為簡述 htpasswd 指令常用參數,關於 htpasswd 詳細內容可參考 [FreeBSD Man Pages - htpasswd]

 #cd /home/weithenn/web                                   //切換到密碼檔存放路徑
 #htpasswd -c .htpasswd weithenn                          //建立帳號為 admin
 New password: 請輸入密碼
 Re-type new password: 再輸入一次確認

所以上述二個步驟設定完成之後,若要連結管理保護網頁 (此例為 http://www.weithenn.org/admin) 除了要從允許的來源 IP (此例為 61.60.59.58) 之外還須正確輸入使用者帳號及密碼 (此例為 weithenn / 123456) 才可成功連結至此網頁。

補充4.Apache ExtendedStatus 應用

Apache 內建 server-status 及 server-info 二種可即時觀看 Apache 伺服器 狀態模組 的方法,在 Apache 設定檔預設是將這些選項註解掉的,要使用這二個功能的方法很簡單只要在 Apache 設定檔將註解符號 (#) 拿掉即可,另外請記得設定只允許內部的網段可以查看此資訊 (避免安全性問題)。

 #vi /usr/local/etc/apache/httpd.conf
 ExtendedStatus On                                        //預設值為註解,請將註解符號 (#) 拿掉
 ###server-status 伺服器狀態資訊
 <Location /server-status>
     SetHandler server-status
     Order deny,allow
     Deny from all
     Allow from 192.168.1.                                //僅允許網段 192.168.1.x 能觀看
 </Location>
 ###server-info 伺服器組態資訊
 <Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 192.168.1.                                 //僅允許網段 192.168.1.x 能觀看
 </Location>

設定完成後便可在您主機後面加上連結名稱 (ex. http://www.weithenn.org/server-status) 即可即時查看 Apache 狀態

補充5.Redirect 轉址應用

當網站更改網址時,例如本站由 weithenn.idv.tw 更改為 weithenn.org 時如何進行轉址設定讓原來連結至 weithenn.idv.tw 的網友們能自動連結至新網址 weithenn.org ? 此時就可使用 Redirect 轉址功能來處理,在設定前請先確定您在 Apache 設定檔 httpd.conf 中有載入 mod_rewrite.so。

將下列設定值貼至原來 weithenn.idv.tw 虛擬主機 (Virtual Host) 設定內,如下設定為所有連結至 www.weithenn.idv.tw 的需求都會 Redirect 轉址至新網址 www.weithenn.org 其中 301 代表永久轉址 (Permanently Moved),這是對網站 SEO 最安全的轉址方式。

 <VirtualHost 61.60.59.58:80>
    ServerAdmin weithenn@gmail.com
    DocumentRoot "/home/user/weithenn/web"
    ServerName www.weithenn.idv.tw
    RewriteEngine on
    RewriteRule ^(.*) http://www.weithenn.org$1 [R=301,L]
    ErrorLog "/dev/null"
    CustomLog "/dev/null" combined
 </VirtualHost>

Apache 2.x

步驟1.安裝 Apache22 套件

切換至 Ports Tree 路徑安裝 Apache22 套件

 #cd /usr/ports/www/apache22                                //切換至安裝路徑
 #make install clean                                        //安裝套件並清除安裝過程中產生不必要檔案

步驟2.修改 rc.conf

修改 /etc/rc.conf 以便系統重新開機時能自動載入 Apache 服務

 #vi /etc/rc.conf                                           //修改 rc.conf檔內容如下
 apache22_enable="YES"                                      //加入此行

步驟3.啟動 Apache 服務

鍵入如下指令來啟動 Apache 服務

 #/usr/local/etc/rc.d/apache22 start                       //啟動 Apache 服務 

鍵入 sockstat 指令來檢查 Apache 服務是否啟動成功,因此啟動 Apache 服務之後系統應該要開啟相對應的服務埠號 HTTP (Port 80) 才是正確的,預設未啟動 SSL 也就是 HTTPs (Port 443) 有關於 SSL 的部份則不在此篇討論中請參考站內文章 SSL Certificate-自行產生 SSL 憑證

 #sockstat |grep http                                       //聆聽 Port 80 表示 Apache22 執行成功
 www     httpd        86990 16 tcp4   61.60.59.58:80      *:*

補充1.mod_cband 頻寬限制

當 Apache 負責許多 Virtual Host 時如何針對每個網站去作最大頻寬流量、每月下載流量、連線數量...限制? [mod_cband] 可清鬆達成此項任務,本次安裝版本為 [mod_cband-0.9.7.5_2]

有關於連線速率 (bps / Bps) 的觀念簡述如下:

所以若是 ADSL 速度 12M / 1M 線路則 理論 上頻寬為 (實際值約為理論值的 60 ~ 75% 左右)

 12M / 1M bps = 12288kbps / 1024kbps = 1536KBps / 128KBps

了解後我們開始安裝 [mod_cband]

 #/usr/ports/www/mod_cband                                  //切換到安裝路徑
 #make install clean                                        //安裝套件並清除安裝過程中產生不必要檔案

安裝完成後確定系統是否有 mod_cband.so 模組檔案

 #ll /usr/local/libexec/apache22/mod_cband.so
 -rwxr-xr-x  1 root  wheel  75126  8 31 14:53 /usr/local/libexec/apache22/mod_cband.so

查看及修改 Apache 設定檔 httpd.conf 中是否有載入 mod_cband.so 模組

 #vi /usr/local/etc/apache22/httpd.conf
 ...略...
 LoadModule cband_module   libexec/apache22/mod_cband.so    //確定載入 mod_cband.so 模組
 ...略...
 # Virtual hosts
 Include etc/apache22/extra/httpd-vhosts.conf               //載入 Virtual Host 設定檔
 # Cband
 Include etc/apache22/extra/httpd-cband.conf                //新增此行,屆時用來觀看 CBand 狀態
 ...略...

Virtual Host 設定如下,當然 CBand 的功能不只如此,要了解更詳細的限制內容請參考 [mod_cband Document]

 #vi /usr/local/etc/apache22/extra/httpd-vhosts.conf
 NameVirtualHost 61.60.59.58:80  
 <VirtualHost 61.60.59.58:80>
    ServerAdmin service@weithenn.org
    DocumentRoot "/home/web/test"
    ServerName www.weithenn.org
    CBandSpeed 1024 50 50                                   //網站總流量 1024 kbps (1Mbps = 128KBps),每秒允許最多 50 連線要求,每個要求最多 50 連線數量 
    CBandRemoteSpeed 20 3 3                                 //每個要求 20 kbps (= 2.5KBps),每秒允許最多 3 連線要求,每個要求最多 3 連線數量
    ErrorLog "|/usr/local/sbin/cronolog /home/log/test/%Y_%m_%d-error.log"
    CustomLog "|/usr/local/sbin/cronolog /home/log/test/%Y_%m_%d-access.log" combined
 </VirtualHost>

查看 CBand 運作狀態及每個 Virtual Host 的流量狀態設定如下,設定完成後您可鍵入例如 http://www.weithenn.org/cband-status 的 URL 來即時查看 CBand 運作狀態 [mod_cband Screenshots]

 #cd /usr/local/etc/apache22/extra
 #cp httpd-info.conf httpd-cband.conf                       //複製查看 Apache Status 設定檔來進行修改
 #vi httpd-cband.conf                                       //修改 CBand 設定檔內容如下
 <Location /cband-status>
    SetHandler cband-status
    Order deny,allow
    Deny from all
    Allow from 61.60.59.0/24                                //僅允許此網段能查看 CBand 狀態
 </Location>

設定完成後重新啟動 Apache 服務即可

 #/usr/local/etc/rc.d/apache22 restart
 Performing sanity check on apache22 configuration:
 Syntax OK
 Stopping apache22.
 Starting apache22.

PHP

步驟1.安裝 PHP 5

切換至 Ports Tree 路徑安裝 PHP 5 套件

 #cd /usr/ports/lang/php5                                   //切換到安裝路徑
 #make install clean                                        //安裝套件並清除安裝過程中產生不必要檔案

安裝 PHP 5 完成後相關檔案及指令如下:

 #php -m                                                    //查看 PHP 擴充模組
 [PHP Modules]
 standard                                                   //目前未安裝任何 PHP 擴充模組
 [Zend Modules]

步驟2.安裝 PHP Extension

由於 PHP 已經純化 (請參考 /usr/ports/UPDATING 20040719),所以 PHP 擴充模組必須另外安裝

 #cd /usr/ports/lang/php5-extensions                        //切換到安裝路徑
 #make install clean                                        //安裝擴充模組

安裝 PHP 擴充模組 (PHP-Extension) 完成後相關檔案及指令如下:

 #php -m                                                    //查看 PHP 擴充模組
 [PHP Modules]
 ctype                                                      //以下列出所安裝的 PHP 擴充模組
 gd
 gettext
 imap
 mysql
 overload
 pcre
 posix
 session
 standard
 tokenizer
 xml
 zlib
 [Zend Modules]

步驟3.測試 Apache 能否處理 PHP 檔案

安裝完 PHP 擴充模組 (PHP-Extension) 之後,請測試您的 Apache 是否已經能處理 PHP 檔案了,請建立一個 PHP 檔案 (ex. test.php),然後將 test.php 放到您 Apache 所指定的 DocumentRoot 目錄 (預設目錄 /usr/local/www/data),若瀏覽器能 PHP 資訊頁面,即表示您的 Apache 已能正確處理 PHP 檔案了。

 #vi /usr/local/www/data/test.php                           //建立 test.php 檔案,內容如下
 <? 
 phpinfo(); 
 ?> 

步驟4.安裝 PHP 加速器 (Zend Optimizer)

[Zend Optimizer] 為利用最佳化 PHP 程式碼的方式來提高 PHP 應用程式的執行速度。一般情況下,透過 [Zend Optimizer] 執行的 PHP 程式比不使用時效率要快上 40% 到 100%。因此可以瞭解 [Zend Optimizer] 可以有效降低伺服器的 CPU Loading。

 #cd /usr/ports/devel/ZendOptimizer                         //切換至安裝路徑
 #make install                                              //安裝 Zend Optimizer
 ===>  ZendOptimizer-2.5.7 :
 Because of licensing restrictions, you must fetch the source distribution
 manually.
 Please access http://www.zend.com/store/free_download.php?pid=13
 with a web browser, read the license and click the "I ACCEPT" button.
 Download the source file, ZendOptimizer-2.5.7-freebsd5.1-i386.tar.gz,
 and place it in /usr/ports/distfiles.

由上述訊息可知,系統顯示必須下載 ZendOptimizer-2.5.7-freebsd5.1-i386.tar.gz 並放置於 /usr/ports/distfiles 之後鍵入 make install 指令來開始安裝 ZendOptimizer 安裝完成後出現如下訊息

 [Zend]
 zend_optimizer.optimization_level=15
 zend_extension_manager.optimizer="/usr/local/lib/php/20041030/Optimizer"
 zend_extension_manager.optimizer_ts="/usr/local/lib/php/20041030/Optimizer_TS"
 zend_extension="/usr/local/lib/php/20041030/ZendExtensionManager.so"
 zend_extension_ts="/usr/local/lib/php/20041030/ZendExtensionManager_TS.so"

請將上面這幾行 Zend 設定資訊貼到 PHP 擴充模組設定檔 (/usr/local/etc/php/extension.ini) 中,修改完成後請鍵入檢查 PHP 擴充模組指令 (php -m) 應該可看到 ZendOptimizer 擴充模組載入。

 #php -m                                                    //查看 PHP 擴充模組
 [PHP Modules]
 ctype
 dom
 iconv
 libxml
 pcre
 posix
 session
 SimpleXML
 SPL
 SQLite
 standard
 tokenizer
 xml
 Zend Optimizer                                            //Zend Optimizer 載入成功
 [Zend Modules]
 Zend Extension Manager
 Zend Optimizer

參考

[ ★ OHaHa的學習心得 -- OHaHa's FreeBSD Study Diary ★]

[BSD8.com-Apache 服務器Log分析應用實例]

[王波-配置Apache伺服器(2)]

[Wang, Chun-Pin -FreeBSD 6.0架設管理與應用-第十三章 網頁伺服器]

[ Wang, Chun-Pin -FreeBSD 6.0架設管理與應用-第十九章 資料庫系統]

[如何設定權限]

[利用 .htaccess 保護網頁]

[如何將你的project目錄加密]

[hoyo Web Server]

[Apache基本安裝與介紹]

[Apache 網站伺服器架設標準作業程序書]

[MySQL 資料庫伺服器架設標準作業程序書]

[小隆網管日誌-新的 mod_php4 安裝方式]

[傑利開講-討論區]

[Manage Apache Download Speed And Traffic Limits With mod_cband | HowtoForge - Linux Howtos and Tutorials]

[安裝mod_cband管理頻寬 | 土司布丁]

[mod cband 頻寬限制 | 小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY]

[Apache 限制流量 How To - 中央論壇 - CENTER BBS]

[Apache 模組: 頻寬限制 mod_cband - WWW - 一又@CROSS]

Me FAQ

Q1.安裝 mysql323-server 套件時出現錯誤訊息?

Error Message:

安裝 mysql323-server 套件中途時停止安裝出現如下錯誤訊息

 Sorry, the host 'dmz' could not be looked up. Please configure the 'hostname' command to return a correct hostname. 
 If you want to solve this at a later stage, restart this script with the --force option
 *** Error code 1
 Stop in /usr/ports/databases/mysql323-server.

Ans:

此台機器主機名稱為 dmz 至 /etc/hosts 加上這台主機的 IP 及 hostname 後再次執行安裝便順利完成。

Q2.安裝 mod_php5 套件時出現錯誤訊息?

Error Message:

安裝 mod_php5 套件中途時停止安裝出現如下錯誤訊息

 ==> Installing for gettext-0.13.1
 ==> Generating temporary packing list
 ==> Checking if devel/gettext already installed
 ==> An older version of devel/gettext is already installed (gettext-0.12.1)
 You may wish to ``make deinstall'' and install this port again by ``make reinstall'' to upgrade it properly.
 If you really wish to overwrite the old port of devel/gettext without deleting it first, set the variable "FORCE_PKG_REGISTER"
 in your environment or the "make install" command line.
 *** Error code 1
 Stop in /usr/ports/devel/gettext.
 *** Error code 1
 Stop in /usr/ports/devel/bison.
 *** Error code 1
 Stop in /usr/ports/www/mod_php5.
 *** Error code 1

Ans:

由上述訊息可知目前系統中 gettext 套件版本太舊,系統尋問您是否要要強制安裝新版 gettext 套件? 此次解決方式為更新 gettext 套件後即可順利安裝 mod_php5 套件了。

Q3.安裝完 mod_php5 後無法看到 PHP 的資訊網頁卻直接看到文字?

Error Message:

連結 PHP 測試網頁直接看到英文字而不是看到 PHP 資訊網頁。

Ans:

請確定在安裝 PHP 時是否有勾選下列項目 (沒有的話就 make config 之後再安裝吧)

 [X] APACHE     Build Apache module

檢查 httpd.conf 內是否有載入 PHP module (有勾選 Build Apache module 才會有)

 LoadModule php5_module        libexec/apache22/libphp5.so

檢查 httpd.conf 內是否有如下二行內容 (沒有就加上吧)

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps

檢查 httpd.conf 內是否有 index.php 沒有就加上吧 (今天安裝的 apache-2.2.4_2 要自已加上 index.php)

 <IfModule dir_module>
    DirectoryIndex index.html index.php
 </IfModule>

Q4.安裝完 mod_php5 後卻無法看到 PHP 的資訊網頁卻變成下載?

Error Message:

連結 PHP 測試網頁直接變成下載 test.php 檔案而不是看到 PHP 資訊網頁。

Apache 無法處理 PHP 檔案

Ans:

確定在安裝 PHP 時是否有勾選下列項目 (沒有的話就 make config 後再安裝吧)

 [X] APACHE     Build Apache module

檢查 httpd.conf 內是否有載入 PHP module (有勾選 Build Apache module 才會有)

 LoadModule php5_module        libexec/apache22/libphp5.so

檢查 httpd.conf 內是否有如下二行 (沒有就加上吧)

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps

檢查 httpd.conf 內是否有 index.php 沒有就加上吧 (今天安裝的 apache-2.2.4_2 要自已加上 index.php)

 <IfModule dir_module>
    DirectoryIndex index.html index.php
 </IfModule>

Q5.如何讓瀏覽器不能看到網站目錄結構?

Reason:

下圖所顯示為網站內網頁的存放目錄及子目錄 (網站目錄結構),因為 Apache 預設開放 Indexes 的功能也就表示當瀏覽器找不到 Apache 目錄中預設的首頁時,Apache 將會自產生索引並列出目錄中的檔案,這雖然是 Apache 人性化的地方對於測試用網路可能很方便,但在商業經營的網站上您應該不希望網站目錄結構被人看光光吧?

啟用 Indexes 功能

Ans:

修改 Apache 設定檔 (httpd.conf) 將參數 Indexes 刪除後記得重新啟動 Apache 服務即可。

 Options Indexes FollowSymLinks MultiViews                           //預設值,把 Indexes 參數刪除即可
 Options FollowSymLinks MultiViews                                    //修改後

關閉 Indexes 功能

Q6.Apache 服務無法啟動且出現錯誤訊息?

Error Message:

鍵入指令啟動 Apache 服務之後出現如下錯誤訊息

 httpd could not be started

查看 Log 內出現訊息為

 mod_unique_id: unable to gethostbyname

Ans:

請在 /etc/hosts 下加入您的主機 IP 及 localhost、localhost.mydomain,例如如下內容

 #vi /etc/hosts
 61.60.59.58  www  www.weithenn.org                 //加入此行

Q7.更新 Apache 版本為 1.3.31 之後卻無法啟動服務?

Error Message:

最近將 Apache 的版本更新到 1.3.31 之後卻無法啟動 Apache 服務

Ans:

從 Apache 1.3.31 之後版本開始,Apache 的啟動方式有些許更動詳細內容可參考 (/usr/local/etc/rc.d/apache.sh),請在 /etc/rc.conf 加入如下三行即可順利啟動 Apache 服務

 #vi /etc/rc.conf
 apache_enable="YES"
 apache_flags=""
 apache_pidfile="/var/run/httpd.pid"

Q8.無法傳遞參數給 PHP?

Error Message:

輸入參數 100 給 abc (例如http://test.com?abc=100) 但 PHP 卻抓不到 abc 的值?

Ans:

因為 PHP4.x 版傳遞參數選項預設是關的 (此例為 mod_php4-4.3.5_7,1 ) 修改 /usr/local/etc/php.ini 後再重新啟動 Apache 服務即可。

 register_globals = Off--> On

Q9.無法連結 cgi-bin 下的檔案且出現錯誤訊息 ?

Error Message:

libintl.so 函式是安裝 /usr/port/devel/gettext/ 程式後取得理論上來說若目前版本的相關函數是 libintl.so.5 為何還要去讀取舊的 libintl.so.4 版本? 因為當您安裝 gmake 時 gmake 會去連結安裝 gmake 而當時的 libinl.so 的版本是 version 4,也就是 libintl.so.4 當你更新過相關的 Ports (devel/gettext) 則系統會用 libintl.so.5 取代 libintl.so.4 除非能取得先前系統保留舊有的 libintl.so.4 否則就會出現安裝 (執行) 失敗的狀況.

  usr/libexec/ld-elf.so.1: Shared object "libc.so.4" not found

Ans:

解決方式二有種 (請自行擇一即可)

 #cd /lib
 #ln -s libutil.so.5 libutil.so.4
 #portupgrade -fr gettext

Q10.如何判斷 PHP 是否支援 GD 功能?

Error Message:

該如何判斷 PHP 是否已經支援 GD 功能?

Ans:

您可透過查看 PHP 資訊頁看 GD 是否載入,或將下列程式碼新增至一個 PHP 檔案內容如下

 <?php
    header ("Content-type: image/png");
    $newImg = ImageCreate(250,250);
    $skyblue = ImageColorAllocate($newImg,136,193,255);
    ImageFill($newImg,0,0,$skyblue);
    ImagePNG($newImg);
    ImageDestroy($newImg);
 ?>

若 GD Libary 成功運作則會顯示一張 250 * 250 的天空藍圖片,若 GD Libary 未載入 (或失敗) 則出現無法顯示錯誤的圖片的訊息

Q11.無法正確載入 PHP 擴充模組?

Error Message:

安裝 PHP 擴充模組完成,但無法使用 PHP 擴充模組? 將載入 PHP 擴充模組語法 (extension=*.so) 貼入 php.ini 中且重新啟動 Apache 服務之後 httpd-error.log 出現類似如下的警告訊息

 PHP Warning:  xml:  Unable to register functions, unable to load in Unknown on line 0
 PHP Warning:  zlib:  Unable to register functions, unable to load in Unknown on line 0
 ...略...

Ans:

因為 PHP 已經純化,且 PHP 擴充模組載入清單已更改為寫入至 (/usr/local/etc/php/extension.ini) 檔案中,只需確定在 php.ini-dist (extension_dir =) 中是否正確指定您放置 PHP 擴充模組檔案路徑即可。

Q12.無法完整顯示 PHP 資訊頁面?

phpinfo() show到HTTP Headers Information就停住了show不出extension的東西?

Error Message:

當嘗試讀取 PHP 資訊頁面 (phpinfo) 時網頁顯示到 HTTP Headers Information 項目就卡住了,也就是無法繼續顯示 PHP 擴充模組項目 (但測試 GD 功能卻是正常的代表有載入成功?)

Ans:

請鍵入 php -i 指令 (等於是文字方式呈現的 PHP 資訊頁面 phpinfo),出現如下錯誤訊息,將 Imagemagick 套件先移除掉在重新安裝之後就可順利讀取 PHP 資訊頁面 (phpinfo)。

 #php -i
 /libexec/ld-elf.so.1: /usr/local/lib/libMagick.so.6: Undefined symbol "pthread_equal"
 #pkg_delete pecl-imagick-0.9.11

Q13.無法建立資料庫 Can't create database ?

Error Message:

當嘗試要建立資料庫時出現如下錯誤訊息

 MySQL 傳回: 
 #1006 - Can't create database 'shopper'. (errno: 28)

Ans:

此次狀況為 MySQL 放置在預設的 /var/lib 下,而 /var 因為空間規劃不當 (被 Log 佔滿空間),將肥大的 Log 清除後就可正常建立資料庫了。

Q14.無法啟動 MySQL 服務?

Error Message:

啟動 MySQL 服務後卻無法進入並出現如下錯誤訊息

 ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Ans:

請在 /etc/rc.conf 加上如下內容,然後執行 /usr/local/etc/rc.d/mysql-server.sh start 來啟動 MySQL 即成功 (若不知道要加什麼參數到 /etc/rc.conf內,請執行 /usr/local/etc/rc.d/mysql-server.sh rcvar 即可,或可參考 /etc/default/rc.conf)

 #vi /etc/rc.conf
 mysql_enable="YES"                //加入此行

Q15.php4-extensions 安裝後無法使用?

Error Message:

安裝 PHP4 擴充模組之後,雖然打 php -m 指令有顯示出擴充模組安裝,但用 phpinfo 卻看不到擴充模組,也無法使用擴充模組功能?

Ans:

請修改 php.ini (若是新版本請修改 php.ini-dist),修改完成後請重新啟動 Apache 服務即可。

 #vi /usr/local/etc/php.ini    
 extension_dir = "/usr/local/lib/php/20020429/"             //指定放置 extension 路徑

Q16.安裝 Zend Optimizer 後 segmentation fault (core dump)?

Error Message:

安裝 Zend Optimizer 後欲查看 PHP 擴充模組狀況系統卻回應如下錯誤訊息 (php -v 或 php -m 都一樣)

 segmentation fault (core dump)

且查看 /var/log/messages 則出現如下錯誤訊息

 kernel: pid 11954 (php), uid 0: exited on signal 11 (core dumped)

Ans:

此次原因為 PHP 擴充模組中的 imagick.so 所造成,將該項目註解掉之後便不在出現 Core Dump 的狀況。

Q17.無法啟動 MySQL 服務 InnoDB: Error: pthread_create returned 35?

Error Message:

無法啟動 MySQL 服務,檢查 mysql.err 後發現錯誤訊息如下

 050722 12:23:59  mysqld started
 InnoDB: Error: pthread_create returned 35
 050722 12:23:59  mysqld ended

Ans:

此問題為 Kernel 內的參數而導致的,從上列 Mail List 討論中可知,將 Kernel 內的參數調整一下完成後重新編譯核心再重開機就可順利啟動 MySQL 服務了。

 options         MAXDSIZ="(2048*1024*1024)"   //原 Kernel 參數
 options         MAXDSIZ="(2047*1024*1024)"   //調整為此數值 (2048 >> 2047)

Q18.PHP 無法連結 MySQL 並出現錯誤 Call to undefined function: mysql_pconnect()?

Error Message:

安裝 MySQL 相關的 PHP 擴充模組但仍無法連結至 MySQL? 只要嘗試連結 MySQL 時便出現類似如下的錯誤訊息

 Fatal error: Call to undefined function: mysql_pconnect() in /home/web/weithenn/class.Configuration.php on line 49

Ans:

原因為沒有安裝 php4-mysql 套件,所以雖然在 PHP 擴充模組中有勾選 MySQL 選項但仍無法跟 MySQL 溝通,安裝 /usr/ports/databases/php4-mysql 之後 PHP 便可順利與 MySQL 溝通了。

 #php -m
 [PHP Modules]
 ctype
 mysql                     //安裝 php4-mysql 後在安裝 PHP 擴充模組 MySQL 選項後才會出現此行
 overload
 pcre
 posix
 session
 standard
 tokenizer
 xml
 zlib
 [Zend Modules]

Q19.MySQL 服務無法啟動 Can't open privilege tables: Table 'mysql.host' doesn't exist?

Error Message:

當嘗試啟動 MySQL 服務時發現 mysqld 起不來,看了一下 MySQL 的 Log 後發現如下錯誤訊息

 Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist

Ans:

原因在於您目前的 MySQL 缺少 host 相關檔案 (host.frm、host.MYD、host.MYI),請重新安裝 MySQL Server 或者試試從其它機器的 mysql 目錄下複製下列三個檔案到您的 mysql 目錄內即可。

  host.frm
  host.MYD
  host.MYI

Q20.無法安裝 php5-snmp extension?

Error Message:

安裝 php5-snmp extension 時無法安裝並出現如下錯誤訊息

 ===>  Script "configure" failed unexpectedly.
 Please report the problem to ale@FreeBSD.org [maintainer] and attach the
 "/usr/ports/net-mgmt/php5-snmp/work/php-5.2.12/ext/snmp/config.log" including
 the output of the failure of your make command. Also, it might be a good idea
 to provide an overview of all packages installed on your system (e.g. an `ls
 /var/db/pkg`).
 *** Error code 1
 Stop in /usr/ports/net-mgmt/php5-snmp.
 *** Error code 1
 Stop in /usr/ports/lang/php5-extensions.
 *** Error code 1
 Stop in /usr/ports/lang/php5-extensions.

Ans:

找了一下 [FreeBSD Query PR Database] 後發現有人已反應此一問題 [ports/144137: net-mgmt/php5-snmp make install fail] 但看來維護者還沒時間修,只好自已先硬衝了,簡述方法如下

 #cd /usr/ports/net-mgmt/php5-snmp                                        //切換到安裝路徑
 #pkg_add -r php5-snmp
 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/php5-snmp.tbz... Done.
 Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/All/perl-5.8.9_3.tbz... Done.
 pkg_add: package 'perl-5.8.9_3' conflicts with perl-threaded-5.10.1      //與此套件衝突
 pkg_add: please use pkg_delete first to remove conflicting package(s) or -f to force installation
 pkg_add: pkg_add of dependency 'perl-5.8.9_3' failed!
 #pkg_delete -f perl-threaded-5.10.1                                      //移除此套件
 #pkg_add -r php5-snmp                                                    //移除衝突套件後即可順利安裝

安裝完成後發現 Perl 版本為 5.8.9 (perl -v),目前 php5-snmp extension 已安裝完成

 #php -m | grep snmp
 snmp
 #grep 'snmp' /usr/local/etc/php/extensions.ini  
 extension=snmp.so
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com