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

Mysql Apache PHP-黃金架站組合

最後編輯

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

< '''Q8.無法傳遞參數給 PHP?'''

> === Q8.無法傳遞參數給 PHP? ===

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

< '''Q14.無法啟動 MySQL 服務?'''

> === Q14.無法啟動 MySQL 服務? ===

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

修改:

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

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

增加:

> === 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:'''''
> 找了一下 [http://www.freebsd.org/cgi/query-pr.cgi?pr= FreeBSD Query PR Database] 後發現有人已反應此一問題 [http://www.freebsd.org/cgi/query-pr.cgi?pr=144137 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


內容

  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