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 ,故可以訪問 http://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 --指定保護目錄配置文件的名稱
---------------------------------------------------------------------------------------------------------
<Directory Directory-path> --用於封裝一組指令,使之僅對某個目錄及其子目錄生效。針對文件系統上的一個目錄
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from 192.168.133.22
</Directory>
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 "/www/images">
<Files ~ "\.jpg$"> --針對指定的文件可以是是在某個Directory下,也可以全局的
Order deny,allow
Allow from all
</Files>
</Directory>
---------------------------------------------------------------------------------------------------------
<Location /server-status> -- 允許使用URL"http://servername/server-status"的形式查看服務器狀態(或是信息);Location主要是控制URL
SetHandler server-status(server-info)
Order deny,allow
Allow from all
</Location>
---------------------------------------------------------------------------------------------------------
Alias /url-path /filesystem-path --把URL映射到文件系統路徑;(也可以自己在系統上使用 ln -s 軟鏈接實現哦)
<Directory "/filesystem-path">
</Directory>
3、目錄訪問進行用戶密碼控制(非系統用戶)
<Directory "/var/www/html"> -- 理論也可以在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
</Directory>
# htpasswd -c /etc/httpd/userpasswd frank --創建一個允許訪問用戶
# htpasswd /etc/httpd/userpasswd george --再創建一個,記得 '-c' 參數,是為了創建該密碼文件,只能創建第一個用戶時使用。
注意:如果一個目錄使用密碼控制訪問,那么在通過網頁瀏覽器列出該目錄的父目錄時,看不到該目錄,也就是說,該目錄被隱藏了。但是可以通過直接輸入url來訪問(即使你有賬戶和密碼也一樣)。
4、基於域名的虛擬主機
NameVirtualHost *:80 --添加這條配置,將80端口設置為虛擬主機端口
<VirtualHost *:80> --第一個虛擬主機
ServerName www.george.com
DocumentRoot /var/www/html/
<Directory "/var/www/html">
..................
</Directory>
</VirtualHost>
 
<VirtualHost *:80> --第二個虛擬主機
ServerName mail.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
<Location />
......................
</Location>
</VirtualHost>
   該實驗的 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
<VirtualHost *:443>
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 --配置秘鑰文件
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
ServerName www.george.com
DocumentRoot /var/www/cgi-bin/openwebmail/
ScriptAlias /mail /var/www/cgi-bin/openwebmail/openwebmail.pl
<Location />
SSLOptions +StdEnvVars
Options Indexes
order deny,allow
Allow from all
</Location>
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"
</VirtualHost>
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、測試自己配置的證書
https://www.george.com/mail 但是我們自己創建的證書在瀏覽器中識別是不受信任的; 證書狀態也是“由於CA 根證書不在“受信任的根證書頒發機構”存儲區中,所以它不受信任。”
      

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

      

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

  
此時在使用瀏覽器打開我們的網站,查看證書的狀態“該證書沒有問題”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM