目錄:
一、httpd服務基本介紹
二、httpd-2.2常用小選項配置
三、httpd-2.2 VirtualHost配置
四、httpd-2.2的基於https的安全訪問
--------------------------------------
一、httpd服務基本介紹:
httpd是Apache超文本傳輸協議(HTTP)服務器的主程序。被設計爲一個獨立的運行的後臺進程,它會建立一個出來請求的子進程或線程的池。通常httpd不被直接調用,而是由apachectl調用。http是一個應用程的協議,它可以分爲http和https,它們分別使用tcp協議端口的80和443端口。
請求響應方式:
客戶端需要訪問某資源時會向服務器發送http請求報文,服務器根據客戶端請求信息做出http響應報文,所以一次http事務就是http請求然後http會給予請求響應。
web資源:
資源的標識:URL:用於標識web資源所在的位置。
格式:協議://主機地址或者主機名[:端口][/目錄資源]
靜態資源:不需要服務器做任何操作處理,例如.JGP .PNG格式的文件等
動態資源:服務器需要執行一些程序做出處理後返回給客戶端請求所需要的信息,例如.php .js
一次完整的htpt請求處理過程:
(1)建立或處理連接:接收請求或者是拒絕請求
(2)接收請求:接收客戶端主機請求報文中對某個資源的一次請求過程
(3)處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法相關信息
(4)訪問資源:獲取請求報文中請求的資源
(5)構建響應報文
(6)發送響應報文
(7)記錄日誌
併發訪問響應模型:
單進程I/O模型:啓動一個進程處理用戶請求,一次只能處理一個請求對公請求被串行響應
多進程I/O模型:並行啓動多個進程,每個進程響應一個請求
複用進程I/O模型:一個進程響應多個請求
多線程模式:一個進程生成多個線程,一個線程處理一個請求
事件驅動模式:一個進程直接響應多個請求
複用多進程I/O模型:啓動多個進程,每個進程生成多個線程,響應請求的數量就是線程乘以進程
httpd工作模式:
prefork:多進程模式:一個主進程多個子進程,一個進程只響應一個請求。一個主進程負責生成子進程及回收子 進程,接收請求,派發請求給子進程處理,生成的多個子進程中每個子進程負責處理一個請求。
worker:多進程多線程模式:一個線程響應一個用戶請求。一個主進程負責生成子進程及回收及進程,創建套接字,派發請求給子進程處理。多個子進程負責生成多個線程。每個線程負責響應用戶請求。
event:事件驅動模式:多進程模式:一個進程響應多個用戶請求。一個主進程負責生成子進程及回收及進程,創建套接字,派發請求給子進程處理。子進程負責基於事件驅動機制直接來響應用戶的請求。
二、httpd常用選項配置
1、監聽端口
Listen 80 ##監聽本機的80端口 Listen 8080 ##監聽本機的8080端口 Listen 192.168.1.100:80 ##監聽特定IP的80端口 Listen 192.168.1.101:8080 ##監聽指定IP的特定端口
2、保持連接
KeepAlive Off|ON ##是否允許持續性連接,即建立一次tcp連接完成多個文件傳輸 MaxKeepAliveRequests 100 ##最大保存連接請求數量 KeepAliveTimeout 15 ##保存持續性連接超時時間
3、MPM多路處理模塊
[root@bogon ~]# ps aux | grep httpd ##查看httpd使用的MPM模塊 root 5012 0.0 0.3 185928 3972 ? Ss 23:44 0:00 /usr/sbin/httpd apache 5022 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5023 0.0 0.2 186060 2508 ? S 23:44 0:00 /usr/sbin/httpd apache 5024 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5025 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5026 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5027 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5028 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd apache 5029 0.0 0.2 186060 2492 ? S 23:44 0:00 /usr/sbin/httpd root 5064 0.0 0.0 103304 892 pts/2 S+ 23:55 0:00 grep httpd [root@bogon ~]# httpd -l #####我們從中可以看出使用的是默認preforkmok Compiled in modules: core.c prefork.c http_core.c mod_so.c 如果需要更改我們默認使用的模塊方法: [root@bogon ~]# vim /etc/sysconfig/httpd HTTPD=/usr/sbin/httpd.worker -------------------------- ---------------------------------- <IfModule prefork.c>###prefork模塊配置 StartServers 8 #啓動httpd時預先創建幾個子進程數量 MinSpareServers 5 #最小空閒進程數量 MaxSpareServers 20 #最大空閒進程數量 ServerLimit 256 #服務器同一時間內能夠響應進程的數量 MaxClients 256 #最多可以允許客戶端併發請求連接數量 MaxRequestsPerChild 4000 #每個子進程能夠響應的最大請求數量 </IfModule> <IfModule worker.c>##worker模塊配置 StartServers 4 #啓動httpd是預先創建幾個字進程數量 MaxClients 300 #最多允許客戶端併發請求連接數量 MinSpareThreads 25 #最小空閒進程數量 MaxSpareThreads 75 #最大空閒進程數量 ThreadsPerChild 25 #進程啓動時候生成的線程數量 MaxRequestsPerChild 0 #每個子進程能夠響應的最大請求數量 </IfModule>
4、DSO(動態加載或卸載模塊)
# Example: # LoadModule foo_module modules/mod_foo.so # LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so
5、基於ip來源訪問控制
<Directory "/var/www/html"> Options Indexes FollowSymLinks #定義資源展示方式 AllowOverride None Order allow,deny Allow from all deny from 192.168.1.100 ###禁止192.168.1.100訪問網站 </Directory>
6、定義站點主頁面
DirectoryIndex index.html index.html.var (有多個文件自左而又查找)
7、定義路徑別名
[root@bogon ~]# mkdir -p /etc/url/index.html ###建立別名鏈接文件 [root@bogon ~]# vim /etc/httpd/conf/httpd.conf Alias /bbs/ "/etc/url/" ##編輯主配置文件設置路徑別名連接 測試: [root@bogon ~]# curl 192.168.1.100/bbs/index.html url alias
8、基於用戶訪問認證控制
第一種:基於用戶賬號進行認證
1)主配置文件中添加認證區域內容:
[root@bogon ~]# vim /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all deny from 192.168.1.100 添加內容## AuthType Basic ###定義認證的類型:明文(basic)或密文(digest) AuthName "admin use zone" ###提示信息 AuthUserFile "/etc/httpd/conf/.htpasswd" ###認證用戶文件存放路徑 Require valid-user ####允許用戶文件中的所有用戶登錄 </Directory>
2)提供用戶賬號和密碼文件:
[root@bogon ~]# htpasswd -c -m /etc/httpd/conf/.htpasswd tom [root@bogon ~]# htpasswd -m /etc/httpd/conf/.htpasswd jerry
3)檢查配置文件重新加載
[root@bogon ~]# httpd -t Syntax OK [root@bogon ~]# service httpd reload Reloading httpd:
第二種:基於組賬號進行認證
1)
[root@bogon ~]# vim /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all deny from 192.168.1.100 添加內容## AuthType Basic ###定義認證的類型:明文(basic)或密文(digest) AuthName "admin use zone" ###提示信息 AuthUserFile "/etc/httpd/conf/.htpasswd" ##定義用戶賬號文件 AuthGroupFile "/etc/httpd/conf/.hgpasswd" ###定義組賬號文件 Require group groupuser ###定義組賬號文件中允許訪問的用戶 </Directory>
2)建立用戶
[root@bogon ~]# htpasswd -c -m /etc/httpd/conf/.htpasswd user1 [root@bogon ~]# htpasswd -m /etc/httpd/conf/.htpasswd user2
3)建立組賬號文件
[root@bogon ~]# vim /etc/httpd/conf/.hgpasswd groupuser: user1 user2
4)檢查配置文件重新加載
[root@bogon ~]# httpd -t Syntax OK [root@bogon ~]# service httpd reload Reloading httpd:
9、status頁面
1)確保模塊加載:LoadModule status_module modules/mod_status.so 2)開啓228行 ExtendedStatus On 3)編輯status區域 <Location /var/www/html/server-status> SetHandler server-status Order allow,deny Allow from 192.168 </Location> 4)檢查配置文件正確否,加載服務 5)訪問 Apache Server Status for 192.168.1.100 Server Version: Apache/2.2.15 (Unix) DAV/2 Server Built: Jul 24 2015 11:52:28 Current Time: Thursday, 12-May-2016 01:24:37 CST Restart Time: Thursday, 12-May-2016 01:22:20 CST Parent Server Generation: 7 Server uptime: 2 minutes 16 seconds Total accesses: 4 - Total Traffic: 0 kB CPU Usage: u0 s0 cu0 cs0 .0294 requests/sec - 0 B/second - 0 B/request 1 requests currently being processed, 7 idle workers ____W___........................................................ ................................................................ ................................................................ ................................................................ Scoreboard Key:
10、運行httpd服務的屬主和屬組
User apache Group apache
11、使用mod_deflate模塊壓縮頁面優化傳輸速度
SetOutputFilter DEFLATE # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 # Netscape 4.x has some problems. BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
三、httpd-2.2 VirtualHost配置
1、基於IP的virtualhost:(事先準備好兩個IP)
1)編輯配置文件設置如下:
<VirtualHost 192.168.1.100:80> DocumentRoot "/web/vhosts/www1" ServerName www1.a1.com ErrorLog "/var/log/httpd/www1.err" CustomLog "/var/log/httpd/www1.access" common </VirtualHost> <VirtualHost 192.168.1.101:80> DocumentRoot "/web/vhosts/www2" ServerName www2.a2.com ErrorLog "/var/log/httpd/www2.err" CustomLog "/var/log/httpd/www2.access" common </VirtualHost>
2)修改下
DocumentRoot "/web/vhosts/"
3)建立網頁文件
[root@bogon ~]# mkidr -p /web/vhosts/www1/index.html [root@bogon ~]# mkidr -p /web/vhosts/www2/index.html
4)檢查配置文件是否正確,然後重啓或加載,ok後測試結果
[root@bogon ~]# httpd -t Syntax OK [root@bogon ~]# service httpd reload
5)查看我們的日誌文件
[root@bogon ~]# cat /var/log/httpd/www1.access 192.168.1.103 - - [12/May/2016:02:14:04 +0800] "GET / HTTP/1.1" 200 25 [root@bogon ~]# [root@bogon ~]# [root@bogon ~]# cat /var/log/httpd/www www1.access www1.err www2.access www2.err [root@bogon ~]# cat /var/log/httpd/www1.err
2、基於端口的virtualhost
1)編輯配置文件設置如下:
<VirtualHost 192.168.1.100:80> DocumentRoot "/web/vhosts/www1" ServerName www1.a1.com ErrorLog "/var/log/httpd/www1.err" CustomLog "/var/log/httpd/www1.access" common </VirtualHost> <VirtualHost 192.168.1.100:8080> DocumentRoot "/web/vhosts/www2" ServerName www2.a2.com ErrorLog "/var/log/httpd/www2.err" CustomLog "/var/log/httpd/www2.access" common </VirtualHost>
2)設置監聽地址
Listen 80 Listen 8080
3)檢查然後重新加載服務,測試
3、基於FQDN的virtualhost
1)開啓虛擬主機域名
NameVirtualHost 192.168.1.100:80
2)編輯配置文件設置如下:
<VirtualHost 192.168.1.100:80> DocumentRoot "/web/vhosts/www1" ServerName www1.a1.com ErrorLog "/var/log/httpd/www1.err" CustomLog "/var/log/httpd/www1.access" common </VirtualHost> <VirtualHost 192.168.1.100:80> DocumentRoot "/web/vhosts/www2" ServerName www2.a2.com ErrorLog "/var/log/httpd/www2.err" CustomLog "/var/log/httpd/www2.access" common </VirtualHost>
3)解析域名,此處我就用hosts文件來解析了
[root@bogon ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.0.1 server.magelinux.com server 192.168.1.100 www1.a1.com 192.168.1.100 www2.a2.com
4)檢查加載服務,測試即可
四、httpd-2.2的基於https的安全訪問
###CA服務器上操作:
1)生成密鑰對密鑰對
[root@bogon CA]# (umak 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2)生成自簽證書
[root@bogon CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 Country Name (2 letter code) [XX]:CN ##國家 State or Province Name (full name) []:beijing ##省 Locality Name (eg, city) [Default City]:beijin ##市 Organization Name (eg, company) [Default Company Ltd]:magedu.com #公司名稱 Organizational Unit Name (eg, section) []:yunwei ##部門 Common Name (eg, your name or your server's hostname) []:bogon ##ca域名 Email Address []:[email protected] #郵箱
3)爲CA提供所需目錄及文件
[root@bogon CA]# touch {serial,index.txt} [root@bogon CA]# echo 01 > serial
###httpd服務器上操作:
1)生成密鑰
[root@bogon ~]# mkdir /etc/httpd/ssl [root@bogon ~]# cd /etc/httpd/ssl/ [root@bogon ssl]# (umask 077;openssl genrsa -out /etc/httpd/) conf/ conf.d/ logs/ modules/ run/ ssl/ [root@bogon ssl]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成證書籤署請求
[root@bogon ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijin Organization Name (eg, company) [Default Company Ltd]:magedu.com Organizational Unit Name (eg, section) []:yunwei Common Name (eg, your name or your server's hostname) []:bogon Email Address []:[email protected]
3)在CA上籤署證書,並將證書方式給請求者
[root@bogon tmp]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 [root@bogon certs]# scp httpd.crt [email protected]:/etc/httpd/ssl
4)httpd要支持SSL需要安裝mod_ssl模塊
[root@bogon ~]# yum -y install mod_ssl
5)配置/etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.100:443> ##此行IP地址需要按照你自己需求更改 DocumentRoot "/web/vhosts/www1" ServerName SSLCertificateFile /etc/httpd/ssl/httpd.crt SSLCertificateKeyFile /etc/httpd/ssl/httpd.key ##證書私鑰
6)檢查配置文件,重新加載,測試即可
[root@bogon ssl]# httpd -t Syntax OK [root@bogon ssl]# service httpd reload Reloading httpd: