apache (Web服務器)
簡介:
Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中。
Apache HTTP服務器是一個模塊化的服務器,源于NCSAhttpd服務器,經過多次修改,成為世界使用排名第一的Web服務器軟件。
它可以運行在幾乎所有廣泛使用的計算機平臺上。
Apache源于NCSAhttpd服務器,經過多次修改,成為世界上最流行的Web服務器軟件之一。Apache取自“a patchy server”的讀音,意思是充滿補丁的服務器,因為它是自由軟件,所以不斷有人來為它開發新的功能、新的特性、修改原來的缺陷。Apache的特點是簡單、速度快、性能穩定,并可做代理服務器來使用
一 http請求處理過程
一次完整的http請求處理過程:
(1) 建立或處理連接:接收請求或拒絕請求
(2) 接收請求:接收來自于網絡的請求報文中對某資源的一次請求的過程;
(3) 處理請求:對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,根據請求報文的首部來判斷用戶請求的資料
(4) 訪問資源:獲取請求報文中請求的資源,web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源;這些資源放置于本地文件系統某路徑下,此路徑通常稱為DocRoot
(5) 構建響應報文
(6) 發送響應報文,有長連接和短連接模式
(7) 記錄日志
二 并發訪問響應模型(Web I/O):
1.單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理一個;多個請求被串行響應;
2.多進程I/O結構:并行啟動多個進程,每個進程響應一個請求;
3.復用I/O結構:一個進程響應n個請求;
(1)多線程模型:一個進程生成N個線程,每個線程響應一個用戶請求;
(2)事件驅動:event-driven
4復用的多進程I/O結構:啟動多個(m)進程,每個進程響應n個請求;
三 apache 的工作模式
1.prefork:多進程模型,每個進程響應一個請求;
一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達;最大不會超過1024個;
2.worker:多線程模型,每個線程響應一個請求;
一個主進程:生成多個子進程,每個子進程負責生個多個線程,每個線程響應一個請求;
3.event:事件驅動模型,每個線程響應n個請求;
一個主進程:生成m個子進程,每個進程直接響應n個請求;
四 安裝前準備
說明
操作系統:CentOS 6.7 64位
Apache 版本:httpd-2.2.15-47.el6.centos.3.x86_64
httpd服務器ip:192.168.1.5
1. 配置好IP、DNS 、網關,確保使用遠程連接工具能夠連接服務器
2. 配置防火墻,iptables –F 清理防火墻規則或者關閉iptables
3. 關閉SELINUX, setenforce 0 #立即生效(實際是寬容模式)
五 安裝配置
1. 安裝apache,yum安裝會自動解決依賴關系
yum -y install httpd
2. 啟動httpd 服務,并測試頁面是否顯示正常
service httpd start
如果啟動報錯信息是:httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
那就去主配置文件找到#ServerName www.example.com:80 ,把前面的注釋去掉就可以啟動不報錯了.
3. 定義server頁面文檔路徑,在新的路徑目錄下創建文件內容,重新加載服務,測試頁面.
mkdir -pv /www/htdocs
vi /www/htdocs/index.html
test Page
主配置文件修改這一行 DocumentRoot "/var/www/html"
vi /etc/httpd/conf/httpd.conf
DocumentRoot "/www/htdocs" #修改成這樣
service httpd reload
4. 基于來源訪問控制.
vi /etc/httpd/conf/httpd.conf
<Directory "/www/htdocs"> #修改這里的路徑 Order allow,deny Deny from 192.168.1.3 #找到這一行添加192.168.1.3 Allow from all
service httpd reload
5. 設置路徑別名
cd /www/htdocs/
vi bbs/index.html
Page at /www/htdocs/bbs #先自己測試看看是否是顯示的內容
mkdir /forum
vi /forum/index.html
Page /forum
vi /etc/httpd/conf/httpd.conf
Alias /bbs/ "/forum/"
service httpd reload
6. 基于用戶訪問控制
cd /www/htdocs/
mkdir amdin
vi admin/index.html
Page FOR Admin
vi /etc/httpd/conf/httpd.conf #在主配置文件下添加如下幾行
<Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" Require valid-user </Directory>
創建2個用戶
htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
htpasswd -m /etc/httpd/conf.d/.htpasswd jerry
service httpd reload
7. 基于組的用戶認證,基于組的認證修改的配置文件在以上的例子添加修改
vi /etc/httpd/conf/httpd.conf #在主配置文件下添加如下幾行
<Directory "/www/htdocs/admin"> Options None AllowOverride None AuthType Basic AuthName "Administator private" AuthUserFile "/etc/httpd/conf.d/.htpasswd" AuthGroupFile "/etc/httpd/conf.d/.htgroup" Require group webadmin </Directory>
htpasswd -m /etc/httpd/conf.d/.htpasswd obama
創建組添加用戶
vi /etc/httpd/conf.d/.htgroup
webadmin:jerry obama
service httpd reload
六 虛擬主機
注意:現在httpd服務器ip:172.28.0.97
1. 基于ip 的虛擬主機配置,進入主配置文件修改
vi /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html" #把這行注釋掉
<VirtualHost 172.28.0.97:80> ServerName web1.test.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost>
然后創建相應的目錄和內容,并重新加載配置文件和測試
mkdir -pv /vhosts/{web1,web2}/htdocs
vi /vhosts/web1/htdocs/index.html
Page at Web1
service httpd reload
2. 基于端口的虛擬主機,在以上的例子中在多個8080端口
vi /vhosts/web2/htdocs/index.html
Page at Web2
vi /etc/httpd/conf/httpd.conf
Listen 8080 #添加這一行監聽8080端口 <VirtualHost 172.28.0.97:8080> ServerName web3.magedu.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost>
httpd -t #測試語法錯誤
service httpd restart
3. 基于名稱的虛擬主機,在以上的虛擬配置上修改,并測試
vi /etc/httpd/conf/httpd.conf
NameVirtualHost 172.28.0.97:80 #把注釋去掉,表示基于主機名的虛擬主機
httpd -t
mkdir -pv /web/vhosts/{www1,www2}
vi /web/vhosts/www1/index.html
Page at www1.stu.com
vi /web/vhosts/www2/index.html
Page at www2.stu.com
在另外一臺機子上可以在hosts文件中添加172.28.0.97 www1.stu.com www2.stu.com
4. 通過www1.stu.com/server-status輸出httpd工作狀態相關信息,且只允許提供帳號密碼才能訪問(status:status);
cd /web/vhosts/www1/
mkdir admin
htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
vi /etc/httpd/conf/httpd.conf
service httpd reload
七 為上面的第1個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點;
httpd服務器ip:172.28.0.97
CA服務器IP:172.28.0.59
1. 生成密鑰對 cakey.pem,并創建所需文件(在CA服務器上操作)
cd /etc/pki/CA/
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
touch index.txt
echo 01 > serial
2. 開始申請CA機構的根證書,20年x509類型(在CA服務器上操作)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
-new: 生成新證書簽署請求;
-x509: 專用于CA生成自簽證書;
-key: 生成請求時用到的私鑰文件;
-days n:證書的有效期限;
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑;
3. 在httpd服務器上,生成自己的私鑰key與csr證書請求
cd /etc/httpd/
mkdir ssl
cd ssl/
(umask 077;openssl genrsa -out httpd.key 1024) #生成自己的私鑰
openssl req -new -key httpd.key -out httpd.csr
4. 把證書傳送給CA
scp httpd.csr root@172.28.0.59:/tmp/
5. 在CA上簽署證書,并將證書發還給請求者(在CA服務器上操作)
openssl ca -in /tmp/httpd.csr -out certs/www1.stu.com.crt -days 365
scp certs/www1.stu.com.crt 172.28.0.97:/etc/httpd/ssl
6. httpd要支持SSL 需要安裝這個mod_ssl模塊
yum -y install mod_ssl
cd /etc/httpd/conf.d/
vi ssl.conf
<VirtualHost 172.28.0.97:443> #修改這行IP DocumentRoot "/web/vhosts/www1" #注釋去掉修改 ServerName www1.stu.com #注釋去掉修改 # Server Certificate: SSLCertificateFile /etc/httpd/ssl/www1.stu.com.crt #修改證書文件路徑 # Server Private Key: SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #這個證書私鑰 service httpd restart
7. 測試https是否配置成功
在其他的機子上做測試
openssl s_client -connect 172.28.0.97:443 -CAfile /etc/pki/CA/cacert.pem
原創文章,作者:liangkai,如若轉載,請注明出處:http://www.www58058.com/13843
已置頂,優化點:
1. markdown 神器可參考
2. 題目不夠專業