Apache安裝部署及工作模式

咋滴都行發表於2020-11-18

HTTP協議:超文字傳輸協議,Hyper Text transfer protocal(發明者:蒂姆.伯納斯.李)
1.超文字
包含超連結(link)和各種多媒體元素的文字,這些超文字檔案彼此相連,形成網狀(web),
因此又被稱為網頁(web page),這些連結使用URL表示,文字格式一般為HTML或HTM

2.HTTP協議版本:
HTTP 0.9
HTTP 1.0
HTTP 1.1 當前最流行,更多的請求方法,更精細的快取控制,支援持久連線
HTTP 2.0

3.URL:統一資源定位符
格式:https://www.baidu.com/?tn=98010089_dg&ch=12

4.HTTP請求報文的方法
get 獲得請求檔案資訊的資料內容(下載)
post 使用者提交資料到伺服器(上傳)

5.HTTP返回狀態碼(status-code),由3位數字組成(***)

200 請求成功
201 上傳檔案成功
301 永久重定向(redirect)
302,307 臨時重定向(redirect)
304 瀏覽器快取
403 請求不到首頁,沒有許可權
404 請求的資源在前端查明不存在
405 請求方法不支援
500 伺服器的內部錯誤,程式錯誤
502 請求的資源前端有記錄指向後端資料庫,卻找不到後端資源
503 服務暫時不可用
504 請求超時

6.HTTP的連線型別:
短連線:建立一次tcp的連線,發起一次HTTP的請求,結束,tcp斷開
長連線:建立一次tcp的連線,發起多次HTTP的請求,結束,tcp斷開

7.使用者訪問網站攜帶的引數,以及伺服器返回的引數
(1)General概況
Request URL: https://www.baidu.com/ #請求的URL地址
Request Method: GET #請求的方法(獲取)
Status Code: 200 OK #成功狀態碼
Remote Address: [2408:80f0:410c:1d:0:ff:b07a:39af]:443 #請求的地址(ipv4或ipv6)
Referrer Policy: no-referrer-when-downgrade #降級不推薦(從https降級到http)

(2)Request Headers:客戶端請求頭部資訊
Accept: text/html #請求的型別
Accept-Encoding: gzip, deflate, br #是否進行壓縮
Accept-Language: zh-CN,zh;q=0.9 #請求的語言
Connection: keep-alive #TCP長連線
cache-control:max-age=0 #快取時間
Cookie: #客戶端快取,使用者密碼等網站資訊
Host:www.baidu.com/ #請求的域名
Upgrade-Insecure-Requests: 1 #啟用升級https訪問
User-Agent: Mozilla/5.0 #客戶端瀏覽器

(3)Response Headers:伺服器響應頭部資訊
Cache-Control: private #快取型別非公開(公開:pubLic)
Connection: keep-alive #長連線
Content-Encoding: gzip #壓縮格式gzip
Content-Type: text/html;charset=utf-8 #文件型別
Date: Sat, 14 Mar 2020 08:48:02 GMT #響應時間
Expires: Sat, 14 Mar 2020 08:47:42 GMT #失效時間
Server: BWS/1.1 #網站伺服器軟體
status:200 #狀態碼

8.HTTP統計術語:
PV:頁面瀏覽量
UV:獨立客戶瀏覽量
IP:獨立ip瀏覽量
例子:50人,每人通過手機和電腦訪問同一網站各兩次,全部都用公司寬頻上網,會產生多少pv、uv、ip?
答案:200 100 1

9.HTTP協議原理和流程
(1)使用者輸入使用者名稱->瀏覽器跳轉->app快取->DNS解析(遞迴查詢|迭代查詢)
(2)由瀏覽器向伺服器發起tcp連線(三次握手)
(3)客戶端發起HTTP請求:
請求的方法(獲取)
請求的主機:域名
請求的資源型別(html)
請求的埠(80、443)
請求攜帶的引數(型別、壓縮、認證等)
(4)伺服器的響應:
伺服器的web軟體
響應的檔案型別
是否壓縮
是否長連線
(5)客戶端向伺服器發起tcp斷開(四次握手)

10.使用者訪問網站流程:
(1)客戶端發起HTTP請求,抵達網站的前端防火牆
(2)防火牆收到請求,分析判斷是否符合規則,將合規流量通過tcp連線負載均衡器,傳遞使用者HTTP請求
(3)負載均衡器收到請求,根據內容和策略進行下發任務,通過tcp連線web伺服器,轉發使用者的HTTP請求
(4)web伺服器收到使用者的請求之後,解析請求內容:
靜態請求:web伺服器向nfs建立tcp連線,獲取圖片等靜態檔案,返回給負載均衡器
動態請求:由web伺服器向後端的快取或資料庫建立tcp連線,將使用者的動態請求傳遞給動態程式進行解析
(5)由資料庫->動態程式->快取->web->負載均衡器->防火牆->使用者

apache安裝部署與工作模式

主流網站伺服器軟體:
Apache:時間較早,模組化設計,幾乎可以執行在所有作業系統上,效能穩定;配置相對複雜,自身無法解析動態網頁。
nginx:高效能、高併發的網站和反向代理伺服器,也可做郵件代理,阿里再開發tengine應用於天貓和淘寶。
tomcat:java應用伺服器,也是servlet容器,可以認為是Apache的擴充套件,可以獨立執行,也可以和Apache合作。
Apache與nginx的區別:
nginx:配置簡潔、反向代理、負載均衡、靜態資料處理能力是Apache3倍以上,消耗記憶體少。
Apache:跨所有平臺、支援通用閘道器介面(cgi)、支援多種動態網站語言(php,python,perl,java),模組元件比nginx多,
執行穩定;配置複雜

Apache2.4版本
新特性:
1、MPM 支援在執行時裝載;不過要開啟這種特性,在編譯安裝要啟用這三種功能;
–enable-mpms-shared=all --with-mpm=event
2、支援 event
3、支援非同步讀寫
4、在每個模組及每個目錄上指定日誌級別
5、增強版的表示式分析器
6、每請求配置:,
7、毫秒級別的 keepalive timeout
8、基於 FQDN 的虛擬主機不再需要 NameVirtualHost 指令
9、支援使用自定義變數

Apache安裝步驟:
修改主機名,關閉防火牆和Selinux
1.檢查是否已安裝rpm包httpd

[root@httpd ~]# rpm -q httpd                 \\檢視是否安裝
[root@httpd ~]# rpm -e httpd --nodeps         \\解除安裝已安裝的程式

2.安裝前提軟體
把軟體複製到虛擬機器的/usr/src目錄下或直接下載到虛擬機器
如果編譯安裝無法執行,可能是開發軟體工具沒有安裝,需要先安裝開發軟體:命令如下

[root@httpd ~]# yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel

編寫指令碼安裝前提軟體:

[root@httpd ~]# mkdir -p /server/soft
[root@httpd ~]# cd /server/soft
上傳包:1.apr-1.5.2.tar.gz   2.httpd-2.4.25.tar.gz    3.zlib-1.2.8.tar.gz   4.apr-util-1.5.4.tar.gz  5.openssl-1.0.1u.tar.gz
[root@httpd soft]# cd ..
[root@httpd server]# mkdir scripts
[root@httpd server]# cd scripts/

指令碼

[root@httpd scripts]# vim httpd-install.sh

#!/bin/bash
cd /server/soft
tar zxf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr && make && make install

cd ..
tar zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

cd ..
yum -y install zlib-*

tar zxf pcre-8.39.tar.gz
cd pcre-8.39
./configure --prefix=/usr/local/pcre && make && make install

cd ..
tar zxf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install

儲存退出
(直接新增Apache主程式也可以)
**執行指令碼:sh httpd-install.sh**
[root@httpd scripts]# sh httpd-install.sh

3.安裝Apache主程式

[root@httpd scripts]# vim apache.sh

#!/bin/bash
cd /server/soft
tar zxf httpd-2.4.25.tar.gz
cd httpd-2.4.25
./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate && make && make install

儲存退出
**執行指令碼:sh httpd-install.sh**
[root@httpd scripts]# sh apache.sh

4.優化連結

[root@httpd scripts]# ln -s /usr/local/httpd/bin/* /usr/local/bin
新增系統服務
[root@httpd scripts]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@httpd init.d]# pwd
/etc/init.d
[root@httpd init.d]# vim httpd
定位到第二行:修改為cd
#chkconfig: 35 85 15       \\宣告服務啟動級別,開機啟動順序,關機關閉順序
#description: apache 2.4.25    \\服務宣告,簡要資訊
儲存退出
[root@httpd init.d]# chkconfig --add httpd            \\新增httpd到系統服務 (chkconfig --list httpd 檢視)
[root@httpd init.d]# chkconfig httpd on                \\設定服務開機自啟(等同於:systemctl enable httpd)
[root@httpd init.d]# systemctl start httpd              \\開啟服務(等同於:service httpd start)

可以定義域名:vim /usr/local/httpd/conf/httpd.conf  找到 ServerName www.example.com:80開啟

5.檢視httpd模組
httpd -V \檢視版本和已裝模組
httpd -l \只檢視靜態編譯模組
httpd -M \檢視所有模組
6.MPM(Multi Process Modules):多程式處理模組
負責實現網路監聽、請求的處理等功能,目的為了在不同的平臺上實現最優化的效能和穩定性。
作業系統平臺 MPM
BeOS beos
NetWare mpm_netware
OS/2 mpm_os2
linux prefork、worker、event
Windows mpm_winnt

7.prefork模式:
非執行緒、預生成程式型MPM,一個子程式同一時間點僅能處理一個使用者請求,根據併發請求數動態調整子程式
worker模式:
執行緒化、多程式型MPM,每個程式可生成多個執行緒,每個執行緒處理一個請求,缺點:長連線,資源容易被佔用
event模式:
worker的改進版,使用監控執行緒處理長連線出現的資源佔用問題

8.修改mpm配置檔案
vim /usr/local/httpd/conf/extra/httpd-mpm.conf

StartServers 3 #apache 啟動時候預設開始的子程式數
MinSpareThreads 75 #最小空閒數量的工作執行緒
MaxSpareThreads 250 #最大空閒數量的工作執行緒
ThreadsPerChild 25 #每個子程式產生的執行緒數量
MaxRequestWorkers 400 #允許同時的最大接入請求數量
MaxConnectionsPerChild 0 #每個子程式可處理的請求數

9.使用ab命令進行壓力測試

  [root@httpd ~]# yum -y insatll httpd-tools
使用ab壓力測試命令進行160人併發訪問,發出10000個請求。
[root@httpd ~]# ab -c 160 -n 10000 http://192.168.1.10/index.html
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.10 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.10
Server Port:            80

Document Path:          /index.html
Document Length:        45 bytes

Concurrency Level:      160
Time taken for tests:   1.273 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2890000 bytes
HTML transferred:       450000 bytes
Requests per second:    7855.13 [#/sec] (mean)
Time per request:       20.369 [ms] (mean)
Time per request:       0.127 [ms] (mean, across all concurrent requests)
Transfer rate:          2216.93 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5  24.9      3    1008
Processing:     1   14  13.8     13     216
Waiting:        1   11  13.3      9     215
Total:          5   18  28.0     16    1017

Percentage of the requests served within a certain time (ms)
  50%     16
  66%     18
  75%     20
  80%     21
  90%     25
  95%     30
  98%     44
  99%     47
 100%   1017 (longest request)

相關文章