HTTP服務搭建實例詳解

一、簡介
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;MultiViews
AllowOverride –控制那些被放置在.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/
………………
?
–第二個虛擬主機
ServerName mail.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
………………….
   該實驗的 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.conf
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
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
ServerName www.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
SSLOptions +StdEnvVars
Options Indexes
order deny,allow
Allow from all
SetEnvIf User-Agent “.*MSIE.*”
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
CustomLog logs/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
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:guangDong
Locality Name (eg, city) [Default City]:Shenzhen
Organization Name (eg, company) [Default Company Ltd]:IT
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 根證書不在“受信任的根證書頒發機構”存儲區中,所以它不受信任。”

      HTTP服務搭建實例詳解

    需要我們自己在瀏覽器中手動將我們自己創建的證書(test.crt)導入到“受信任的根證書頒發機構”&&“受信任的發布者”。以谷歌瀏覽器為列,步驟如下:

      HTTP服務搭建實例詳解

    接著,會再彈出幾個對話框,我們點擊“下一步”——“完成”——“是”。就 OK了。

  HTTP服務搭建實例詳解
此時在使用瀏覽器打開我們的網站,查看證書的狀態“該證書沒有問題”。

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享