我們最常講的『架站』其實就是架設一個 Web 網站啦!那麼什麼是 Web 呢?說穿了,就是全球資訊廣播的意思(World Wide Web),或者也可以稱之為互連網吧!這個是我們目前的人類最常使用的 Internet 的協定之一啦!通常說的上網就是使用 WWW 來查詢使用者所需要的資訊囉!^_^!目前的 WWW 伺服器主要分為兩大陣營,分別是 Unix-Like 上面的 Apache 與 Windows 上面的 IIS ,就以價格效能比來說,當然是 Linux 上面的 Apache 最棒啦!至於 WWW 伺服器的類型可以分為靜態與動態,而這些動態的網站裡面,很多都是以目前的當紅炸子雞 Linux + Apache + MySQL + PHP 架設而成的,簡稱為 LAMP 的咯!這種動態 WWW 主機很有趣喔!他可以溝通 Server 與 Client 端的資料呢!趕緊來進入這個 LAMP 的世界吧! |
1. 查詢可以使用:
[root@test root]# rpm -qa | grep gcc libgcc1-3.2-1mdk gcc-cpp-3.2-1mdk gcc-3.2-1mdk gcc-c++-3.2-1mdk 2. 移除 MySQL
可以使用:
|
0. 查詢是否已經有
mysql 的帳號:
[root@test root]# grep mysql /etc/passwd # 如果沒有 mysql 出現的話,那麼請建立一個名為 mysql 的帳號! # 這個是要給 MySQL 的 Process 使用的!為了安全性,請務必建立! # 如果之前已經建立過了,那麼底下這一步建置的工作就可以跳過, # 直接到 1. 解壓縮與建立連結 去安裝囉! [root@test root]# groupadd -g 315 mysql # 因為我剛好沒有 315 這個 GID ,而 mysql 是系統使用的帳號,我希望他在 500 以內, # 因此就選擇 315 做為 mysql 的 gid 囉!你當然可以變更這個數字, # 使用小於 500 的 GID 做為系統的帳號之用只是慣用的習慣而已啦! ^_^ [root@test root]# useradd -u 315 -g mysql -d /usr/local/mysql/data -M mysql # 我使用 315 做為 mysql 這個帳號(與群組同名!)的 UID 啦! # 並且建立他的家目錄在 /usr/local/mysql/data 裡面! 1. 解壓縮與建立連結: [root@test root]# cd /usr/local <==因為已經是 binary 的套件,不用 make ! [root@test local]# tar -zxvf /root/mysql-3.23.57-pc-linux-i686.tar.gz ...(訊息略過).... # 最後會產生一個目錄: mysql-3.23.57-pc-linux-i686 [root@test local]# ln -s mysql-3.23.57-pc-linux-i686 mysql # 通常習慣將 MySQL 安裝在 /usr/local/mysql 當中!但為了未來升級版本的確認, # 官方網站上面建議使用連結的方式來進行 MySQL 的使用! 3. 檔案權限修正: [root@test local]# mkdir -p /var/lib/mysql [root@test local]# chown -R mysql:mysql /var/lib/mysql [root@test local]# chown -R root:mysql /usr/local/mysql-3.23* [root@test local]# chown -R mysql:mysql /usr/local/mysql/data # 修改成較為安全,且資料庫所屬人為 mysql 喔!特別留意啦! 4. 建立資料庫: [root@test local]# cd mysql [root@test mysql]# ./scripts/mysql_install_db [root@test mysql]# chown -R mysql:mysql /var/lib/mysql [root@test mysql]# chown -R mysql:mysql /usr/local/mysql/data # 這個步驟會在 /usr/local/mysql/data 裡面建立好 MySQL 的資料庫! # 由於 /usr/local/mysql/data 是 MySQL 的資料庫目錄,所以很重要喔!請多加備份! # 不過,在新版的 3.23.57 這個版本當中,資料庫竟然移到 /var/lib/mysql 去了! # 還真是有點奇怪吶!另外,根據諸多網友的回報,發現在建立資料庫之後, # 還需要重新設定一下資料庫的所屬群組與擁有者喔! 5. 啟動測試: [root@test mysql]# /usr/local/mysql/bin/safe_mysqld --user=mysql & Starting mysqld daemon with databases from /usr/local/mysql/data # 注意:這個時候 mysql 會建立一個 socket file 在 /var/lib/mysql/mysql.sock 喔! # 未來我們在使用 MySQL 的各種指令功能時,都需要使用到這個 socket file, # 但是 MySQL 偏偏預設的 socket file 是在 /tmp 底下,怎麼辦?!真討厭, # 我們可以透過這個簡單的動作來欺騙我們的 MySQL 喔! [root@test mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/ # 如果還是找不到 mysql.sock 時,請使用 find / -name mysql.sock # 來找出這個檔案的絕對路徑吧! [root@test mysql]# netstat -tl | grep mysql tcp 0 0 *:mysql *:* LISTEN [root@test mysql]# ps -aux | grep mysql mysql 6394 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ mysql 6395 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ mysql 6396 0.0 1.5 10528 992 pts/3 S 16:16 0:00 /usr/local/mysql/ root 6422 0.0 1.1 2408 732 pts/3 S 16:20 0:00 grep mysql # 呵呵!這樣就應該是搞定了! MySQL 已經在監聽要求囉!而且所有人為 mysql ! 6. 開機後立即啟動! [root@test mysql]# vi /etc/rc.d/rc.local # 將底下這一行加入這個檔案的最後面一行喔! cd /usr/local/mysql; /usr/local/mysql/bin/safe_mysqld --user=mysql & # 這樣一來,每次開機就可以自動的啟動 MySQL 囉! # 註:由於很多網友回覆之問題中發現,如果沒有加上 cd /usr/local/mysql 時, # 會導致無法自動於開機的時候啟動,因此,請大家記得加上這個動作呢! 7. 進階設定內容: # 由於我們 MySQL 放置的地點在 /usr/local/mysql 內,這個目錄並不在 PATH 當中! # 且 man page 亦不在 MANPATH 裡面,所以,我們要手動的幫他加入囉! [root@test mysql]# vi /etc/profile # 大約在 33 行的地方,而且每個 distribution 設定的地方都不太相同! # 請找到 export PATH ... 那一行,以 Mandrake 9.0 來說,大概在 33 行左右, # 新加入一行: PATH="$PATH":/usr/local/mysql/bin export PATH ....(略).... [root@test mysql]# vi /etc/man.config( 有的 distribution 為 /etc/man.conf ) # 可以在這個檔案的任何地方加入底下這一行: MANPATH /usr/local/mysql/man # 就可以具有 man page 的能力了! 8. 建立 MySQL 的 root 帳號密碼! [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root password 'your.password' # 請建立密碼!為了安全起見!否則你的 MySQL 資料庫,將預設所有人都可以登入喔! # 注意,如果執行上面的指令時,竟然出現如下的錯誤: ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) # 這表示 mysql 找不到 mysql.sock 這個檔案!我們上面不是提到 mysql.sock 的 # 絕對路徑嗎?假設是 /var/lib/mysql/mysql.sock 好了,那麼我們可以: [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root \ > -S /var/lib/mysql/mysql.sock password 'your.passwd' # 當然也可以進行檔案的連結阿! ln -s /var/lib/mysql/mysql.sock /tmp [root@test mysql]# /usr/local/mysql/bin/mysql -u root -p \ > [-S /var/lib/mysql/mysql.sock] # 後面 [] 的內容不一定需要!且 [] 不要打! Enter password: <==這裡輸入你剛剛建立的那個密碼喔! Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 3.23.57 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> exit
# 這樣就是可以確認已經可以連接到你的
MySQL 資料庫了!請特別留意,有的朋友沒有移除
|
0. 解壓縮:
[root@test root]# cd /usr/local/src [root@test src]# tar -zxvf /root/php-4.3.3.tar.gz # .....(訊息略).... # 最後會產生一個 /usr/local/src/php-4.3.3 的目錄 1. 搜尋設定內容: [root@test src]# cd php-4.3.3 [root@test php-4.3.3]# ./configure --prefix=/usr/local/php4 \ >--with-apxs2=/usr/local/apache2/bin/apxs \ >--with-mysql=/usr/local/mysql \ >--with-config-file-path=/usr/local/php4 # 上面請特別注意到: --prefix=/安裝的路徑:這個項目在設定未來你的 Apache 安裝在那個目錄當中?! --with-apxs2 :這個則是 Apache2 專用的選項喔!請針對您的主機情況設定! --with-mysql :這個則是針對 MySQL 啦!當然啦,就寫我剛剛搞定的咚咚! --with-config-file-path:這個又是什麼?呵呵!是 php 的設定檔 php.ini 放置的目錄啦! # 其他的額外項目請使用 ./configure --help 來察看吧! 2. 開始編譯與安裝: [root test php-4.3.3]# make; make install # 如果沒有錯誤的話,那麼在 /usr/local/php4 這個目錄當中就已經將你的 php 安裝好了! 3. 轉存 PHP 基本組態檔案: [root@test php-4.3.3]# cp php.ini-dist /usr/local/php4/php.ini # 這個路徑與你剛剛在 ./configure 當中那個 --with-config-file-path 設定有關! 4. 啟動 Apache 當中的 PHP 選項: [root@test php-4.3.3]# vi /usr/local/apache2/conf/httpd.conf # 找到底下兩行: LoadModule php4_module modules/libphp4.so <==大約在 231 行處 AddType application/x-httpd-php .php <==這一行可以在 847 行處自行增加! 5. 重新啟動 Apache : [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl stop [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl start 6. 測試 PHP 是否是正常工作的: [root@test php-4.3.3]# cd /usr/local/apache2/htdocs [root@test htdocs]# vi test.php <?php phpinfo( ); ?> # 以我的測試主機為例,我的測試主機 IP 為 192.168.1.2 ,所以隨便以一部可以連線的PC, # 在網址列輸入 http://192.168.1.2/test.php # 或者直接在本機的 X-Window 上面輸入 http://localhost/test.php 亦可! |
[root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf ServerRoot "/usr/local/apache2"
PidFile logs/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests
100
KeepAliveTimeout
15
<IfModule
prefork.c>
Listen 80
User nobody
ServerAdmin
root@localhost
#ServerName
new.host.name:80
UseCanonicalName
Off
AddDefaultCharset
ISO-8859-1
HostnameLookups
Off
|
[root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf DocumentRoot
"/usr/local/apache2/htdocs"
<Directory
/>
<Directory
"/usr/local/apache2/htdocs">
UserDir public_html
DirectoryIndex
index.html index.html.var
Alias /icons/
"/usr/local/apache2/icons/"
Alias /manual
"/usr/local/apache2/manual"
ScriptAlias
/cgi-bin/ "/usr/local/apache2/cgi-bin/"
|
[root@test
root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf LoadModule php4_module
modules/libphp4.so
ErrorLog logs/error_log
|
[root@test
root]# /etc/rc.d/init.d/httpd start
(啟動)
[root@test root]# /etc/rc.d/init.d/httpd stop (關閉) |
[root@test
root]# /usr/local/apache2/bin/apachectl start
(啟動)
[root@test root]# /usr/local/apache2/bin/apachectl stop (關閉) |
[root@test
root]# netstat -tuln | grep ':80'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN |
[root@test
root]# vi /var/log/httpd/error_log
[Thu Dec 26 20:16:53 2002] [notice] Apache/2.0.43 (Unix) PHP/4.2.3 configured -- resuming normal operations |
[root@test
root]# ll /etc/httpd/conf.d/*.conf
-rw-r--r-- 1 root root 814 Feb 10 2003 /etc/httpd/conf.d/perl.conf -rw-r--r-- 1 root root 459 Jun 30 04:35 /etc/httpd/conf.d/php.conf -rw-r--r-- 1 root root 1276 Feb 20 2003 /etc/httpd/conf.d/python.conf -rw-r--r-- 1 root root 11140 Jul 31 23:40 /etc/httpd/conf.d/ssl.conf |
[root@test
root]# cd /etc/httpd/conf.d
[root@test conf.d]# mv ssl.conf ssl.conf.bak [root@test conf.d]# /etc/rc.d/init.d/httpd restart |
[test@test
test]$ cd
# 回到自己的家目錄
[test@test test]$ mkdir public_html [test@test test]$ chmod 755 public_html [test@test test]$ chmod 755 /home/test # 在你的用戶端家目錄中建立了一個 public_html 的目錄, # 並將此目錄的權限改成可以讓其他人觀看,注意喔, apache # 預設是 public_html ,但是如果你在 httpd.conf 這個檔案中 # 改變了目錄名稱,則必須作適當的修正喔! |
[root@test
root]# cd /usr/local/apache2/htdocs
[root@test htdocs]# ln -s /home/test/public_html test |
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
Alias /test/ "/home/test/public_html/" <Directory "/home/test/public_html"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> [root@test root]#
/usr/local/apache2/bin/apachectl
stop
|
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
方法一:
# 再加入底下幾行:
方法二:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
|
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 先確認在 httpd.conf
當中,底下這一行已經將註解拿掉了!
# 再加入底下這一行:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
|
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 大概在 880
行左右,可以找到下面這一行:
[root@test root]#
/usr/local/apache2/bin/apachectl
stop
|
[root@test
root]# vi /usr/local/apache2/htdocs/missing.html
<html> <center> Missing HTML Web Page<br><br> I can't find any web page for you, <br> Please contact with me root@localhost, <br> or press <a href="http://192.168.1.2/manual/">here</a> to see the manual of Apache 2.xx </center> </html> |
[root @test
root]# vi /usr/local/apache2/conf/httpd.conf
# 額外再新增幾行吧! <Directory "/home/test/public_html/cgi"> Options ExecCGI SetHandler cgi-script order allow,deny deny from 192.168.1.100 deny from testing.idv.tw </Directory> |
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 額外再新增幾行吧! <Directory "/home/test/public_html/cgi"> Options ExecCGI SetHandler cgi-script <Limit GET> order allow,deny deny from 192.168.100 allow from all </Limit> <Limit POST> order allow,deny allow from 192.168.1.50 deny from all </Limit> order allow,deny deny from 192.168.1.100 allow from all </Directory> |
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
# 找到底下這幾行,並且將他修改一下: <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 192.168.1.11 </Location> [root@test root]#
/usr/local/apache2/bin/apachectl
stop
|
Apache Server Status for 192.168.1.2
Server Version: Apache/2.0.43 (Unix) PHP/4.2.3 Server Built: Dec 26 2002 01:59:03 ------------------------------------------------------------------------------ Current Time: Monday, 30-Dec-2002 01:31:28 CST
Scoreboard Key:
PID Key:
31027 in state: W , 31028
in state: _ , 31029 in state: _
------------------------------------------------------------------------------
Apache/2.0.43 Server at 192.168.1.2 Port 80 |
[root@test
root]# mkdir -p /usr/local/apache2/htdocs/protect
[root@test root]# cd /usr/local/apache2/htdocs/protect [root@test root]# echo "This is a protect page" > test.html |
htpasswd
語法: [root@test root]# htpasswd [-c] password_file_name User_name 說明: -c :當後面的 password_file_name 這個密碼檔不存在時,那麼就建立該檔案 範例一:
範例二:
[root@test apache2]#
more
apache.passwd
|
[root@test
root]# vi /usr/local/apache2/conf/httpd.conf
在這個檔案的設定中,請特別留意設定的地方,不要設定錯誤地方, 一般而言,新的咚咚可以加在最後面一行開始,比較不會搞錯地方! 加入底下這幾行: <Directory "/usr/local/apache2/htdocs/protect"> AuthName "Protected Directory" #這個是顯示在視窗上面的提示字元 AuthType Basic #這個則是認證的類型!就選Basic即可,Apache的預設功能 AuthUserFile /usr/local/apache2/apache.passwd #密碼檔放置的地方啦!完整的目錄與檔名 require valid-user #允許的使用者,valid-user為任何一個在認證檔案當中的帳號皆可 #require user test #若將 # 移除,則表示只有 test 才是可以登入的帳號! </Directory> |
[root@test
root]# /usr/local/apache2/bin/apachectl stop
[root@test root]# /usr/local/apache2/bin/apachectl start |
關於
root 的設定項目:
0. 先確認底下這些資訊可以在您的
httpd.conf 裡面發現:
1. 建立讓每個使用者家目錄下都能自行設定
AuthConfig 的規則!
關於 一般身份使用者 (test 為例) 的設定項目: 0. 以一般身份使用者登入,或者使用
su 轉換 test 的身份
1. 建立保護目錄與網頁內容
2. 建立 test
自己的密碼檔
3. 建立 .htaccess
檔案的內容!
|
[root@test
root]# cd /etc/logrotate.d
[root@test logrotate.d]# vi apache # 新加入這幾行 /var/log/httpd/access_log /var/log/httpd/error_log { rotate 4 missingok sharedscripts postrotate /bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true endscript compress } |
logrotate -f /etc/logrotagte.conf呵呵!這樣就對啦!那麼為什麼要加入這個 logrotate 呢?這是因為,未來,如果你的 WWW 伺服器越來越大時,那麼應該 access_log 檔案會『很可怕的大!』例如目前本小站的流量每週可以造成我的登錄檔長大到 400MB 以上∼如果不將他 rotate 的話,哈哈!不出幾個星期,我的硬碟就爆了∼所以, logrotate 是很重要的喔!
192.168.1.11
- - [27/Dec/2002:00:20:24 +0800] "GET /manual/ HTTP/1.1" 200 7340
來源 IP 日期與時間 動作與網頁 動作代碼 |
0. 確認一些必須要的繪圖相關
RPM 已經安裝!
# 因為這個套件需要 gd, zlib 與 png 才行,所以,你需要安裝這三個咚咚! # 在 Mandrake 9.0 當中,你所需要的套件在光碟中的名稱為: libpng3-devel-1.2.4-3mdk libpng3-1.2.4-3mdk zlib1-1.1.4-3mdk zlib1-devel-1.1.4-3mdk libgd1-1.8.4-6mdk libgd1-devel-1.8.4-6mdk # 至於在 Red Hat 7.2 當中,你要的套件名稱為: zlib-1.1.3-25.7 zlib-devel-1.1.3-25.7 libpng-devel-1.0.14-0.7x.3 libpng-1.0.14-0.7x.3 gd-1.8.4-4 gd-devel-1.8.4-4 # 請一定要安裝喔!不然肯定無法安裝這套軟體的! 1. 下載軟體:可以直接到官方網站,或者到我們網站上下載:
2. 安裝軟體,同樣的,到
/usr/local/src 下面解壓縮喔!
3. 設定檔編修:
4. 測試 Run
的結果
[root@test etc]#
vi
/etc/crontab
|
1. 下載軟體:可以直接到官方網站,或者到我們網站上下載:
http://linux.vbird.org/download/index.php#awsats # 使用瀏覽器將網站上面提供的資料拿回去!當然,你也可以直接到官方網站上面去下載最新的版本! # 假設你已經將資料捉回去,並且放置在 /root 這個目錄當中了,檔名為: awstats.tar.gz 2. 安裝軟體:
3. 設定檔編修:
4. 修改一下
httpd.conf 的設定內容:
5. 測試 Run
的結果
6. 設定每日執行!
|
至於這個設定嘛!真的是很簡單耶!只要幾行就搞定了,設定完成之後還會讓你偷笑ㄋㄟ∼呵呵!看看實例吧!
[root@test root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf
# 在這個檔案的最下方加入底下這些字眼!NameVirtualHost * # 設定你的虛擬主機判定的依據!這裡是 * 亦即是
# 所有連上這部機器的名稱都會被使用來當作虛擬主機的設定之用!<VirtualHost *>
ServerName mdk90.vbird.net
DocumentRoot /home/mdk90
</VirtualHost><VirtualHost *>
ServerName www.mdk90.vbird.net
DocumentRoot /home/www.mdk90
CustomLog /var/log/httpd/www.access_log combined # 特別將登錄檔額外分離出來
</VirtualHost><VirtualHost *>
ServerName phorum.mdk90.vbird.net
DocumentRoot /home/phorum.mdk90
</VirtualHost>
要注意的是:馬上測試看看!呵呵!會發現,咦!我真的有三個主網頁了哩!很不錯吧!這個作法可以讓你的 WWW 網頁更有靈活度喔!舉個例子來說,前一陣子因為酷學園討論區(http://phorum.study-area.org) 常常掛點,所以鳥哥就自告奮勇的跟站長說,只要將 phorum.study-area.org 這個 domain name 指向我的主機 IP ,那麼也可以直接進入我的討論區,如此一來,只要修改一下 DNS 即可轉換到我的討論區啦!並且不需要再進行任何額外的設定!對於網頁維護的靈活度是真的很有幫助的喔!
- 在虛擬主機的設定上還有很多的可用的功能,不過,最低的限度是需要有 ServerName 及 DocumentRoot 這兩個即可!
- 雖然原來我就有 mdk90.vbird.net 這個網域,但是因為設定了虛擬主機之後,自己的原來名稱可能會不見去,所以,這裡必須將自己的名稱也寫入才行!
- 上面有發現一個 CustomLog 的設定喔!該設定會讓以 www.mkd90.vbird.net 這個網域登入的登錄檔不再寫入原來的 /var/log/httpd/access_log 檔案,而是自行寫入 /var/log/httpd/www.access_log 這個檔案!
需要注意的事項:
虛擬主機並沒有什麼值得特別注意的地方,只要設定正確,大致上就不會有太大的問題!不過,你可能需要特別注意剛剛我們建立起來的新的登錄檔喔!為什麼呢?我們上面不是提過說,登錄檔在大型的網站上面成長的幅度是很可觀的嗎?所以需要進行 logrotate ,但是你剛剛建立的檔案並不在原本的 logrotate 檔案之內呀!呵呵!這個時候請自行加入 logrotate 個手續喔!否則.....嘿嘿嘿嘿!硬碟空間被用光可不要怪鳥哥喔! ^_^
什麼!?客戶端竟然也有文字介面的瀏覽器?!哈哈!當然是有啦!不然這裡幹嘛要介紹?!那就是鼎鼎大名的 lynx 以及 wget 囉!請注意的是,這兩個套件並不一定會在安裝的時候就已經安裝在你的系統中,所以請先使用 RPM 查詢一下他是否存在於你的系統當中,然後才能執行喔!他的用途是: 這兩個指令之前已經介紹過了!請自行前往觀察一下囉!加油啦!
[root@test
root]# cd /usr/local/src
[root@test src]# tar -zxvf /完整路徑/turck-mmcache-2.3.9.tar.gz # 會產生一個名為 turck-mmcache-2.3.9 的目錄 [root@test src]# cd turck-mmcache-2.3.9 [root@test turck-mmcache-2.3.9]# phpize # 這個指令是 PHP 套件所提供的!可以建置好你的 mmcache 原始碼 [root@test turck-mmcache-2.3.9]# ./configure --enable-mmcache=shared [root@test turck-mmcache-2.3.9]# make && make install # 這個動作會編譯一個名為 mmcache.so 的動態函式庫模組, # 並且會主動的將他安裝在 /usr/lib/php4 這個目錄當中! # 這樣就安裝完畢了!很簡單吧! |
1. 設定主動載入動態函式庫模組:
[root@test root]# vi /etc/ld.so.conf # 在這個檔案內加入底下這一行: /usr/lib/php4 [root@test root]# ldconfig # 上面這兩個步驟比較有趣一點,在 ldconfig 這個指令的功能是: # 『載入動態函式庫到記憶體當中做為快取』之用,至於載入的動態函式庫則是 # 根據 /etc/ld.so.conf 這個檔案的設定為準!這的動作只要第一次設定時進行 # 即可,未來在開機完成之後,系統會主動的載入動態函式庫的! # 另外請注意, ld.so.conf 裡面只要寫『目錄』即可! 2. 修改 php.ini # 請注意,由於每個人的 php.ini 都不相同,例如使用 RPM 安裝者,應該是 # /etc/php.ini ,但是我上面的安裝設定卻是 /usr/local/php4/php.ini # 請依照您的主機來設定喔! [root@test root]# vi /完整路徑/php.ini # 在這個檔案的最後一行加入底下這幾行: ;;;;;;;;;;;; ; MM Cache ; ;;;;;;;;;;;; extension="mmcache.so" mmcache.shm_size="16" mmcache.cache_dir="/tmp/mmcache" mmcache.enable="1" mmcache.optimizer="1" mmcache.check_mtime="1" mmcache.debug="0" mmcache.filter="" ; end of mmcache 3. 建立快取目錄: [root@test root]# mkdir /tmp/mmcache [root@test root]# chmod 0777 /tmp/mmcache 4.重新啟動 Apache [root@test root]# /etc/rc.d/init.d/httpd restart # 或 [root@test root]# /usr/local/apache2/bin/apachectl restart |
[root@test
root]# /usr/sbin/ab [-dSk] [-c number] [-n
number] 網頁.php
參數說明: -d :不要顯示 saved table 的百分比資料;通常不要那個資料,所以會加 -d -k :還記得上面的 KeepAlive 吧!加入 -k 才會以這樣的功能測試; -S :不顯示長訊息,僅顯示類似 min/avg/max 的簡短易懂訊息! -c :同時有多少個『同時連線』的設定(可想成同時連線的 IP ) -n :同一個連線建立幾個要求通道!(可想成同一個 IP 要求的幾條連線) 更多的訊息請自行 man ab 喔! 範例: [root@test root]# /usr/sbin/ab -dSk -c100 -n100 \ > http://linux.vbird.org/home.php This is ApacheBench, Version 1.3d <$Revision: 1.67 $> apache-1.3 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking
linux.vbird.org (be patient).....done
Document Path:
/home.php
Concurrency
Level: 100
Connnection
Times (ms)
|
幾個比較知名的網站管理員大概都有這樣的困擾,那就是網站常被砍站軟體所強力下載,結果造成主機的 CPU loading 過重,最後竟然會導致死掉∼唉!真是的∼人怕出名豬怕肥吶!先來解釋一下什麼是砍站吧!所謂的『砍站』,就是以類似多點連線下載的持續性訊息傳遞軟體進行網站資料的下載,而且,一啟用該軟體,該軟體就將『整個網站』的內容都給他 download 下來,很厲害吧!沒錯!是很厲害,但是卻也害死人了∼怎麼說呢?因為這種軟體常常會為了加快 download 的速度,所以採用多點連線的方式,也就是會持續不斷的向 Server 發出要求封包,而由於這些封包並不見得能夠成功的讓 Server 把資料傳導給 Client 端,常常會無法投遞就是啦!這樣的結果就是.....造成 Server 要一直不斷的回應,又無法正確的回應出去,此外,要求太過頻繁,結果主機應接不暇,最後....就當機了...真的是林老師ㄌㄟ∼我們這個小站的主機古早以前,就是因為這樣的原因,導致服務常常斷斷續續的,並且,由於 CPU loading 太高,結果讓正常連線進來看資料的網友沒有足夠的資源,因此網頁開啟的速度就變的很慢∼唉∼這些砍站的人,也太不道德啦!
由於這種砍站軟體真的很麻煩,一不注意馬上就又會被砍站而當機,三天兩頭就要重新開機一次,完全讓 Linux 的穩定性無法發揮!真是氣死了∼後來,我就自行寫了一個 scripts 來擋這樣的 IP !我的作法是這樣的:大致上就是這樣吧!這樣的一程式需要與 iptables 相互配合,所以,請先查閱一下簡易防火牆設定那一篇文章,然後再來下載這支程式吧!這支程式您可以在底下的網址下載喔!
- 由於砍站軟體要多點連續下載,因此,同一個 IP 在同一個時間內,會有相當多的連線發生;
- 由於他是重複不斷的要求連線,因此剛剛建立的連線在達成下載的目的後,會立刻死掉,而又多生出其他的連線出來,因此,這個時候他的連線情況就變的相當的不正常了!
- 由於某些較舊的砍站軟體並不會『欺騙』主機,所以,會在主機的登錄檔裡面記錄住 Teleport 的標記!
- 既然如此的話,那麼我就讓我的主機每分鐘去檢查兩個東西(1)先檢查 log file ,如果有發現到相關的 Teleport 字詞,就將該 IP 抵擋掉;(2)使用 netstat 來檢查同一個 IP 的同時連線,如果該連線超過一個值(例如同時有 12 個連線)的話,那麼就將該 IP 抵擋掉!
- 此外,由於上面的方案可能會將 Proxy 的 Client 端也同時抵擋掉,真是可憐啊!這個時候,這支程式就會主動的將(1)的情況的主機抵擋 3 天,至於(2)的情況則抵擋2小時!過了該抵擋的時限後,該 IP 即可又連上我們的主機了!
http://linux.vbird.org/download/index.php#http-netstat.sh詳細的安裝步驟我已經以中文寫在該檔案裡面了,所以請先查看一下該檔案的前面說明部分吧!此外,Study Area 的 netman 大哥也已經開發了一套很棒的防砍站的程式了!在防堵砍站的原理上面是完全相同的,不過寫法可能不是很雷同就是了!如果有需要的話,也可以前往 Study-Area 搜尋一下囉!http://phorum.study-area.org/viewtopic.php?t=13643
上面這樣一路走來,哈哈!終於我們的 LAMP 伺服器就已經大致上搞定啦!那麼接下來你可以利用這個 WWW 主機幫你做什麼事呢?嗄!能作的事情可多囉!目前很多支援 PHP 的架站軟體已經被很完整的開發了,例如 PHPNuke 以及鳥哥很喜歡的 phpBB 呢!這些架站軟體都是建構在 LAMP 上面的,而既然我們的 LAMP 已經搞定了,那麼其他的架站軟體的安裝就真的是相當的快速呢!底下介紹 phpBB 的安裝!你可以到底下的連結去看看喔:上面最後一個是鳥哥前一陣子寫的,目前已經有出較新版本的 phpBB2 囉!所以,請記得到官方網站下載最新的 phpBB 來安裝喔!畢竟比較新的不但功能比較多,而且臭蟲(Bug)也清理的差不多了!另外,由竹貓星球的竹貓三兄弟也有出一本『phpBB 論壇架設寶典』,裡面也有提到相當多的有用的架站心得與技巧的說明!有興趣的可以先到竹貓星球看看其風格與內容,然後再考慮要不要架站吧! ^_^目前我對 phpBB 倒是蠻喜歡的!
- phpBB 官方網站:http://www.phpbb.com/
- phpBB 正體中文網站『竹貓星球』:http://phpbb-tw.net/phpbb/
- 簡易 phpBB2 的安裝與設定方法:http://linux.vbird.org/apache_packages/
<?
phpinfo( ); ?> |
<?php
phpinfo( ); ?> |
[root@test
root]# /etc/rc.d/init.d/httpd restart
Stopping httpd: [ OK ] Starting httpd: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en", LC_ALL = "en", LANG = "en" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). |
[root@test
root]# vi /etc/sysconfig/i18n
LANG="en_US" LANGUAGE="en_US" LC_ALL="en_US"; export LC_ALL SUPPORTED="zh_TW.Big5:zh_TW:zh:en_US.UTF-8:en_US:en" SYSFONT="latarcyrheb-sun16" |