繼上一篇寫了LAMP的編譯安裝之后沒有介紹如何配置使用,接下來的幾篇會依次介紹,編譯安裝的過程為http://www.www58058.com/64006
一.httpd介紹
1.httpd是http協議的一個經典實現,也是apache組織中的一個頂級項目,其官方站點為httpd.apache.org。
2.httpd的運行機制
高度模塊化(Core+Modules):采用核心模塊+擴展模塊的機制 |
DSO(Dynamic Shared Object)機制:可以按需動態的裝載模塊來實現相應的功能 |
采用MPM(Multipath Processing Moules):使用多路處理模塊,有三種工作模型 (1)prefork模型:多進程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,并將請求分發給子進程,由子進程具體負責處理用戶請求,工作方式為,事先生成幾個空閑的進程,隨時等待著處理用戶請求。 (2)worker模型:多進程,多線程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,并將用戶請求分發給每個子進程,而每個子進程又生成多個線程,每個線程負責具體的處理用戶請求。 (3)event:事件驅動,多進程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,并將用戶請求交給子進程,每個子進程基于事件驅動處理多個請求,并將結果返回給客戶端。 |
3.httpd有豐富的功能特性,常用的有:
支持CGI(Common Gataway Interface)協議 |
支持虛擬主機:可以基于ip,port,FQDN實現虛擬主機 |
支持反向代理機制 |
支持負載均衡功能 |
具有豐富的認證機制 |
支持第三方模塊 |
支持路徑別名 |
二.關于httpd的配置文件
-
httpd的主配置文件分為三部分,分別是:
Global Environment:全局配置段,主要定義與httpd工作特性相關的配置 |
Main Server Configuration:中心主機配置段,主要用于定義中心主機的配置,httpd默認開啟中心主機 |
Virtual Host:虛擬主機配置段,分別定義不同的虛擬主機相關的配置 |
同時,在httpd配置文件的conf.d目錄下所有以.conf結尾的文件也是其配置文件,要實現不同功能,可以在不同位置的配置文件中進行定義。
三.httpd常用的配置
1.在httpd中實現虛擬主機
所謂的虛擬主機是指在通過在配置文件中提供不同的配置,從而可以實現在同一臺物理服務器上提供多個站點的訪問路徑,實現方式有三種,分別是:
IP地址相同,監聽的端口不同,通過不同的端口號來訪問 |
IP地址不同,端口可以相同,通過不同的IP來訪問 |
主機名不同,端口號和IP地址可以相同,通過不同的主機名稱來訪問。 |
使用虛擬主機的前提是關閉中心主機功能,即將主配置文件中的DocumentRoot這一指令注釋。
(1)基于不同端口號來實現的虛擬主機:
a.配置虛擬主機的名稱和和根文檔目錄,但不常用,因為客戶端來訪問時候不知道服務器端監聽的端口號
b.打開監聽的端口號
c.測試結果
(2)基于不同的IP地址來訪問,可以通過在物理服務器上安裝多塊網卡來實現
(3)基于不同的主機名稱來實現虛擬主機
a.修改主配置文件
b.修改/etc/hosts文件,在其中加入主機名與IP地址的對應關系
c.測試結果
2.持久和非持久連接
當客戶端與服務器端進行長時間的通信時,客戶端會發出一系列的請求,服務器端要這些請求一一進行響應,而http協議基于tcp協議建立連接,于是對這一系列的請求和響應可以每次經過一個單獨的tcp連接發送,也可以都經過同一個tcp連接進行發送;每次(每個資源的傳輸)都使用不同的tcp進行發送的方式就叫做非持久連接,每次都經過同一個tcp連接發送的方式叫做持久連接。在httpd中實現持久功能:
KeepAlive {on|off}:開啟或關閉持久連接功能 MaxKeepAliveRequests 100 :允許建立持久連接的最大客戶端請求數量 KeepAliveTimeout 15 :每個連接的最大持久連接時長 |
3.監聽的端口號
Listen 80 |
4.加載模塊:
LoadModule Module_name |
5.中心主機的根文檔,而httpd默認就是運行于中心主機
DocumentRoot "/web/app/host1" |
6.定義默認的主頁
DirectoryIndex index.html index.html.var |
7.定義錯誤日志的存放位置
ErrorLog logs/error_log |
8.定義錯誤日志的等級
LogLevel {debug|info|notice|warn|error|crit|alert|emerg} |
9.定義日志的格式,可以根據需要自行定義,需要了解每個宏的意思,當使用ELK做日志分析時能便于定義輸出格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
有很多宏定義,可以參考官方文檔。
10.基于路徑做訪問控制
(1)基于物理服務器的文件系統做訪問路徑做控制
<Directory "/var/www/html"> Options {Indexes FollowSymLinks} AllowOverride None Order allow,deny Allow from all </Directory> |
其中:
Options Indexes :如果訪問路徑中不存在資源時,將所有的資源列出來 Options FollowSymLinks:當站點上的資源是符號連接文件時,客戶端是否能訪問到其所鏈接指向的文件 |
AllowOverride None:是否允許在每個頁面下建立.htaccess的文件來做訪問 |
Order allow,deny:定義訪問控制的機制,若先allow,后deny的話即為黑名單機制,反之則為白名單機制 Allow from all :定義允許訪問的客戶端 |
配置示例:基于白名單機制,拒絕192.168.88網絡的主機,只允許192.168.88.132訪問。
測試結果:使用192.168.88.150訪問
使用192.168.88.132訪問
(2)基于URL做訪問控制
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com </Location> |
11.設定默認字符集
AddDefaultCharset UTF-8 |
12.基于用戶做頁面訪問控制
基于用戶對指定頁面做訪問控制的方式有兩種:基本認證和摘要認證
基本認證是:服務器端生成一個存有虛擬用戶名和密碼的文件,當用戶訪問時頁面時,就會彈出對話框要求輸入用戶名和密碼,此頁面的狀態碼為401,只有當用戶認證通過以后,才能訪問該頁面;而摘要認證則是服務器為每一連接生成一個唯一的隨機數, 客戶端對用這個隨機數做密碼進行MD5加密. 然后發送到服務器. 服務器端也用此隨機數對密碼加密, 然后和客戶端傳送過來的加密數據進行比較,結果相同則認證通過。
(1)例如對根路徑配下的auth頁面做認證basic認證,配置方式為:
a.在對應的頁面下創建認證文件,為了安全可以創建隱藏文件,也可以創建非隱藏文件
b.編輯httpd.conf配置文件
c.測試結果
13.開啟httpd的信息頁面,默認是不打開的,如果要打開,最好最做白名單的訪問控制
<Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from 192.168.88.1/24 Allow from .example.com </Location> |
14.開啟服務器的狀態頁面
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com Allow from 192.168.88.1/24 </Location> |
14.配置httpdMPM的工作特性
<IfModule prefork.c> StartServers 8 #啟動服務時啟動的進程數 MinSpareServers 5 #最少空閑的進程數 MaxSpareServers 20 #最大空閑的進程數 ServerLimit 256 #服務器允許打開的最大進程數 MaxClients 256 #允許的最大用戶連接數 MaxRequestsPerChild 4000 #每個子進程所能處理的最大用戶請求數量 </IfModule> |
15.httpd實現https功能
ssl是web服務之間進行信息安全傳輸的協議,其通過建立ssl會話來實現信息的安全傳送,基于客戶端的ip地址建立會話,因此,每個客戶端IP只建立一個ssl會話,每個會話的建立要基于ssl握手來實現,類似于tcp的三次握手,ssl握手要完成交換協議版本號,協商雙方都支持的加密算法,以及實現身份認證等。而此時客戶端也要對服務器端的證書做檢驗,檢測證書的有效期,CA的可信度等,等雙方握手完成以后,才能基于加密的方式進行信息的交換。而實現的ssl協議的http協議就被稱為https,監聽于tcp的443端口。
實現https的步驟為:
(1)https的實現依賴于mod_ssl模塊
(2).創建CA服務器,CA服務器為192.168.88.1
a.生成CA服務器端私鑰文件
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem) |
b.創建自簽證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem |
c.為CA提供必要的輔助文件
mkdir -pv /etc/pki/CA/{certs,crl,newcerts} touch /etc/pki/CA/{serial,index.txt} echo 01 > serial |
(3)在客戶端創建私鑰文件以及生成簽署請求
a.生成私鑰文件
(umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key) |
b.生成簽署請求
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr |
(4)簽署
a.將簽署請求發送到CA服務器上
scp /etc/httpd/ssl/httpd.crt root@192.168.88.134:/tmp |
b.CA簽署請求
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/cert/httpd.crt |
(5)編輯ssl.conf配置文件
至此,對httpd已經能基本使用了。
原創文章,作者:zhangbao,如若轉載,請注明出處:http://www.www58058.com/64272
理論和操作相結合且脈絡清晰,是一篇可以拿的出手的好文章。