本文主要是以 CentOS 6系列為作業系統,來安裝配置web服務,并實作虛拟使用者,https,和基本的使用者認證等相關内容。
寫在前面:
作業系統: CentOS 6.5
伺服器的IP: 172.16.10.9
httpd的版本:httpd-2.2.15 系列
SElINUX狀态:disabled
下面開始安裝配置旅程:
一、web的安裝配置
1、安裝:yum install httpd mod_ssl -y
mod_ssl 是實作 https 協定時所依賴的包
2、配置檔案的相關說明:
配置檔案:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服務腳本:
/etc/rc.d/init.d/httpd
腳本配置檔案:/etc/sysconfig/httpd,這裡可以定義MPM的類型
子產品目錄:
/usr/lib64/httpd/modules
/etc/httpd/modules
/etc/httpd/modules是/usr/lib64/httpd/modules的連結檔案
主程式:
/usr/sbin/httpd: prefork 模式
/usr/sbin/httpd.event: event模式
/usr/sbin/httpd.worker: worker模式
日志檔案:
/var/log/httpd/access_log: 通路日志
/var/log/httpd/error_log: 錯誤日志
站點文檔的根目錄:
/var/www/html
二、httpd的配置檔案說明
# grep "Section" httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
主要分為三部分:全局配置,主伺服器配置,虛拟主機的配置。主伺服器和虛拟主機一般不同時使用;預設僅啟用了主伺服器。在每個部分中有許多指令參數,這些指令參數不區分字元大小寫,但其值有可能會區分大小寫。
三、配置檔案選項詳細說明
1、持久連接配接
通常的參數有:
KeepAlive {On|Off} 是否開啟持久連接配接功能。預設是 Off。
以下這2個指令參數隻有在KeepAlive On 時才有效
KeepAliveRequests 100 允許的一次持久連接配接的最大請求數。
KeepAliveTimeout 2次持久連接配接時間的間隔
<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKioL1PnPX-DaGHsAAHnTVLxT5M700.jpg" target="_blank"></a>
驗證效果:
<a href="http://s3.51cto.com/wyfs02/M01/45/52/wKiom1PnPGfBAKFyAAFxXOQfpXo481.jpg" target="_blank"></a>
2、MPM 參數
ServerStart 參數的驗證,共有9個相關的程序,其中一個是其他 8 個的父程序:
<a href="http://s3.51cto.com/wyfs02/M02/45/52/wKiom1PnPk-T7XyQAAIbD8V1_wk087.jpg" target="_blank"></a>
3、監聽的端口
指定格式:Listen [IP:]port 預設的端口号是80
這個端口可以自己指定,一般使用大家熟知的端口,常用的有 80 和 8080。
4、DSO 動态共享對象
在這裡可以實作動态庫的裝載,可以使用 httpd -D MODULES 或者 httpd -M 來檢視已加載的子產品名。
<a href="http://s3.51cto.com/wyfs02/M02/45/52/wKiom1PnP8mxIIibAAN4q9p9Tvw264.jpg" target="_blank"></a>
示例:
使用 mod_deflate 子產品壓縮頁面來優化傳輸速度。
未使用 mod_deflate 子產品,通路 http;//192.168.1.66/messages 檔案時相應的位元組數大小是:316080 位元組。
加載 mod_deflate 子產品,并進行配置 vim /etc/httpd/conf/httpd.conf。
加載後的驗證,加載 mod_deflate 子產品後的大小是 41902 位元組,壓縮比還是相當可觀的。
<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKioL1PnQjrwdKg3AAORt6-PSrY446.jpg" target="_blank"></a>
5、指定站點的根目錄
DocumentRoot “/var/www/html” 這是 rpm 安裝方式的預設的根站點目錄。當然這個可以根據自己的需求來設定。
6、基于目錄和檔案的通路控制
<a href="http://s3.51cto.com/wyfs02/M01/45/53/wKioL1PnQweCLqjJAAKkmWLjhBI987.jpg" target="_blank"></a>
使用 directory 指令基于本地檔案系統來實作對目錄的通路控制。
常見的控制指令有:
Options:
Indexes:Indexes: 當通路的路徑下無預設的首頁面,将所有資源以清單形式呈現給使用者。
FollowSymlinks: 跳躍符号連結
AloowOverride: 支援在每個頁面目錄下建立.htaccess用于實作對此目錄中資源通路時的通路控制功能。
AuthCofig:用于實作使用者認證的目的。
Order結合deny from、allow from 一起使用,來基于 IP 位址設定通路控制
例如:
這是設定通路白名單的設定,隻允許 172.16 網段的用戶端來通路對應的目錄。當然 from 後面的位址是比較靈活的,像:172.16,172.16.0.0,172.16.0.0/16,172.16.0.0/255.255.0.0這種形式的都是允許的。
Order allow,deny
Allow from 172.16.0.0/16
當然,上面對目錄的控制,也可以使用 Locaton 指令基于URL來實作。
DocumentRoot “/var/www/html”
<Directory "/var/www/html/admin">
通路控制參數
</Directory>
等價于:
<Location "/admin">
通路控制參數
</Location>
對于 Option Indexex參數示例,一般此選項作為檔案伺服器,提供下載下傳使用時使用到此選項,其他情況應慎重使用。
7、指定預設通路的首頁面
預設的使用格式如下:這裡也可以自己定義首頁面
DirectoryIndex index.html index.html.var
8、配置日志功能
<a href="http://s3.51cto.com/wyfs02/M02/45/53/wKiom1PnQy_B8RZGAAEecxsvyCE688.jpg" target="_blank"></a>
ErrorLog "/path/to/error_log" 指明錯誤日志的路徑,可以适應相對位址。相對于 ServerRoot 指令所定義的目錄
LogLevel {debug|info|notice|warn|error|crit|alert|emerg} 指定日志的級别
LogFormat 指定日志檔案的格式
CustomLog "/path/to/access_log" LogFormat_Name 指定 access_log 的路徑個和使用的格式
%h: 用戶端位址
%l: 遠端登入名,通常為-
%u: 認證時輸入使用者名,沒有認證時為-
%t: 伺服器收到 使用者請求時的時間
%>s: 響應狀态碼
%b: 響應封包的長度,機關是位元組
%{HEADER_NAME}i: 記錄指定首部對應的值
9、路徑别名
使用指令參數:Alias 實作URL 路徑映射時,通路的路徑不在依賴于站點的根目錄。
<a href="http://s3.51cto.com/wyfs02/M00/45/53/wKioL1PnRJzg_r8bAAC8fDaKLnA531.jpg" target="_blank"></a>
10、基于使用者通路控制
基于使用者的認證的方式有基本認證(Basic)和摘要認證(digest)。這裡是基于虛拟使用者來實作的。實作的方式有:文本檔案、資料庫、ldap、資料庫引擎來提供API接口。
以基于檔案的形式實作使用者通路的控制來示例:
1、vim /etc/httpd/conf/httpd.conf
Options none# optons 選項控制
AllowOverride AuthConfig # 實作使用者認證
AuthType Basic # 認證方式是 Basic
AuthName "Admin Area." # 提示資訊
#AuthBasicProvider file # 認證方式的提供者
AuthUserFile /etc/httpd/conf/.htpasswd # 認證檔案的路徑
Require valid-user # 登陸使用者控制 require user USER_NAME
</Directory>
2、提供認證檔案
由 htpasswd 指令得到。常用選項:
-c: 如果此檔案事先不存在,則建立;注意,隻能在建立第一個使用者時使用
-m: 以md5的格式編碼存儲使用者的密碼資訊
-D: 删除指定使用者
htpasswd -c -m /etc/hhtpd/.htpasswd tom
3、組認證
Options none
AllowOverride AuthConfig
AuthType Basic
AuthName "Admin Area."
#AuthBasicProvider file
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /etc/httpd/conf/.htgroup # 組檔案的路徑,自己手動建立
Require group GROUP_NAME
組檔案格式:
組名:user1 user2 user3
11、虛拟主機
虛拟主機:使用不同通路路徑
基于端口:通過不同的端口來提供不同的通路站點
基于IP:基于不同的 ip 位址來通路不同的站點
基于主機名:相同的 IP 位址通過不同的主機名來實作通路不同的站點
(1) 使用虛拟的前提:取消主伺服器
注釋主伺服器的站點根路徑指定:DocumentRoot
(2) 定義虛拟主機
NameVirtualHost IP:PORT # 指定監聽的位址和端口
<VirtualHost IP:PORT>
ServerName # 主機名
ServerAlias # 定義多個主機名,此時 ServerName 的名稱應該是 UR
DocumentRoot # 根站定目錄
ServerAlias # 主機名稱
ErrorLog # 錯誤日志的定義
CustomLog # 通路日志的定義
</VirtualHost>
配置檔案文法檢查:
httpd -t
service httpd configtest
配置完成虛拟主機後,可使用 httpd -S 顯示配置的虛拟主機
測試:crul URL
12、https協定
由于http 協定在傳輸過程中使用的是明文傳輸。是以就出現了 https 協定來實作加密的 https 協定。ssl會話基于IP位址建立,是以,每一個IP僅建立一個SSL會話。https協定:是基于SSL二進制編碼, 監聽于443/tcp。
ssl握手要完成的工作:
交換協定版本号
選擇雙方都支援的加密方式
用戶端對伺服器端實作身份驗正
密鑰交換
用戶端驗正伺服器端證書:
有效性檢測:證書是否仍然在有效期内
CA的可信度檢測
證書的完整性檢測
持有者的身份檢測
配置httpd工作于https:
(1) 安裝mod_ssl子產品
# yum install mod_ssl
(2) 為服務端生成私鑰,并為其提供證書;
在服務端(172.16.10.9):
# (umask 077;openssl genrsa -out /etc/pki/CA/private/cacert.key 2048)
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 1000
# touch index.txt
# echo "01" > serial
在用戶端:
#(umask 077;openssl genrsa -out /etc/httpd/httpd.key 2048)
#openssl req -new -key /etc/httpd/httpd.key -out /etc/httpd/httpd.csr
将 httpd.csr 傳到服務端簽名:
在服務端:
# openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 1000
将簽好的證書,httpd.crt 傳回到用戶端,放到 /etc/httpd/ 目錄下
(3) 配置使用https的虛拟主機
<VirtualHost IP:443>
SSLCertificateFile # 證書路徑
SSLCertificateKeyFile # 證書私鑰檔案
DocumentRoot # 虛拟主機的根站點
ServerName # 虛拟主機的主機名
</VirtualHost>
(4) 重新裝載配置
httpd reload
(5) 測試
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate
13、status頁面
httpd内嵌有handler,其中有一個handler用于輸出目前httpd服務相關狀态資訊handler: server-status
啟用handler要使用SetHandler指令
handler: 當檔案被調用時,apache内部表示形式;一般每種檔案類型都有其隐式處理器
示例:基于 10、11、12、13
1
2
3
4
5
6
<code>建立httpd伺服器(基于編譯的方式進行),要求:</code>
<code>提供兩個基于名稱的虛拟主機:</code>
<code>a www1.stu10.com,頁面檔案目錄為</code><code>/web/vhosts/www1</code><code>;錯誤日志為</code><code>/var/log/httpd/www1</code><code>.err,通路日志為</code><code>/var/log/httpd/www1</code><code>.access;</code>
<code>(b)www2.stu10.com,頁面檔案目錄為</code><code>/web/vhosts/www2</code><code>;錯誤日志為</code><code>/var/log/httpd/www2</code><code>.err,通路日志為</code><code>/var/log/httpd/www2</code><code>.access;</code>
<code>(c)為兩個虛拟主機建立各自的首頁檔案index.html,内容分别為其對應的主機名;</code>
<code>(d)通過www1.stu10.com</code><code>/server-status</code><code>輸出httpd工作狀态相關資訊,且隻允許提供帳号密碼才能通路(status:status);</code>
1、配置檔案的的編輯,vim /etc/httpd/httd.conf
還的注釋主配置下的 DocumentRoot "/var/www/html"
2、 建立對應的站點和提供密碼檔案
7
8
9
10
<code># 建立對應的站點目錄并提供預設的頁面</code>
<code>mkdir</code> <code>/web/vhosts/www1/</code> <code>-p</code>
<code>mkdir</code> <code>/web/vhosts/www2/</code> <code>-p</code>
<code>echo</code> <code>"<h1>welcom www1.guotig.com<h1>"</code> <code>> </code><code>/web/vhosts/www1/index</code><code>.html</code>
<code>echo</code> <code>"<h1>welcom www2.guotig.com<h1>"</code> <code>> </code><code>/web/vhosts/www2/index</code><code>.html</code>
<code># 提供使用者認證檔案</code>
<code>htpasswd -cm </code><code>/etc/httpd/conf/</code><code>.htpasswd status</code>
<code>mkdir</code> <code>/web/hosts/www1/server-status</code>
<code>chowm apache.apache </code><code>/web/hosts/www1/server-status</code>
3、提供主機名解析檔案 在/etc/hosts中添加:(在測試用戶端)
<code>172.16.10.9 www1.stu10.com www2.stu10.com</code>
4、測試結果如下:
<a href="http://s3.51cto.com/wyfs02/M00/45/53/wKiom1PnWKjjGSQ4AAFLNmBiKeY406.jpg" target="_blank"></a>
使用者認證測試:
<a href="http://s3.51cto.com/wyfs02/M01/45/54/wKiom1PnZhLT4cUYAAErbkbtwAY511.jpg" target="_blank"></a>
<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKioL1PnZyyj7h37AAHfMR68ANE524.jpg" target="_blank"></a>
<code>為上面的第2個虛拟主機提供https服務,使得使用者可以通過https安全的通路此web站點;</code>
<code>(1)要求使用證書認證,證書中要求使用的國家(CN)、州(Henan)、城市(Zhengzhou)群組織(MageEdu)</code>
<code>(2)設定部門為Ops,主機名為web.magedu.com,郵件為[email protected]</code>
1、編輯 vim /etc/httpd/conf.d/ssl.conf 添加以下内容
當然在 /etc/httpd/conf/httpd.conf,要加載 mod_ssl 子產品
<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKiom1PnZr2TbFUGAAKvSJ-TWvA944.jpg" target="_blank"></a>
使用 httpd -S 來檢視已經配置好的虛拟機
2、提供證書
<code>mkdir</code> <code>/etc/httpd/ssl</code> <code>&& </code><code>cd</code> <code>/etc/httpd/ssl</code>
<code>(</code><code>umask</code> <code>077; openssl genrsa -out httpd.key 1024)</code>
<code>openssl req -new -key httpd.key -out httpd.csr</code>
<code>去服務端簽署證書:</code>
<code>openssl ca -</code><code>in</code> <code>httpd.csr -out </code><code>/httpd</code><code>.crt -days 300</code>
<code>簽署後的證書存放到:</code><code>/etc/httpd/ssl/httpd</code><code>.crt</code>
3、驗證結果
首次通路時會出現導入證書的問題,導入證書就可通路。
<a href="http://s3.51cto.com/wyfs02/M00/45/54/wKiom1Pnas6C2q3iAAKYgoKWekI339.jpg" target="_blank"></a>
導入證書就可以通路了。
<a href="http://s3.51cto.com/wyfs02/M01/45/55/wKioL1Pna-ezxd5sAAB6dJW9hT8750.jpg" target="_blank"></a>
14、httpd程式包自帶的工具介紹
httpd: apache伺服器程式
-t: 測試配置檔案
-l: 清單靜态子產品
-D DUMP_MODULES:列出DSO子產品
-M:等價于 -t -D DUMP_MODULES
-D DUMP_VHOSTS: 列出所有虛拟主機
htpasswd: 為基于檔案的basic認證建立和更新使用者認證檔案
apachectl: 腳本,httpd服務控制工具,可啟動,關閉,重新加載配置檔案。
ab: (apache benchmark)httpd的基準性能測試工具;
apxs: httpd得以擴充使用第三方子產品的工具;
htcacheclean: 磁盤緩存清理工具;
htdigest: 為digest認證建立和更新使用者認證檔案
httxt2dbm: 為rewrite map建立dbm格式的檔案
rotatelogs: 日志滾動,不關閉httpd而切換其使用日志檔案的工具
suexec: 當httpd程序需要以另外的使用者的身份去通路某些資源時,可以以suexec作臨時切換;
15、ab工具的初步使用
同類工具:http_load, webbench, seige
Usage: ab [options] [http[s]://]hostname[:port]/path
常用的參數:
-c #: 模拟的并發數;
-n #: 總的請求數,-n的值一定要大于等于-c的值;
<a href="http://s3.51cto.com/wyfs02/M02/45/55/wKiom1Pnb9uioFzLAAIqD9N-XMc871.jpg" target="_blank"></a>
但是當我們把并發量提高到2000的時候,就會出現以下的錯誤。
<a href="http://s3.51cto.com/wyfs02/M01/45/55/wKioL1PndMPCZ9vGAAEXN38X8OM248.jpg" target="_blank"></a>
這是由于資源限定的問題,一般情況下,Linux預設打開的檔案數是1024。
<a href="http://s3.51cto.com/wyfs02/M01/45/56/wKiom1PnfNPhLslMAACUEWp1mOQ213.jpg" target="_blank"></a>
16、資源限定
軟限定:可臨時超出一定時長的上限
硬限定:絕對不可超出的上限
管理者可使用ulimit指令臨時性地修改各種資源的軟限制;
ulimit -n #:能同時打開的檔案數
-u #: 能同時啟動的程序數
配置檔案:
/etc/security/limits.conf,裡面限定了資源的各種屬性,包括核心檔案的大小,最大檔案數,最大程序數等資訊。如果想針對某個使用者最限制,在domain字段使用@USER_NAME,如果針對全局的話,使用*就可以實作。/etc/security/limits.d/*.conf 也可以定義各種資源限定。
<a href="http://s3.51cto.com/wyfs02/M02/45/56/wKiom1PngiezBAIDAANFLxh_weI807.jpg" target="_blank"></a>
在 15 中使用ab 測試時,會出現打開過多檔案的錯誤。使用以下設定就可以解決。
<a href="http://s3.51cto.com/wyfs02/M01/45/56/wKiom1PniCKRZEbZAAHRdzQvizM425.jpg" target="_blank"></a>
關于httpd的基本搭建介紹到這裡。其他的搭建在後續博文中介紹,像實作負載均衡。
本文轉自 羊木狼 51CTO部落格,原文連結:http://blog.51cto.com/guoting/1538362,如需轉載請自行聯系原作者