一、簡介
1、認識
#加密網頁(https): tcp:443 明文網頁(http): tcp: 80
survey.netcraft.net --這個網站上可以查到最新的網站服務器的使用率
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最廣泛的一種網路協定。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一個發佈和接收HTML頁面的方法
#2、Apache
Apache HTTP Server(簡稱Apache )是Apache軟體基金會的一個開放原始碼的網頁伺服器,可以在大多數電腦作業系統中運行,由於其多平台和安全性被廣泛使用,是最受歡迎的Web伺服器端軟體之一,其特點如下:
1、支援最新的HTTP/1.1通訊協定
2、擁有簡單且強而有力的基於檔案的設定流程
3.支援通用網關介面
4、支援基於IP和基於網域名稱的虛擬主機
#5、支援多種方式的HTTP認證
6、整合Perl處理模組
7、整合代理伺服器模組
8、支援即時監視伺服器狀態和自訂伺服器日誌
9、支援伺服器端包含指令(SSI)
#10、支援安全性Socket層(SSL)
11、提供使用者會話過程的追蹤
12、支援FastCGI
13、透過第三方模組可以支援JavaServlets
3、安裝:www.apache.org --apache 官網
# yum install httpd* --安裝httpd服務
# httpd -t --檢查設定檔正確性
# rm -rf /etc/httpd/conf.d/welcome.conf --刪除歡迎介面;因為安裝了httpd-manual ,故可以訪問/ServerIp/manual
4、運行於兩種模式:prefork,worker
#prefork模式:
#
prefork是Unix平台上的預設(預設)MPM,使用多個子進程,每個子進程只有一個執行緒。每個行程在某個確定的時間只能維持一個連接,效率高,但記憶體佔用量比較大。
這個多路處理模組(MPM)實作了一個非執行緒型的、預先衍生的web伺服器,它的運作方式類似Apache 1.3。它適合沒有線程安全庫,需要避免線程相容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。
worker模式:
worker使用多個子程序,每個子程序有多個執行緒,每個執行緒在某個確定的時間只能維持一個連接,記憶體佔用量比較小,適合高流量的http伺服器。缺點是假如一個線程崩潰,整個進程就會連同其任何線程一起”死掉”,所以要保證一個程序在運行時必須被系統識別為”每個線程都是安全的”。
此多路處理模組(MPM)使網路伺服器支援混合的多執行緒多進程。由於使用執行緒來處理請求,所以可以處理海量請求,而係統資源的開銷小於基於進程的MPM。但它也使用了多進程,每個進程又有多個線程,以獲得基於進程的MPM的穩定性。
# httpd -l --查看運行模式,預設為prefork.c
# mv -v /usr/sbin/httpd{,.prefork} --備份prefork模式
# mv -v /usr/sbin/httpd{.worker,} --使用worker模式
#
二、設定檔詳解
#1、全域環境參數
ServerTokens OS --當伺服器回應主機頭(header)資訊時顯示Apache的版本和作業系統名稱
ServerRoot "/etc/httpd" --伺服器的基礎目錄,一般來說它將包含conf/和logs/子目錄,其它設定檔的相對路徑即基於此目錄。
PidFile run/httpd.pid --第一個httpd行程(所有其他行程的父行程)的行程編號檔案位置。
Timeout 60 --若60秒後沒有收到或送出任何資料就切斷該連線
KeepAlive Off --預設不使用保持連線的功能,即客戶一次請求連線只能回應一個檔案,建議允許
#MaxKeepAliveRequests 100 --在保持連線功能時,設定客戶一次要求連接能回應檔案的最大上限,超過就斷開
KeepAliveTimeout 15 --在使用保持連接功能時,兩個相鄰的連接的時間間隔超過15秒,就切斷連接
.................
#
Listen 80 --伺服器監聽的連接埠號碼;監聽連接埠可以多開
Include conf.d/*.conf --將/etc/httpd/conf.d目錄下所有以conf結尾的設定檔包含進來
User apache --提供服務的子程序的使用者
Group apache --提供服務的子程序的使用者群組
ServerAdmin root@george.com --管理員的郵件地址
ServerName mail.george.com:80 --主網站名稱(網站的主機名稱)
UseCanonicalName Off
DocumentRoot "/var/www/html" --設定Web文件根目錄;但是可以使用符號連結和別名來指向到其他的位置;如不是絕對路徑,則被假定為是相對於ServerRoot的路徑
2.路徑控制參數
DirectoryIndex index.html index.html.var --網站預設網頁檔名,左邊優先
AccessFileName .htaccess --指定保護目錄設定檔的名稱
------------------------------- -------------------------------------------------- ------------------------
--用於封裝一組指令,使之僅對某個目錄及其子目錄生效。 針對檔案系統上的一個目錄
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
#Allow from all
Deny from 192.168.133.22
##Directory-path --可以是一個目錄的完整路徑,或是包含了Unix shell匹配語法的通配符字串。在通配符字串中,"?"匹配任何單一的字符,"*"匹配任何字符序列。也可以使用"[]"來確定字元範圍。在"~" 字元之後也可以使用正規表示式
Options --
這個指令的值可以是“None”,“All”,或下列選項的任意組合:Indexes(前面有'-',則關閉網站列目錄的功能,無則反之);Includes;FollowSymLinks;SymLinksifOwnerMatch;ExecCGI;MultiViewsAllowOverride --控制那些被放置在.htaccess檔案中的指令。它可以是All,None(看不到任何.htaccess裡的任何配置),或下列指令的組合:Options;FileInfo;AuthConfig;Limit
Order,Allow ,Deny --控制誰可以獲得服務。 oreder的參數最終以右邊的為準,順序可以逆轉
------------------------- -------------------------------------------------- ------------------------------
--針對指定的檔案,可以是在某個Directory下,也可以全域的
Order deny,allow
Allow from all
#
-------------------------------------------------- -------------------------------------------------- -----
-- 允許使用URL"http://servername/server-status"的形式查看伺服器狀態(或是資訊);Location主要是控制URL
SetHandler server-status(server-info)
##Order deny,allow
Allow from all
#########------------------ -------------------------------------------------- -------------------------------------#########Alias ### /url-path /filesystem-path ###--把URL對應到檔案系統路徑;(也可以自己在系統上使用ln -s 軟連結實作哦)############ ##
###############3、目錄存取進行使用者密碼控制(非系統使用者)#### #####
--###理論也可以在Location,file#########Options Indexes FollowSymLinks#######AllowOverride None ###Order allow,deny
Allow from all
authname "Authenticate yourself" --瀏覽器開啟該url的提示語
##authtype basic
authuserfile /etc/httpd/userpasswd --使用者&密碼檔案位置
require valid-user
# htpasswd -c /etc/httpd/userpasswd frank --建立一個允許存取使用者
htpasswd /etc/httpd/userpasswd george - -再創建一個,記得'-c' 參數,是為了創建該密碼文件,只能創建第一個用戶時使用。
注意:如果一個目錄使用密碼控制訪問,那麼在透過網頁瀏覽器列出該目錄的父目錄時,看不到該目錄,也就是說,該目錄被隱藏了。但是可以透過直接輸入url來存取(即使你有帳戶和密碼也一樣)。
4、基於網域的虛擬主機
NameVirtualHost *:80 --新增此配置,將80埠設定為虛擬主機端口
--第一個虛擬主機
ServerName www.george.com
DocumentRoot /var/www/html/
..................
< /Directory>
--第二個虛擬主機
#ServerName mail.george .com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
#< ;Location />
......................
### #### 實驗的SeverName 參數接IP位址的話,我們也可以做基於IP的虛擬主機
5、日誌參數
# ErrorLog logs/error_log --錯誤日誌的存方位置
LogLevel warn --定義錯誤日誌等級,include: debug, info, notice, warn, error, crit, alert, emerg.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User- Agent}i\"" combined
..............
LogFormat "%{User-agent}i" agent --該四條是存取日誌的預設格式
CustomLog logs/access_log combined --使用combined 存取日誌格式
%h –客戶端的ip位址或主機名稱
%l –The 這是由客戶端identd 判斷的RFC 1413身份,輸出中的符號"-" 表示此處資訊無效。
%u –由HTTP認證系統所得到的造訪該網頁的客戶名稱。有認證時才有效,輸出中的符號 "-" 表示此處資訊無效。
%t –伺服器完成對請求的處理時的時間。
"%r" –引號中是客戶發出的包含了許多有用資訊的請求內容。
%>s –這個是伺服器回傳給客戶端的狀態碼。
%b –最後這項是傳回給客戶端的不包含回應頭的位元組數。
"%{Referer}i" –此項指明了該請求是從被哪個網頁提交過來的。
"%{User-Agent}i" –此項是客戶瀏覽器提供的瀏覽器識別資訊。
6、SSL加密設定
# yum install -y mod_ssl --安裝加密模組
# vim /etc/httpd/conf.d /ssl。 #SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/pki/tls/certs/localhost.crt --設定公鑰檔案
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key --配置秘鑰檔案
##SSLOptions +StdEnvVars #< /Files>伺服器名稱www.george.comDocumentRoot /var/www/cgi-bin/openwebmail/ScriptAlias /mail /var/www/ cgi- bin/openwebmail/openwebmail.pl
SSLOptions +StdEnvVars選項索引訂單拒絕,允許允許所有位置>SetEnvIf User-Agent ".*MSIE.*" \nokeepalive ssl-unclean-shutdown \downgrade -1.0 force-response-1.0CustomLog 日誌/ssl_request_log \"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\ " %b"
6.1、自行設定憑證
# mkdir /etc/pki/test/
# cd /etc /pki/test## openssl genrsa -out /etc/pki/test/test.key 1024 --秘鑰## openssl req -new -key test.key -out test.csr國家名稱(2個字母代碼)[XX]:cn
##州或省名稱(全名)[]:廣東##地區名稱(如城市)[預設城市]:
深圳
#組織名稱(如公司)[預設有限公司]: ###它# #####
Organizational Unit Name (eg, section) []:maintenance
Common Name (eg, your name or your server's hostname) []:#www.george.com
Email Address []:root@mail.george.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:Azt
## openssl req -x509 -days 365 -key test.key -in test.csr -out test.crt --公鑰
# ls --然後將下列test.crt && test.key 設定到/etc /httpd/conf.d/ssl.conf 即可
test.crt test.csr test.key
6.2、測試自己設定的憑證
#但是我們自己建立的憑證在瀏覽器中識別是不受信任的;憑證狀態也是「由於CA 根憑證不在「受信任的根憑證授權單位」儲存區中,所以它不受信任。 ”
# 需要我們自己在瀏覽器中手動將我們自己創建的證書(test.crt)導入到“受信任的根證書頒發機構”&&“受信任的發布者」。以Google瀏覽器為列,步驟如下:
接著,會再彈出幾個對話框,我們點選「下一步」-「完成」-「是」。就 OK了。
此時在使用瀏覽器開啟我們的網站,查看憑證的狀態「該憑證沒有問題」。
#
以上是HTTP服務建構實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!