Author Archive

國網中心 & 青草湖社區大學 \r\n

王順泰 (c00wht00@nchc.gov.tw) \r\n

1. 介紹

\r\n

    在現代的生活中網際網路(Internet)的應用愈益普及,內容也愈加的豐富且多元多樣,其中以全球資訊網(WWW)的使用所佔比例最高,並且仍以驚人的速度成長著。使用者除了可以瀏覽世界各地的網頁之外,更可以將自己精心製作的網頁放到網站上,讓所有其他的人參觀。透過這種互動,整個 Internet 就如同是一個龐大的資料庫,我們可以在上面找到各式各類我們想要的資訊。

\r\n

    那麼我們該如何建立一個 Web 網站呢?首先,我們需要一台可以運作的主機(例如一般廉價的個人電腦),在上面我們還需要有一個平穩強大的作業系統(在此就採用大家最為熟悉的 Linux)。除此之外,我們還需要一套能把網路上的網頁供其它人來存取的軟體,也就是所謂的 HTTP (Web) Server 協定服務軟體,HTTP Server 比較有名的包括:Apache HTTP Server、M$ 的 Internet Information Server、Netscape 的 Enterprise Server 等.. 由於我們使用的作業系統平台是 Linux,因此將針對在 Unix 系統上最受歡迎的 Apache HTTP Server 來做介紹。

\r\n

    Apache HTTP Server 是一個免費且開放源碼的 HTTP 伺服器,主要目的在於提供一個安全並且有效率的 HTTP Server 環境。Apache HTTP Server 目前有 Unix-Based 和 Windows 的版本。根據統計,目前 Apache HTTP Server 已成為佔有率最高的 HTTP Server 軟體,而且它的功能與執行效率並不會比一般商業的 Web Server 軟體來的差,甚至領先許多。Apache HTTP Server 目前的版本分為 1.3.x 版與 2.0.x 版,兩個版本基本上功能都差不多,不一樣的地方在於 2.0.x 的執行效率會比 1.3.x 來得好,因為 2.0.x 程式結合了執行緒〈thread〉與程序〈process〉,讓熟悉系統的管理者能夠調校各種不同的組合,達到最佳效能,而 1.3.x 版只能以程序〈process〉方式來運作,兩者觀念完全不同。另外,2.0.x 版也把許多模組內建在自己的系統裡,詳細的資料可參考 Apache 的家:http://httpd.apache.org/

\r\n

 

\r\n

2. 安裝

\r\n

2.1 如何取得

\r\n

Apache HTTP Server 也如同 Linux 眾多的 package 一樣會有版本的更新,新版本通常會增加新的功能或是修正一些 bug,我們可以參考 Apache 的家 http://httpd.apache.org 以得到最新的消息。本例我們以Apache版本 1.3.27 為例,原始程式可以從 請按我 取得。

\r\n

另外也可以到國網中心的 opensource 網站上取得。請按我 

\r\n

 

\r\n

2.2 編譯與安裝

\r\n

原始程式編譯及安裝

\r\n

首先將原始程式檔解壓縮。 \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

解壓縮:

\r\n

[root@root]# tar zxvf /tmp/apache-1.3.27.tar.gz -C /usr/local/src 

\r\n

\r\n

 

\r\n

  \r\n

執行 configuration shell script。 \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

更換目錄:

\r\n

[root@src]# cd /usr/local/src/apache_1.3.27/

\r\n

執行 configure,–prefix 用來指定要安裝的目錄名稱:

\r\n

[root@apache_1.3.27]# ./configure –prefix=/usr/local/apache 

\r\n

  \r\n

  \r\n

  \r\n

  \r\n

進行編譯。在編譯完成後,需執行安裝步驟。 \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

編譯:

\r\n

[root@apache_1.3.27]# make 

\r\n

安裝: \r\n

[root@apache_1.3.27]# make install

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

在編譯安裝完成後,可以執行以下動作來測試是否安裝成功: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

啟動 apache:

\r\n

[root@apache_1.3.27]# /usr/local/apache/bin/apachectl start 

\r\n

/usr/local/apache/bin/apachectl start: httpd started \r\n

  \r\n

驗證,如有看到 httpd process 在執行即表示安裝成功: \r\n

[root@apache_1.3.27]# ps ax | grep httpd \r\n

3146 ? S 0:00 /usr/local/apache/bin/httpd
3147 ? S 0:00 /usr/local/apache/bin/httpd
3148 ? S 0:00 /usr/local/apache/bin/httpd
3149 ? S 0:00 /usr/local/apache/bin/httpd
3150 ? S 0:00 /usr/local/apache/bin/httpd
3151 ? S 0:00 /usr/local/apache/bin/httpd \r\n

  \r\n

停止 apache:

\r\n

[root@apache_1.3.27]# /usr/local/apache/bin/apachectl stop \r\n

/usr/local/apache/bin/apachectl stop: httpd stopped

\r\n

 

\r\n

 

\r\n

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

Debian apt-get 安裝

\r\n

利用 apt-get 來安裝: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /usr/bin/apt-get install apache

\r\n

 

\r\n

 

\r\n

RPM 安裝

\r\n

在取得 apache rpm 套件後,執行 rpm -ivh 檔名。 \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /usr/bin/rpm -ivh apache-1.3.27.i386.rpm

\r\n

 

\r\n

 

\r\n

3. 設定

\r\n

在編譯安裝完後,在 /usr/local/apache/conf 目錄中應該會有三個檔案,包括:httpd.conf、srm.conf、access.conf。其中,httpd.conf 用來設定伺服器﹝port號碼、使用者等..﹞。srm.conf 用來設定 設定一般使用者的網站目錄 、網頁目錄的 alias、script 檔與相關 HTML 檔案的位置等。最後,access.conf 用來設定基本存取。雖然新版 Apache HTTP Server 的文件內提到已將 httpd.conf、srm.conf 與 access.conf 這三個檔整合為一個 httpd.conf,但實際上 access.conf 與 srm.conf 仍然存在,只不過沒有內容。以下針對 httpd.conf 檔案內容的設定做簡單介紹。

\r\n

3.1 httpd.conf 檔的設定

\r\n

I. 全域環境變數設定

\r\n

ServerType

\r\n

語法:ServerType <(inetd)/(standalone)>
預設:ServerType standalone

\r\n

ServerType 用來指定系統該以何種型態去啟動伺服器。型態可以是其中之一:

\r\n
    \r\n
  • inetd:伺服器將由系統程序 inetd 執行;啟動伺服器使用的命令加在 /etc/inetd.conf 檔案裡。 \r\n
  • standalone:伺服器將會以伺服程式〈daemon〉方式來執行;啟動伺服器使用的命令加在系統啟動指令稿裡〈/etc/rc.d/rc.local 或 /etc/rc.d/init.d/httpd 裡〉。
\r\n

inetd 在這兩個選項裡比較少使用。因為接收到每個 http 連線就要重頭開始執行另一份新的伺服器程式拷貝;連線結束後,這支程式就會結束,所以每次連線要付出的代價很高,相對的使用者等待時間會加長。但是因為安全上的理由,某些管理者喜歡這個選項。
standalone 是 ServerType 最普遍的設定,因為它是最有效率的執行方式。伺服器程式只啟動一次,而且服務所有的連線。如果我們想要利用 Apache Server 來服務一個忙碌的站臺,standalone 大概將會是唯一的選擇。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

ServerType standalone

\r\n

-> 指定 apache 以 daemon 方式來執行

\r\n

 

\r\n

 

\r\n

 

\r\n

ServerRoot

\r\n

語法:ServerRoot <目錄名稱>
預設:ServerRoot \”/usr/local/apache\”

\r\n

ServerRoot 用於設定 Apache Server 所安裝的絕對路徑,所有網站相關的襠案都存放在此目錄中。其它配置檔的相對路徑是相對於這個路徑。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

ServerRoot \”/usr/local/apache\”

\r\n

-> 指定 apache server 安裝的根目錄為 /usr/local/apache 目錄

\r\n

 

\r\n

 

\r\n

 

\r\n

PidFile

\r\n

語法:PidFile <檔案名稱>
預設:PidFile /usr/local/apache/logs/httpd.pid

\r\n

PidFile 用來設定伺服器記錄它的程式之程序號碼所使用的檔案。這樣就不必用 ps 指令來尋找它的程序號碼。而 PidFile 的功能只能使用在 ServerType 為 standalone 的模式。
我們可以藉由傳送 SIGHUP〈kill -1〉信號到列在 PidFile 檔案裡的程序號碼來達成關閉或重新再打開錯誤記錄與傳輸記錄以及重新讀取配置檔等。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

PidFile /usr/local/apache/logs/httpd.pid

\r\n

-> 指定 apache 執行時要存放記錄 PID 檔案的路徑與檔名 

\r\n

 

\r\n

 

\r\n

 

\r\n

TimeOut

\r\n

語法:TimeOut <數字>
預設:TimeOut 300

\r\n

TimeOut 用來設定伺服器接收一個請求以及完成一個請求最長的等待時間〈以秒為單位〉,如果在此時間內沒有回應則終止服務。所以當接收或傳送一個資料時所花的時間超過 TimeOut 所規定的時間時,伺服器便將會中斷該連線。如果網路速度較慢,則此 Timeout 時間可以設長一些。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

TimeOut 500

\r\n

-> 指定 apache 接收或傳送的等待時間

\r\n

 

\r\n

 

\r\n

 

\r\n

KeepAlive

\r\n

語法:KeepAlive <(On/Off)>
預設:KeepAlive On

\r\n

KeepAlive 用於設定伺服器要不要開啟連續請求的功能,On 是開啟,Off 是關閉。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

KeepAlive On

\r\n

-> 指定 apache 開啟連續請求功能

\r\n

 

\r\n

 

\r\n

 

\r\n

MaxKeepAliveRequests

\r\n

語法:MaxKeepAliveRequests <個數>
預設:MaxKeepAliveRequests 100

\r\n

MaxKeepAliveRequests 用於設定伺服器所能接受之最大連續請求量,如果連續請求超過這個此數限制則 Server 會自動拒絕請求連線。若設定為 0 則表示不做限制。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

MaxKeepAliveRequests 0

\r\n

-> 指定 apache 不限制所能接收之連線數量

\r\n

 

\r\n

 

\r\n

 

\r\n

KeepAliveTimeout

\r\n

語法:KeepAliveTimeout <秒數>
預設:KeepAliveTimeout 15

\r\n

KeepAliveTimeout 用於設定使用者 \’連續\’ 請求等待的時間上限,如果使用者連續請求的時間超過此數,則終止此請求服務。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

KeepAliveTimeou 15 

\r\n

-> 指定 apache 等待使用者連續請求的時間,在接到使用者請求開始,15 秒內若沒收到新請求訊息,即中斷該連線

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

MinSpareServers / MaxSpareServers

\r\n

語法:MinSpareServers <數量> / MaxSpareServers <數量>
預設:MinSpareServers 5 / MaxSpareServers 10

\r\n

MinSpareServers 用於設定最小閒置 (idle) 子伺服程序數量,而 MaxSpareServers 用於設定最大閒置 (idle) 子伺服程序數量。閒置子伺服程序是目前沒有處理要求的程序。如果有多於 MaxSpareServers 的子程序,那麼父程序會終止超過此數量的子程序。如果有小於 MinSpareServers 的子程序,那麼父程序會產生超過此數量的子程序。通常不會將 MaxSpareServers 設很大,只有在非常忙碌的站臺上才有調整這個選項的需要。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

MinSpareServers 5

\r\n

-> 設定最少閒置等待服務的伺服程序數量為 5 個

\r\n

MaxSpareServers 10

\r\n

-> 設定最大閒置等待服務的伺服程序數量為 10 個 

\r\n

 

\r\n

\r\n

 

\r\n

 

\r\n

 

\r\n

StartServers

\r\n

語法:StartServers <數量>
預設:StartServers 5

\r\n

StartServers 用於設定啟動時所要建立的子伺服程序數量。因為程序的數量是依據負載動態控制的,通常不需要調整這個參數。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

StartServers 5

\r\n

-> 設定啟動 apache 時要建立 5 個伺服程序

\r\n

 

\r\n

 

\r\n

 

\r\n

MaxClients

\r\n

語法:MaxClients <數量>
預設:MaxClients 150

\r\n

MaxClients 用於設定同時能夠提供給使用者的最大服務請求數目。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

MaxClients 150

\r\n

-> 設定 apache 在同一時間內最大能服務 150 個連線請求

\r\n

 

\r\n

 

\r\n

 

\r\n

II. Server 主要變數設定

\r\n

Port

\r\n

語法:Port <數字>
預設:Port 80

\r\n

Port 設定伺服器用來監聽連線的網路埠號。參數<數字>是 0 到 65535 的一個數目;某些埠號(特別是低於 1024 的)是保留給特殊的協定。請參閱 /etc/services 裡定義的一些埠的列表,而標準的 http 協定則使用 80 埠號。Port 80 是 Unix 中的一個特別埠。所有低於 1024 的埠號都是保留給系統使用的,一般使用者 (non-root) 不能使用它們;取而代之的是他們可以使用較高的埠號。要使用 80 埠你必須以 root 帳號啟動伺服器。如果你不能使用 80 埠,選擇任何其它沒有使用到的埠。非 root 使用者必須選擇高於 1023 的埠號,像是 8000 。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

Port 8000

\r\n

-> 設定 apache 的連線埠號為 8000

\r\n

 

\r\n

 

\r\n

 

\r\n

User

\r\n

語法:User [username / #uid]
預設:User nobody

\r\n

User 用來設定伺服器程式的執行者是誰。一般是 nobody,也可以是已註冊的使用者,若用 user id 則要先加上 # 號。這個執行者應該不能有存取外界所不能看到的檔案的權限,而且這個執行者應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的使用者。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

User apache

\r\n

-> 設定 apache 程式以 apache 使用者身份來執行 

\r\n

 

\r\n

 

\r\n

 

\r\n

Group

\r\n

語法:Group [groupname / #gid]
預設:Group nogroup

\r\n

Group 用於設定 httpd 這程式的執行者所屬的群組,一般是 nogroup,此 group 必須要存在於 /etc/group 中。相同於 User 指令,這個群組應該不能有存取外界所不能看到的檔案的權限,而且應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的群組。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

Group apache

\r\n

-> 設定 apache 程式以 apache 群組的身份來執行

\r\n

 

\r\n

 

\r\n

 

\r\n

ServerAdmin

\r\n

語法:ServerAdmin <電子郵件地址>
預設:ServerAdmin root@localhost

\r\n

ServerAdmin 用於設定此站台管理者的電子郵件地址,當伺服器發生錯誤時,會傳送這些錯誤訊息給此電子郵件地址。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

ServerAdmin chanel@armani.com

\r\n

-> 當 apache 發生錯誤時,會傳送這些訊息給 chanel@armani.com 這個 E-mail 的管理者

\r\n

 

\r\n

 

\r\n

 

\r\n

ServerName

\r\n

語法:ServerName <主機名稱>

\r\n

ServerName 用於設定該伺服器的名稱,此名稱必須是已經向伺服器本身所在網域的 DNS 註冊。若沒有一個登記的 DNS name,則改為 IP 位址。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

ServerName www.prada.com

\r\n

-> 設定 apache 主機的名稱為 www.prada.com

\r\n

 

\r\n

 

\r\n

 

\r\n

DocumentRoot

\r\n

語法:DocumentRoot <目錄名稱>
預設:DocumentRoot \”/usr/local/apache/htdocs\”

\r\n

DocumentRoot 用於設定伺服器文件或其它資料所在的根目錄位置。伺服器會把連線請求的 URL 附加到根文件目錄 (document root) 來組合到達文件的路徑。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

DocumentRoot \”/usr/local/apache/htdocs\”

\r\n

-> 指定文件的根目錄為 /usr/local/apache/htdocs 目錄,若使用者輸入 http://myserver/doc.html,最對映到系統中的 /usr/local/apache/htdocs/doc.html 檔。

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

Directory

\r\n

語法:<Directory [目錄絕對路徑]> … </Directory>

\r\n

Directory 指令區間內的參數是用於設定目錄的相關屬性或控制目錄的權限。使用方法需配合 Order 或 Options 指令。

\r\n

Order

\r\n

語法:Order [allow/deny/allow,deny]

\r\n

Order 用於設定何人可以從這個 Server 取得控制目錄的權限。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

Oeder allow,deny
allow from nchc.gov.tw  <– 所有來自 nchc.gov.tw 的 user 都可以取得控制權

\r\n

 

\r\n

 

\r\n

Options

\r\n

語法:Options <參數>

\r\n

Options 指令配合 <Directory [目錄絕對路徑]> … </Directory> 來控制該目錄的屬性,
指令後面的 <參數> 表示可以開啟的屬性種類,所代表的值可以包括:

\r\n
    \r\n
  1. All:此目錄除 MultiViews 外,所有屬性都開啟。 \r\n
  2. MultiViews:允許 MultiViews 內容。 \r\n
  3. Indexes:若該目錄被以 http 的方式讀取,而該目錄中並不存在 index.htm 或 index.html 等索引檔,則會自動將該目錄的檔案資訊轉化成為 HTML 格式傳回給瀏覽器。 \r\n
  4. IncludesNOEXEC:開放 SSI (Server-side include) 的權限,但是會關閉 CGI 程式中 #exec 與 #include 的宣告。  \r\n
  5. Includes:開放 SSI 的權限。 \r\n
  6. FollowSymLinks:准許以符號連結到其他目錄。 \r\n
  7. ExecCGI:允許執行 CGI 程式。 \r\n
  8. SymLinksfOwnerMath:允許符號連結到的目錄與原始目錄的所有人不同。
\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

<Directory />                      <– 設定為根目錄
Options FollowSymLinks   <– 此目錄允許透過 symbolic links 存取
AllowOverride None          <– 此目錄的權限不受.htaccess 檔影響
</Directory> \r\n

 

\r\n

<Directory \”/usr/local/apache/htdocs\”>
Options Indexes FollowSymLinks          <–  只開啟 Indexes 及 FollowSymLinks 功能
AllowOverride None                              <– 此目錄的權限不受.htaccess 檔影響
Order allow,deny
Allow from all                                        <– 所有的 user 都可以存取得控制權
<Directory>

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

UserDir

\r\n

語法:UserDir <目錄名稱>
預設:UserDir public_html

\r\n

UserDir 用來指定供使用者放置個人網頁時,該放在自家〈home〉目錄裡的那一個目錄中才能讓人瀏覽。若以 http://myserver/~username 作為開始的一個 URL 連線請求將會被轉換成以 home-dir/public_html 作為開始的檔案名稱,其中 home-dir 是 username 這個使用者的自家目錄。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

UserDir public_html

\r\n

-> 設定使用者必須把自己的網頁放在自家目錄的 public_html 目錄下才能供人瀏覽。對 http://myserver/~user/dir/file.html 的請求將傳回 http://myserver/home/user/public_html/dir/file.html 這個檔案。

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

DirectoryIndex

\r\n

語法:DirectoryIndex <檔名1> <檔名2>…
預設:DirectoryIndex index.html

\r\n

DirectoryIndex 用於設定當使用者端藉由指定沒有以檔案做結尾的目錄名稱請求該目錄的索引時所要找尋的來源列表。參數 [檔名1] 是在伺服器上相對於請求之目錄的文件;它通常是目錄裡某個檔案的名稱。可以有好幾個檔名,伺服器會回傳它所找到的文件。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

DirectoryIndex index.html

\r\n

-> 對於 http://myserver/docs/ 的請求若該來源設定的檔案存在的話會回傳 http://myserver/docs/index.html。

\r\n

 

\r\n

 

\r\n

 

\r\n

DefaultType

\r\n

語法:DefaultType <MIME 種類>
預設:DefaultType text/plain

\r\n

DefaultType 用於設定當伺服器無法辨識檔案類型,要把它當作何種的 MIME 格式。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

DefaultType text/plain

\r\n

-> 將無法分辨的一律當成明文文字格式

\r\n

 

\r\n

 

\r\n

 

\r\n

HostNameLookups

\r\n

語法:HostNameLookups <On/Off>
預設:HostNameLookups Off

\r\n

HostNameLookups 用於設定要不要把自動搜尋 HostName 的功能打開,設定為 On 時,則會記錄進入此網站使用者的主機名稱。設為 Off,則僅記錄使用者主機的 IP。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

HostNameLookups Off

\r\n

-> 關掉自動反查 IP 功能

\r\n

 

\r\n

 

\r\n

 

\r\n

ErrorLog

\r\n

語法:ErrorLog <檔案名稱>
預設:ErrorLog /usr/local/apache/logs/error_log

\r\n

ErrorLog 設定錯誤記錄檔案名稱,伺服器將會把其遭遇的每個錯誤記錄到這個檔案。如果檔案名稱不是以 / 開始的話那麼它就會被假設為相對於 ServerRoot 的路徑。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

ErrorLog /usr/local/apache/logs/error_log

\r\n

-> 當 apache 發生錯誤時,會把訊息記錄到 /usr/local/apache/logs 目錄下的 error_log 檔中

\r\n

 

\r\n

 

\r\n

 

\r\n

LogLevel

\r\n

語法:LogLevel <debug/info/notice/warm/error/crit/alert/emerg>
預設:LogLevel warm

\r\n

LogLevel 用於設定 error_log 中記錄的錯誤訊息種類,建議值是 warm,參數越往右邊所記錄的資訊越簡略。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

LogLevel debug

\r\n

-> 設定 apache 的記錄錯誤方式為除錯模式〈debug〉

\r\n

 

\r\n

 

\r\n

 

\r\n

Alias

\r\n

語法:Alias <虛擬目錄> <實際目錄>

\r\n

Alias 指令用於設定實際目錄至虛擬目錄之別名,可將原本很長的路徑簡化。

\r\n

例: \r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n

Alias /doc /usr/local/apache/htdocs/manual/doc/

\r\n

-> 原本需要用 http://localhost/manual/doc 才能連到的網頁,現在僅需使用 http://localhost/doc 即可。

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

4. 啟動與結束

\r\n

當設定完 httpd.conf 之後,Apache 的設定步驟就算完成了。現在我們來看如何啟動以及結束 Apache 伺服器程式。

\r\n

4.1 啟動 httpd

\r\n

啟動 Apache 伺服器程式的方法非常簡單,執行以下程式,即可將伺服器程式 httpd 啟動:

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /usr/local/apache/bin/apachectl start

\r\n

 

\r\n

 

\r\n

若使用 apt-get 或 rpm 安裝則可以直接執行位於 /etc/init.d 目錄下的指令稿來啟動

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /sbin/service httpd start

\r\n

\r\n

[root@root]# /etc/init.d/httpd start

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

啟動後,可以使用 ps 指令來檢查一下目前 httpd 是否已經在執行:

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# ps axu | grep httpd
nobody 3229 0.0 0.4 2384 1044 ? S 14:24 0:00 /usr/local/apache/bin/httpd
nobody 3230 0.0 0.4 2384 1044 ? S 14:24 0:00 /usr/local/apache/bin/httpd
nobody 3231 0.0 0.4 2384 1044 ? S 14:24 0:00 /usr/local/apache/bin/httpd
nobody 3232 0.0 0.4 2384 1044 ? S 14:24 0:00 /usr/local/apache/bin/httpd
nobody 3233 0.0 0.4 2384 1044 ? S 14:24 0:00 /usr/local/apache/bin/httpd

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

4.2 結束 httpd

\r\n

結束 Apache 伺服器程式的方法也非常簡單,執行以下程式,即可將伺服器程式 httpd 結束:

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /usr/local/apache/bin/apachectl stop

\r\n

 

\r\n

 

\r\n

若使用 apt-get 或 rpm 安裝則可以直接執行位於 /etc/init.d 目錄下的指令稿來結束:

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# /sbin/service httpd stop

\r\n

\r\n

[root@root]# /etc/init.d/httpd stop

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

4.3 測試

\r\n

當啟動 Apache Server 後,可以透過開啟 X Windows 中的 Mollia 瀏覽器來測試,只需在位址列輸入:http://localhost/ 即可。或者可利用 Lynx 文字瀏覽器來測試,用法如下:

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

[root@root]# lynx -dump http://localhost/

\r\n

 

\r\n

 

\r\n

若看到以下畫面就是代表連線正常安裝完成了。

\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n

If you can see this, it means that the installation of the [1]Apache
web server software on this system was successful. You may now add
content to this directory and replace this page.
___________________________________

Seeing this instead of the website you expected?

This page is here because the site administrator has changed the
configuration of this web server. Please contact the person
responsible for maintaining this server with questions. The Apache
Software Foundation, which wrote the web server software this site
administrator is using, has nothing to do with maintaining this site
and cannot help resolve configuration issues.
___________________________________

The Apache [2]documentation has been included with this distribution.

You are free to use the image below on an Apache-powered web server.
Thanks for using Apache!

References
1. http://www.apache.org/foundation/preFAQ.html
2. http://localhost/manual/

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

 

\r\n

5. 參考資料 \r\n

    \r\n
  1. Apache Reference Manual: http://httpd.apache.org/docs/ \r\n
  2. Study Area: http://www.study-area.net/linux/servers/linux_www.htm \r\n
  3. 中文 Linux WWW HOWTO: http://www.linpus.com.tw/nicedoc/CLDP/WWW-HOWTO.html

  作为流行的 Web 编程语言, PHP 的最大优势就是速度。 PHP4 已经在这方面做的非常好了,你几乎找不到比它更快的脚本编程语言了。但是如果你的应用负荷很大,而带宽又比较小,或者有其他的瓶颈影响你的服务器性能,那么,你不妨试试笔者为你开出的几个药方,看看是否灵验。

  一、代码优化

  一谈到代码优化,或许你想到的就是整齐明了的代码,但是本文的意思却不是在此,因为如果要寻求速度的话,就要对PHP 源码作相应的调整。一般说来就是去掉多余的注释,让代码不可读。但是这对于一个具有良好素养的程序员来说,简直就是不可思议的。好在Zend Technologies 公司发布了 Zend 优化引擎可以帮助你做到这一点。它现在是免费的,但是你必须遵循 Zend Optimizer 许可。这个产品可以对引擎产生的中间代码进行优化。

  安装这个引擎比较简单,下载对应平台的版本以后,解开压缩文件,然后在 php.ini 文件里面加上下面两行,重新启动 Web 服务器,就搞定了。

zend_optimizer.optimization_level=15

zend_extension="/path/to/ZendOptimizer.so"

zend_loader.enable=Off

  如果是 Win32 平台的话就应该是:

zend_optimizer.optimization_level=15

zend_extension_ts="C:\\path\\to\\ZendOptimizer.dll"

zend_loader.enable=Off

  啊!没有搞错吧?怎么是三行?其实第三行是可选的。因为看起来把 zend_loader 关掉能提高一点速度,因此值得把这第三行放到 php.ini 。需要注意的是,关掉的前提条件是你没有在使用 Zend 加密程序。

  二、缓冲

  如果想要更进一步提升速度,我们就需要考虑采用缓冲技术了。有一些可选的解决方案,包括 Zend Cache (测试版本), APC, 以及 Afterburner Cache,另外还有 jpCache 等。

  以上这些都是属于缓冲模块,他们把第一次对 .php 文件请求产生的中间代码存储在 Web 服务器的内存中,然后对以后的请求返回“编译好”的版本。因为这样减少了磁盘读写,而且都在内存工作,所以这个过程能显著提升应用性能,

  现成的这类产品比较多,到底选择谁呢?

  Zend Cache 是一款不错的商业产品,在第一次加载那些很大的 PHP 页面后,你会明显感受到速度的提升,服务器会留出更多的资源。可惜这个产品是要花银子的,但是在有些情形下,你可不要吝啬这些银子。

  Afterburner Cache 是 Bware Technologies 的产品,目前还处于 Beta 版本,看起来似乎和 Zend Cashe 一样,但是它不能达到 Zend Cache 那样好的效果,也不能和 Zend 优化引擎一起工作,但是它是免费的,所以我采用了这个模块。

  APC (Alternative PHP Cache) 是 Community Connect 发布的又一个免费模块,看起来似乎可以用于生产环境了。

  三、Web 内容压缩

  对于日益拥挤的网络来说,节约带宽就像节约用水一样是十分值得提倡的。根据IETF 标准,大多数浏览器应该支持使用 gzip 压缩的内容。也就是说你可以把用 gzip 压缩的内容发送给浏览器,浏览器会透明的解压数据。

  mod_gzip 是 Remote Communications 公司推出的免费 Apache 模块,能把静态的Web 内容压缩后发送给浏览器。对于大多数静态网页来说,这个模块十分合适。尽管

  Remotecommunications 公司的人说这个模块支持所有那些 mod_php, mod_perl,mod 什么产生的动态内容,但是看起来还是不能工作,从 mod_gzip 的邮件列表来看,这个问题估计要到1.3.14.6f 才能解决。

  如果要压缩动态内容的话,我们可以采用class.gzip_encode.php,一个在脚本开始和结束时使用的 PHP 类。对整个网站来说就是在 php.ini 的 auto_prepend 和 auto_append 中调用其中的函数。详细你可以阅读这个类的程序,这个程序注释得很好,作者几乎把什么都告诉你了。不过使用之前,你的 PHP 要编译为支持 zlib。

  对于 PHP 4.0.4 来说,一个新的解决方案就是使用 ob_gzhandler,能达到和上面的类一样的效果,只要简单的在 php.ini 加入下面这句话就可以了:

output_handler = ob_gzhandler ;

  这能让 PHP 激活输出缓冲,并压缩所有输出。如果有什么特殊的理由不想让所有的内容都压缩输出的话,可以采用在 .htaccess 文件中加入下面的行,对对应目录下的文件进行压缩。

php_value output_handler ob_gzhandler

  也可以直接在 PHP 代码中加入:

ob_start("ob_gzhandler");

  这项压缩技术十分有效,但是对 Netscape Communicator 用户来说,因为不能压缩图形文件,所以看上去没有完整的发送,因此必须关闭对 jpeg 和 gif 文件的压缩,IE 没有这个问题。

  结论:

  采用本文所讨论的技术应该能改善你的网站性能,但是需要注意的是:

  - PHP 可能不是导致瓶颈的原因,仔细检查其他原因(例如:数据库)

  - 你不可能把服务器性能调节到最高状态。因此在埋怨 PHP 及其缓冲之前,考虑是否该升级服务器了,或者采用动态负载平衡技术(那可是一大笔银子哦)。

  - 不要低估内容压缩,在你 100 Mb 的内部网上面看到 PHP 应用的速度提升时,不要忘记使用调制解调器的用户在哪里埋怨你的 100Kb 的 HTML 页面。

\r\n

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.chedong.com/tech/apache_install.html

\r\n

关键词: apache install php resin mod_gzip mod_expire webalizer cronolog

\r\n

内容摘要:

\r\n

Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。

\r\n

本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。

\r\n
    \r\n
  1. WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式; \r\n
  2. Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
    修改 HARD_SERVER_LIMIT:
    vi /path/to/apache_src/src/include/httpd.h
    #define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
    apache编译:
    ./configure –prefix=/home/apache –enable-shared=max –enable-module=most \r\n
  3. 可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
    mod_php安装:./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql
    mod_resin安装:./configure –with-apxs=/home/apache/bin/apxs
    mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
    工具:日志轮循工具cronolog安装:http://www.cronolog.org \r\n
  4. 升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
    按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
    系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
    应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
    系统升级:系统管理员:升级操作系统/升级Apache
    应用升级:应用管理员:升级应用模块,PHP Resin等。
\r\n

WEB应用的容量规划

\r\n

Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5

\r\n

为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。

\r\n

例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。

\r\n

例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000

\r\n

以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。

\r\n

Apache安装过程

\r\n

服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif

\r\n

解释:
Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高Apache的 HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(Apache的软上限的规划请看后面)。

\r\n

Apache的编译:以下通用的编译选项能满足以后任意模块的安装
./configure –prefix=/another_driver/apache/ –enable-shared=max –enable-module=most
比如:
./configure –prefix=/home/apache/ –enable-shared=max –enable-module=most

\r\n

解释:
–prefix=/another_driver/apache/:建议将apache服务安装在另外一个驱动设备上的目的在于硬盘往往是一个系统使用寿命最低的设备,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,应用备份和恢复过程。

\r\n

–shared-module=max:使用动态加载方式载入子模块会带来5%的性能下降,但和带来的配置方便相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化等

\r\n

–enable-module=most:用most可以将一些不常用的module编译进来,比如后面讲到的mod_expire是就不在 apache的缺省常用模块中

\r\n

如果不想build so, 也可以这样:
./configure \\
\”–with-layout=Apache\” \\
\”–prefix=/path/to/apache\” \\
\”–disable-module=access\” \\
\”–disable-module=actions\” \\
\”–disable-module=autoindex\” \\
\”–disable-module=env\” \\
\”–disable-module=imap\” \\
\”–disable-module=negotiation\” \\
\”–disable-module=setenvif\” \\
\”–disable-module=status\” \\
\”–disable-module=userdir\” \\
\”–disable-module=cgi\” \\
\”–disable-module=include\” \\
\”–disable-module=auth\” \\
\”–disable-module=asis\”

\r\n

但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是Apache本身升级都必须把Apache和PHP的SOURCE加在一起重新编译。

\r\n

apache的缺省配置文件一般比较大:可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v \”#\” httpd.conf.default >httpd.conf

\r\n

需要修改的通用项目有以下几个:

\r\n

#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80

\r\n

#服务器名:缺省没有
ServerName name.example.com

#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800

\r\n

#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200

\r\n

不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200

\r\n

但从我的经验看来:缺省值已经是非常优化的了,而且让Apache自己调整子共享进程个数还是比较好的。

\r\n

特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000

\r\n

应用模块和工具的安装配置:

\r\n

由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把Apache定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么其他子模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把Resin模块加载上。而且各种模块的插拔非常简单,这样调试过程中就可以简单的通过注释掉不需要的模块,而不用重新编译。

\r\n

一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so

\r\n

最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so

\r\n

可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadModule alias_module libexec/mod_alias.so

\r\n

常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。

\r\n

建议将所有MODULE的配置都放到相应模块的配置内部:<IfModule some_module.c>some_module config </IfModule>

\r\n

PHP的安装:
/path/to/php_src/configure –with-apxs=/path/to/apache/bin/apxs –with-other-modules-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php

\r\n

resin的安装设置:
/path/to/resin/src/configure –with-apxs=/path/to/apache/bin/apxs

具体的resin设置放在另外一个文件中:比如/home/resin/conf/resin.conf
<IfModule mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfModule>

\r\n

mod_expires的安装配置:
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/gif \”access plus 1 month\”
    ExpiresByType text/css \”now plus 1 month\”
    ExpiresDefault \”now plus 1 day\”
</IfModule>

\r\n

注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期

\r\n

mod_gzip的安装
http://www.chedong.com/tech/compress.html

日志的轮循:cronolog的安装和设置
\r\n

cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:

\r\n

CustomLog \”|/usr/local/sbin/cronolog /home/apache/logs/%w/access_log\” combined

日志将按天截断并存放在以星期为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日

用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log

日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f
\r\n

升级维护

\r\n

由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfModule mod_name>
CONFIGURATIONS..
</IfModule>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzip.c
就屏蔽了mod_gzip,而其他模块不首任何影响。

\r\n

安装和维护过程:

\r\n
    \r\n
  • 系统安装:系统管理员的职责就是安装系统和一个按照DSO模式安装的Apache,然后COLON。 \r\n
  • 应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。 \r\n
  • 系统升级:系统管理员:升级系统/升级Apache \r\n
  • 应用升级:应用管理员:升级应用模块:PHP CAUCHO等 \r\n
  • 系统备份/恢复:如果Apache不在缺省的系统盘上,只需要将Apache目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,再直接将Apache所在物理盘恢复就行了。
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
系统管理员:Apache的最简化安装OS + Apache (httpd core only)
应用管理员:应用模块定制纯静态页面服务
core
PHP动态页面
core+so
+php
JAVA应用
core+so
+caucho
+ssl
应用例子:www.example.com
image.example.com
bbs.example.commall.example.com
\r\n


\r\n

例子:Apache和PHP模块的独立升级。

\r\n

如果Apache是按照以下方式安装:
./configure –prefix=/home/apache –enable-shared=max –enable-module=most
PHP是按照以下方式安装:
./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql

以后单独升级Apache的时候,仍然是:
./configure –prefix=/home/apache –enable-shared=max –enable-module=most
make
su
#/home/apache/bin/apachectl stop
#make install

单独升级php时,仍然是:
./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql
make
su
#/home/apache/bin/apachectl stop
#make install
#/home/apache/bin/apachectl start

\r\n

基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。

\r\n

小提示:

\r\n

Apache安装后,缺省根目录下没有但很有用的2个文件:

\r\n
    \r\n
  • favicon.ico: favicon.ico是一个16×16的站点图标文件,如果浏览器发现有这个文件,在地址栏中会用这个图标替换调浏览器的网页图标。IE6和 MOZILLA等主流浏览器都支持这个功能。
    例如: http://www.chedong.com/favicon.ico
    \r\n
  • robots.txt: 用于告诉搜索引擎的爬虫程序(spider)网站那些页面可以被索引,那些不可以。
    具体说明请参考:http://www.robotstxt.org/wc/robots.html
\r\n

参考文档:

\r\n

Apache项目
http://httpd.apache.org

\r\n

PHP
http://www.php.net

\r\n

Resin
http://www.caucho.com

\r\n

mod_gzip
http://sourceforge.net/projects/mod-gzip/

\r\n

Cronolog
http://www.cronolog.org

\r\n

mod_expires
http://httpd.apache.org/docs/mod/mod_expires.html

\r\n

面向搜索引擎的CMS设计:
http://www.chedong.com/tech/cms.html

看厕所的老头怎么逼死移动老总的

今天早上,移动一官员猪古力在外突然感觉内急,只好找公共厕所。

  "干什么的?"大爷喊。

  "我是移动老总,我内急。"猪古力。

  "你不知道现在什么都要收费啊?"大爷。

  "行,多少钱?"猪古力。

  "进去5毛,出来3毛。"大爷看着他。

  "什么出来也要收费?"猪古力瞪着眼睛。

  "看什么看,我们这里实行双向收费。如果你办个厕所套餐的话,就可以单向收费了。

  "大爷站起来。

  "行,我付钱。"猪古力掏出十块钱。

  "大便还是小便?"大爷捏住钱问。

  "大便,快点。"

  "恩,你需要办理套餐吗?如果你一次性大便五十次,可以给你优惠再大便三十次。"大 爷说。

  "别说了,我先进去,马上出来付钱。"老总进去后,选择了最后一个坑位爽了好久后 出来了。

  "先生,您选择的是五号坑位,得付选号费用5毛钱,你在里面呆的时候没有说不要选 择放音乐,所以每次收费6毛钱。另外你在里面蹲了十五分零一秒,前一分钟按5毛每分, 后面按每分钟四毛计费。不足一分钟按一分钟计费。另外由于你的排泄量占用 了我们的下水道带宽,所以请你另外按包月付出费用50园。最后你可以通过小孔看到进厕所的其他人,请付来人显示费1块钱。"猪古力先生已经呆在那里。

  "所以,老总先生,我们这里不刷卡,总共你要付59.4毛钱,如果逾期不交纳,按每日

  千分之三的费用计滞纳金,我方不另行通知,到积累到千元我方将通过法律手段催缴。

  "大爷刚刚说完,猪古力先生扑通一声晕倒在小便池里
关键词:手机、乱收费

作者:木蚂蚁社区 来源于:www.mumayi.net

根据研究,Google能抓取的页面文件的极限是101Kb,超过这个极限的内容,google不再读取。比如:sina的首页文件大小是236Kb,而google能抓取的只有101KB,也就是说,sina首页的50%以上的内容是不为google抓取的。(可怜的sina,在google的眼里连版权都没有:)此外,有某些blog站点上有大量的评论,如果该页面的大小已经超过了101KB,你发再多的评论也是没有任何用处的。
启示:(1)建站时,任何一个页面文件的大小不要超过101KB,如果超过,请不要把重要的内容放在文件的尾部;(2)与大型门户网站(尤其是新浪)做文字链接、图片链接的,千万不要购买中下的位置,要尽可能的靠上。(3)做blog评论时,首先要看该页面的文件大小,如果远远小于101KB,就算页面的链接超过了100个也是无关紧要的;但如果已经超过101KB,那么还是放弃的好,免得做无用功。