設為首頁

收藏本站

導覽首頁 | 新登場    ◇聯盟溫泉 | 民宿 | 人力銀行 | 女性 |

類型:Apache

網頁服務器 - Apache
編者小語

在筆者所服務的公司中,都以Linux上的Apache做為網頁服務器。這樣做的理由有三:第一,Windows上的IIS服務器效能較差,特別是訪問人數多的時候;第二,UNIX價格高,專門做為網頁服務器成本過高;第三,Linux上的Apache可以裝在一般的個人計算機上,不需額外的開支。事實上最重要的一點就是Apache的效能確實相當優異,這點從目前市面上的網頁服務器占有率就可以得知。
Apache只是單純的網頁服務器,若要整合程序的後台管理與數據庫,就必須搭配其他程序或服務器,如PHP、MySQL、Perl等。



一、WWW服務概述

* 1 Apache服務器簡介

Apache服務器是由Apache Group的組織所開發,而最初的計劃Apache Project,是為了建立一個穩定與公開原代碼的HTTP服務器。這個計劃大多是由世界各地的志願者,利用互聯網來互相傳遞有關的設計事宜與相關文件。
在1995 年4 月,發行了第一個公開版本的Apache服務器,也就是Apache0.6.2。它是由NCSA httpd 1.3 為基礎,接著在同年的7 月及12 月分別推出0.8.8和1.0.0 的版本。到了1999 年6 月,由原先Apache Group 成員共同成立了Apache 軟件基金會(Apache Software Foundation)。而原本開發httpd的NCSA( National Center for Supercomputing Applications)也公開建議改用Apache服務器,這可說是將Apache服務器正式推向世界的舞台。
Apache server 為目前最有名的web server之一,由於在多人聯機的狀態下效能優異,再加上在一些平台上是免費的,所以普及率十分高。在本章節中,就由安裝開始,然後藉由常用範例來介紹,進而講解指令以及配置文件的部分。豐 哥 的L  in u  x小站 ht  t p  :/ /linuxdocs.cublog.cn/

* 2 Apache的優點與適用環境
底下列出Apache的優點與適用環境:
  ●Apache服務器也支持HTTP 1.1(RFC 2616)
  ●可與協議廠商開發的模塊相互配合
  ●提供完整的源代碼,並且允許自由使用及修改
  ●支持多種平台的使用,如Unix、Linux、Windows、及Netware 等
  ●支持數據庫管理(DataBase Management,DBM)驗證
  ●允許使用檔案或CGI Scripts 來響應服務器產生的錯誤
  ●沒有限制URL 重新導向(Redirection)和別名(Alias)的數量
  ●可設定的日志文件內容
  ●虛擬主機的設置,可讓一台Apache服務器上運行多個IP地址或域名的網頁服務


二、安裝與運行

* 1 軟件安裝

◆yum安裝(Red Hat與Fedora下的安裝)

使用yum的命令為yum install httpd,執行過程如下:

[root@localhost ~]# yum install httpd
載入插件: refresh-packagekit
設置安裝進程
分析安裝參數的語法
解決依賴相關
-->運行處理檢查
---> 包 httpd.i386 0:2.2.10-2 設置為 升級
--> 完成依賴性檢查

依賴性解決

=======================================================================
包   架構 版本 倉庫   大小
=======================================================================
正在安裝:
httpd   i386   2.2.10-2   fedora   1.1 M

Transaction Summary
=======================================================================
Install   1 Package(s)
Update   0 Package(s)
Remove   0 Package(s)

總共下載大小: 1.1 M
確定是這樣嗎? [y/N]: y <--輸入y繼續
下載軟件包:
httpd-2.2.10-2.i386.rpm | 1.1 MB 00:11
運行 rpm_check_debug
運行測試事務處理
傳輸測試完成
事務處理測試成功
運行事務處理

已安裝:
  httpd.i386 0:2.2.10-2

恭喜你!成功完成!


◆apt-get安裝(Debian與Ubuntu下的安裝)
使用apt-get的命令為apt-get install apache,執行過程略。
◆emerge安裝(gentoo下的安裝)豐哥的Li nux小站 http://linuxdocs.cublog.cn/
在gentoo下使用emerge,會下載原始文件進行編譯與安裝,過程略。

* 2 啟動與停止

我們可以使用以下命令啟動HTTP服務器:
/etc/init.d/httpd start

執行過程如下:

[root@localhost ~]# /etc/init.d/httpd start
啟動 httpd:   [確定]


若要停止服務器,可使用以下命令:
/etc/init.d/httpd stop
執行過程如下:

[root@localhost ~]# /etc/init.d/httpd stop
停止 httpd:   [確定]



若要重新啟動服務器,可使用以下命令:
/etc/init.d/httpd restart
  !在gentoo中需執行/etc/init.d/apache restart
執行過程如下:

[root@localhost ~]# /etc/init.d/httpd restart
停止 httpd:   [確定]
啟動 httpd:   [確定]




三、配置實例

* 1 一般運行範例

範例1. Red Hat與Fedora的第一次啟動並更換首頁

當我們依照上述安裝步驟完成,並啟動Apache HTTP的服務後,就可以直接使用它。若我們要換上自己設計的網頁,只需將網頁放到/var/www/html/之下即可,首頁的檔名須為index.html,若欲被變更為其他檔名,譬如index.htm,則需要以下兩個步驟:


Step1. 修改配置文件httpd.conf,將

DirectoryIndex index.html index.html.var  
改為
DirectoryIndex index.htm index.html index.html.var

Step2. 重新啟動HTTP
/etc/init.d/httpd restart

範例2. Fedora的錯誤導向設定

讀者可能會覺得奇怪,文件根目錄為/var/www/html之下,但在/var/www/html/底下明明甚麼都沒有,怎麼會出現以下的網頁(如圖1所示):



圖1.Fedora測試頁


原因在於/etc/httpd/conf.d/welcome.conf:

<LocationMatch "^/+$">  
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>

由於/var/www/html/底下沒有對應的index.html文件,因此對系統而言,這是錯誤的情況,系統就會帶出Error Document(如上面所示)所對應的文件/error/noindex.html(完整路徑為/var/www/error/noindex.html),因此就出現了上圖所示。
換言之,在Fedora底下,apache服務器默認的首頁為/var/www/error/noindex.html。但只要我們將首頁取名為index.html並放置到/var/www/html/底下,就會顯示對應的網頁了。

範例3. 換個port提供服務

  修改/etc/httpd/conf/httpd.conf,如下所示:

#Listen 12.34.56.78:80
Listen 8080

只要將80換成8080,重新啟動HTTP服務即可。若是這台機器上有好幾個IP address,而我們只希望其中某一個地址來提供服務,我們可以鍵入完整的IP address,也就是將
Listen 80 換為Listen 192.168.1.1:80其中192.168.1.1為讀者想提供服務的IP地址。

當然,修改完別忘了重新啟動HTTP 服務。
/etc/init.d/httpd restart


* 2 目錄權限配置


範例4. 瀏覽首頁下的目錄


如果想瀏覽首頁下的目錄,必須終止錯誤導向的設定,如範例2所示,因此必須加上#於/etc/httpd/conf.d/welcome.conf中的四行,如下所示:

#<LocationMatch "^/+$">  
# Options -Indexes  
# ErrorDocument 403 /error/noindex.html
#</LocationMatch>


接著,重新啟動apache:豐哥的Lin ux小站 ht tp://lin uxdocs.cublog.cn/
/etc/init.d/httpd restart

我們放置一些目錄以及文件到/var/www/html/之下,並重新連接網頁,就會出現圖3。




* 3 用戶個人網頁的設置


範例5. 給每個使用者自定義網頁吧~



假設機器的IP address為192.168.1.40。


Step1. 修改 /etc/httpd/conf/httpd.conf,將

UserDir disable  

這行前面加上#,並將#UserDir前面的#拿掉,後面public_html改為www,如下所示:

<IfModule mod_userdir.c>  
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).  
#
#UserDir disable  
#
# To enable requests to /~user/ to serve the user's public_html  
# directory,remove the "UserDir disable" line above, and uncomment
# the following line instead:  
#
UserDir www
</IfModule>


其中 UserDir 後面為一般用戶網頁的根目錄,以此例而言,為用戶目錄下的www。換句話說,使用者必須將做好的網頁置於自己根目錄下的www,首頁檔名當然要根據上一個例子所定義的為主,那麼只要在瀏覽器中鍵入http://192.168.1.40/~<使用者名稱> 即可連到該用戶根目錄下的www目錄中的網頁。

至於 <Directory /home/*/public_html> 到 </Directory> 之間的內容,為目錄權限的控管描述,因此我們也必須將public_html改為www,如下所示:

<Directory /home/*/www>  
AllowOverride FileInfo AuthConfig Limit  
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>  
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>  
</Directory>


Step2. 重新啟動HTTP
/etc/init.d/httpd restart

一般使用者peter該如何存放網頁呢?
首先,先到根目錄下新增一目錄www:
mkdir www

接著在該目錄中新增一個文件index.html,並在該文件中放些文字,以便測試是否成功:
echo "A test page" > www/index.html

這時,我們試著連到該網站,則會出現以下畫面:



圖5.需要認證


怎麼會出現錯誤呢?
第一,我們會檢查上一層(/home/peter/www)與上上一層目錄(/home/peter)的權限,確認是否讓一般使用者可閱讀與執行的權限,若無,可執行:
chmod 755 /home/peter
chmod 755 /home/peter/www


這樣設定後,還是出現相同的錯誤!?
這是SELinux的設定問題,最消極的做法,當然是將SELinux關掉,但這是不建議的做法。
合理的做法是將www這個目錄的domain改為httpd_user_content_t,指令為:
chcon -R -t httpd_user_content_t www/

執行並使用ll -Z查看,過程如下:
[peter@localhost ~]$ ll -Z
drwxr-xr-x  peter peter root:object_r:user_home_t www
[peter@localhost ~]$ chcon -R -t httpd_user_content_t www/
[peter@localhost ~]$ ll -Z
drwxr-xr-x  peter peter root:object_r:httpd_sys_content_t www



最後,我們在試著連到網站http://192.168.1.40/~peter:





* 4 認證畫面的配置



範例6. 身分驗證—提供用戶名稱跟密碼的輸入



對於某些網頁或是內容,我們希望提供一個認證的動作,也就是瀏覽器連到該網頁時,會跳出另一個窗口,要求輸入用戶名稱跟密碼,如圖7所示。
這個例子跟著範例5,假設我們已經有一個使用者peter,並將網頁置於個人根目錄的www之下,他希望任何人瀏覽網頁必須輸入名稱跟密碼,則步驟如下:


Step1. 新增一個Apache所認證的id,superman,以及密碼abc123,並將密碼文件置於 /opt/passwords。要注意喔,這個密碼文件必須要能夠被apache這個用戶權力的身分所讀取,並且最好放在瀏覽器無法存取的位置,以免遭到修改或是讀取。
[root@fc ~]# htpasswd -c /opt/passwords superman
New password:
Re-type new password:
Adding password for user superman


!superman只是apache上的賬號,在系統上不需要這個賬號。


Step2.  首先將 /opt/passwords的讀取權限,開放給予一般使用者,否則認證的功能將無法啟動。由於apache除了port 80的程序由root執行之外,其他的程序由apache這個使用者身分所執行,所以必須開放根目錄的讀取權限。
chmod 644 /opt/passwords

Step3. 修改 /etc/httpd/conf/httpd.conf ,加上以下四行:
AuthType Basic
AuthName " ===Restricted files=== " 
AuthUserFile /opt/passwords  
require user superman
如下所示:

<Directory /home/*/www>
AuthType Basic
AuthName "===Restricted files==="
AuthUserFile /opt/passwords
require user superman
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>



Step4. 重新啟動HTTP豐 哥的 L in ux 小站 ht tp: //linu xdocs.cublog.cn/
/etc/init.d/httpd restart
這樣就完成啦! 試試看吧,開一個瀏覽器,並在網址內輸入: http://10.1.1.1/~peter,則會出現圖8。


圖8.認證窗口


輸入用戶名:superman和密碼:abc123後, 則可以進入主畫面,如圖9;若是輸入錯誤,或者按取消,則會出現圖10。


圖9.測試頁



圖10.需要認證



* 5 別名與虛擬目錄


範例7. 虛擬主機: 單一機器擁有多個網址
假設主機A的IP address為10.1.1.1,但有兩個不同的域名 (domain name),分別為www.test.com 以及 www.tree.com 。我們希望client端在瀏覽器上輸入不同的網址,則會連到不同的目錄。


圖11.虛擬目錄對應


這是常見的設定,將不同網域的網址指定給同一台機器上。


Step1. 修改/etc/httpd/conf/httpd.conf,如下所示:

NameVirtualHost 10.1.1.1  
<VirtualHost www.test.com >  
DocumentRoot /home/test/www  
ServerName www.test.com  
ErrorLog logs/error_log1  
CustomLog logs/access_log1 common 
</VirtualHost>  
<VirtualHost www.tree.com >  
DocumentRoot /manual
ServerName www.tree.com  
ErrorLog logs/error_log2  
CustomLog logs/access_log2 common
</VirtualHost>  

以上圖而言,如果在瀏覽器鍵入 http://www.test.com/  則網頁的根目錄為 /home/test/www,而錯誤及鏈接的紀錄文件分別紀錄在 /var/log/httpd/error_log1及/var/log/httpd/access_log1 之中; 而如果在瀏覽器鍵入http://www.tree.com/,則網頁的根目錄為 /var/www/html/manual/,而錯誤及鏈接的紀錄文件分別紀錄在 /var/log/httpd/error_log2以及 /var/log/httpd/access_log2之中。


Step2. 重新啟動HTTP
/etc/init.d/httpd restart
要注意SELinux對目錄的設定喔,不然會無法存取。


範例8. 重定向>>>



圖12


在這邊將介紹兩種重新導向的方式:一種為目錄的重定向,另一種為網址解析的重定向。

>>>目錄的重定向
若我們要將網址後面的目錄 /man重新導向到 /manual,也就是使用者連到 http://10.1.1.1/man 時,會自動連到http://10.1.1.1/manual ,則步驟如下:


Step1. 修改 /etc/httpd/conf/httpd.conf,如下所示:
新增一行如下:
Alias /man /var/www/html/htdocs/manual/

Step2. 重新啟動HTTP
/etc/init.d/httpd restart
!要注意SELinux對目錄的設定喔,不然會無法存取。

>>>網址的重新導向
這邊我們希望連到http://home.xxx.net/ 時,能自動被導向到http://www.qq.com/。當然讀者要將home.xxx.net換成自己的網址,且10.1.1.1要換成正確的IP address,並操作如下:


Step1. 修改/etc/httpd/conf/httpd.conf,在文件的最後,新增四行如下:
<VirtualHost 10.1.1.1>  
ServerName home.xxx.net
Redirect permanent / http://tw.yahoo.com/
</VirtualHost>  

Step2. 重新啟動HTTP
/etc/init.d/httpd restart


範例9. 分散流量



圖13


這並不是apache上的設定,在這邊提供兩種設定方式,一者使用DNS server的設定,將同一個網址對應到多個IP address;另一者為iptables的設定,在這邊僅介紹前者,iptables在後面另有介紹(略)。


Step1. 在test.com的DNS server上增加兩筆A record,如下所示:
www   IN   A   10.1.1.1  
www   IN   A   10.1.1.2  

Step2. 重新啟動DNS server即可
/sbin/service named restart


四、配置文件說明


* 1 apache.conf或httpd.conf說明

 整體的環境設定

Apache 服務器所在的根目錄豐哥的Linux小站 http://linuxdocs.cublog.cn/

ServerRoot "/etc/httpd"



  執行http這個服務的程序號碼

<IfModule !mpm_netware.c>
PidFile logs/httpd.pid
</IfModule>


  在傳送與接收之前逾時的秒數

Timeout 300



  是否保持持續聯機狀態

KeepAlive On



建立聯機時所允許的最大響應數
若希望提升效能,這個值應該要增大。0表示不限。

MaxKeepAliveRequests 100


聯機超時設定
在相同的主機與相同的聯機中,等待下一個請求的秒數,超過即算超時。

KeepAliveTimeout 15


 網絡地址與端口號設定

設定服務器掛在哪個網IP址的哪一個埠號上,這在多個網絡下才有意義。
#Listen 12.34.56.78:80

埠號設定

Listen 80


延伸狀態控制
這個控制是否紀錄完整的狀態(on),或只是基本信息(off),默認值是關閉。
#ExtendedStatus On

  主服務器的設定

定義執行httpd的使用者與群組
默認值是apache。


User apache
Group apache


當系統出現問題或是網頁無法瀏覽時,所出現的聯絡email。

ServerAdmin admin@test.com


域名的認證
#ServerName new.host.name:80

是否使用別名。

UseCanonicalName Off


網頁根目錄所放的路徑。

DocumentRoot "/var/www/html/htdocs"


  目錄權限控制

對於apache而言,每一個目錄都可以設相關的權限. 這邊的默認值套用嚴格的限制:

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

目錄/var/www/html/htdocs的權限設定:

<Directory "/var/www/html/htdocs">
AllowOverride None
Order allow,deny
Allow from all
</Directory>


用戶個人網頁所在的目錄。

UserDir www



對個人網頁所在目錄的限制。

<Directory /home/*/www>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>


默認開啟的文件名

DirectoryIndex index.htm index.php index.html index.html


每個目錄中權限控管的文件
AccessFileName .htaccess
以下的設定避免 .htaccess 以及 .htpasswd 被web client看到。

<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>


紀錄文件中的網絡地址是否要做DNS反查。

HostnameLookups Off


錯誤文件的紀錄位置

ErrorLog logs/error_log


紀錄文件的等級

LogLevel warn


聯機紀錄的文件名與層級

CustomLog logs/access_log common


全部的紀錄都到一個紀錄文件中
#CustomLog logs/access_log combined

在一些網頁中是否要出現Admin的email的連結

ServerSignature On


建立別名

Alias /haha "/var/www/html/manual"


簡要說明
在一些鏈接中,將鼠標移至該文件,出現簡短的說明。
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz


默認的語言

AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage he .he
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage ko .ko
AddLanguage pt .pt
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .se
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw
AddLanguage hr .hr

語言的優先級

LanguagePriority tw en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv


個人化錯誤的訊息
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
# which allows you to create your own set of files by starting with the
# /var/www/html/error/include/ files and

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
Alias /error/ "/var/www/html/error/"

<Directory "/var/www/html/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
底下定義錯誤碼以及所對應的文件。
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>


  來源地址設定

允許 .your-domain.com 的機器能夠讀取 http://servername/server-status 的網頁數據,當然,.your-domain.com必須要換成我們所允許的網絡地址或是域名。
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your-domain.com
#</Location>

啟動proxy server
#<IfModule mod_proxy.c>
# ProxyRequests On
#
#<Proxy *>
# Order deny,allow
# Deny from all
# Allow from .your-domain.com
#</Proxy>

是否讓HTTP/1.1的標題信息出現
FULL是顯示完整信息,Block 是移除所有的信息。
# Set to one of: Off | On | Full | Block
#ProxyVia On

  虛擬主機的設定
NameVirtualHost 10.1.1.1
<VirtualHost 10.1.1.1>
DocumentRoot /home/test/mywww
ServerName www.xkan.net
ErrorLog logs/error_log
CustomLog logs/access_log1 common
</VirtualHost>
<VirtualHost 10.1.1.1>
DocumentRoot /var/www/html/manual/
ServerName apachedocs.xkan.net
ErrorLog logs/error_log2
CustomLog logs/access_log2 common
</VirtualHost>豐哥的Linux小站 http://linuxdocs.cublog.cn/



* 2 其他配置文件說明

Apache的所有配置文件都定義在httpd.conf之中,但在不同版本之下,會將httpd.conf根據性質拆解為多個配置文件,並放置在上一層目錄conf.d/之下,以Fedora 10為例,/etc/httpd/conf.d/下的文件內容有BackupPC.conf、perl.conf、proxy_ajp.conf、README、ssl.conf、welcome.conf、manual.conf、php.conf、python.conf、squid.conf、webalizer.conf,這些文件的內容格式與httpd.conf完全相同,因此在這邊不另做介紹。
(END)

104休閒信箱 2.3.0 © 104mm.com 2001 - 2019. 您尚未登錄
Page generated in 0.06210494 seconds with 3 Queries