1. 程式人生 > >學習 Apache httpd 原理與配置

學習 Apache httpd 原理與配置

一、Apache的簡介

      Apache  Httpd又可以簡稱為httpd或者Apache,它是Internet使用最廣泛的web伺服器之一。

     使用Apache提供的web伺服器是由守護程序 httpd,通過http協議進行文字傳輸,預設使用80埠的明文傳輸方式,後來,為了保證資料的安全和可靠性,又添加了443的加密傳輸的方式(https)。

     Apache提供的伺服器又被稱為:補丁伺服器,原因很簡單,它是一款高度模組化的軟體,想要給它新增相應的功能只需新增相應的模組,讓其Apache主程式載入相應的模組,不需要的模組也可以不用載入,保證了Apache的簡潔,輕便,高效性,當出現大量訪問一個伺服器是可以使用多種複用模式,保證了伺服器能快速回應客戶端的請求,如MPM,埠複用技術。

二、一次完整的Http請求

1. http請求和響應過程:

(1)建立連線:客戶端向伺服器建立連線,傳送報文,包含相應的請求資源的方法和客戶端能支援的協議,編碼等資料。

(2)伺服器決定是否接受請求。

(3)如果伺服器同意建立連線時便要處理請求,其中包括訪問資源,訪問資源時需要相應的對映機制,把客戶端的URL轉化為本地目錄下相應的檔案

(4)伺服器訪問到相應的資源後構建響應報文

(5)傳送響應報文,報文中包含相應的狀態碼,和資料報文

(6)伺服器記錄日誌

(7)客戶端接收資料

附示例:

[[email protected] ~]# telnet vhost2.jack.com 80
Trying 192.168.20.128...
Connected to vhost2.jack.com.
Escape character is '^]'.
GET /index.html http/1.1  ====>使用GET方法請求伺服器端的主頁
host:192.168.20.128 ===>host欄位不能缺少,但可以是空值,指定伺服器的ip地址或域名也可以指定
埠號,請求報文以一個空行結尾,最後鍵入回車(兩次回車)一般瀏覽器傳送請求時會包括能接受的
編碼方式,報文長度等
HTTP/1.1 200 OK   ===>迴應報文的狀態碼
Date: Tue, 04 Oct 2016 03:48:47 GMT   ===>迴應報文的其它欄位
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sun, 02 Oct 2016 08:41:47 GMT
ETag: "16-53dddcc3d4d35"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
 
this is vhost2's page    ===>網頁內容
[[email protected]
 ~]#

2. http兩種連線方式:

(1)短連線:非保持連線

(2)長連線:保持連線。

數量限制:多少個資源

時間限制:最長可以保持長連線多長時間

附示例:

  在相應的目錄下面建立以.conf結尾的檔案內容如下keepalive.conf檔案

[[email protected] conf.d]# pwd
/etc/httpd/conf.d
[[email protected] conf.d]# cat keepalive.conf 
keepalive on
keepalivetimeout 180 
MaxKeepAliveRequests 1000

   上面配置中第一行啟用了keepalive 功能,第二行設定建立連線後多少秒後斷開連線,第三項設定了最大保持alive狀態的請求數量為1000個

3.  多種伺服器狀態碼:

  在伺服器迴應客戶端時會迴應相應的狀態碼,不同的狀態碼具有不同的含義

1xx:資訊類

2xx:成功類

3xx:重定向類

4xx:客戶端錯誤類

5xx:服務端錯誤類

4. 多種客戶端請求方法:

GET、HEAD、POST、PUT、DELETE、OPTION、TRACE …

附:IANA機構對socket埠分配:

1-1024:眾所周知埠,永久分配給固定的應用程式使用,屬於特權埠,只有root有權使用

1024-4195:註冊埠,要求略寬鬆,分配給某程式註冊使用

41952-65535:客戶端程式使用的隨機埠,動態埠,又叫私有埠或隨機埠

三、http的特性

高度模組化:core module +modules

1. 多路處理模組MPM:multipath processing modules

MPM模組在httpd-2.4中是動態共享模組的,沒有編譯如主程式當中,httpd-2. 2中是靜態編譯入主程式當中的。在這些模型中,預設使用第一個prefork模型,第二個模型因為出錯不以排查,因此使用較少,在第三個模型當中因為是比較新的功能,只有在httpd-2.4之後的版本才有的功能,所以使用較少,因為在企業使用時穩定才是王道,絕非功能越新越好

prefork:多程序模型,也是預設型別,採用預派生子程序方式,用單獨的子程序來處理不同的請求,程序之間彼此獨立。兩級架構,主程序一個子程序若干個。

幾個常用選項(指令後面的#代表相應數量的數字):

這些選項直接在主配置檔案中修改(httpd-2.2,包含2.2之前),在httpd-2.4之後的版本中mpm的配置檔案(/etc/httpd/conf.modules/00-mpm.conf)中編寫即可

ServerLimit # 伺服器允許配置的程序數上限,在其它兩種模型中因為是多級架構,所以和執行緒子程序的乘積等有關係

StartServers #  httpd服務在啟動時要啟動的子程序數量

MinspareServers # 在伺服器啟動StartsServer指定的子程序書量後每隔一秒建立一定數量的程序(是指數型的增加,第一次1個,第二次兩個,第三次4個,一直增加到32個每秒後穩定增加),直到增加到MinSpareServer指定的數量

MaxSpareServers # 這個值是設定系統最大空閒程序數量,每當大於這個數量的值時,系統會kill掉一部分子程序,但是當這個值設定的小於MinSpareServer的值時,系統會自動將該值設定為最小空閒程序數量加一

MaxConnectionsPerchild # 這個值代表每個子程序最大能處理多少個連線之後將被系統kill掉(因為程序在使用過程當中可能有資料錯誤或無法以外的記憶體洩露等)如果設定為0則代表永不kill,這個值從httpd-2.4之後才開始叫這個名字

MaxRequestWorkers #最大處理併發請求數量的限制2.4之後的版本才有的指令,意義等同於MaxClient

MaxClient # MaxClients設定的是 Apache可以併發處理的請求,是對Apache效能影響最大的引數。其預設值150是遠遠不夠的,如果請求總數已達到這個值(可通過ps -ef|grep http|wc -l來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以處理的請求就越多,但Apache預設的限制不能大於256。ServerLimit指令無須重編譯Apache就可以加大MaxClients。這個指令是httpd-2.2的

worker:多執行緒模型,為每個請求分配一個執行緒,三級架構,一個主程序,若干子程序,每個子程序管理若干個執行緒

ServerLimit

StartServers

MinSpareThreads

MaxSpareThreads

MaxRequestWorkers 應該設定為0,因為此時它已經不在相應使用者請求,0表示不加限制,不kill

        ThreadsPerChild

event:事件驅動模型,每個程序處理多個請求有多個程序

ThreadsPerChild

MaxRequestWorkers

        AsyncRequestWorkerFactor

3. httpd的功能特性:

虛擬主機

反向代理

負載均衡

CGIcommon Gateway Interface

4. httpd的版本:

httpd-1.3

httpd-2.0

httpd-2.2

httpd-2.4

centos6.8中系統版本為httpd-2.2centos7.0之後的版本自帶的httpd版本為httpd-2.4

四、程式環境:

1. 主程式:/usr/sbin/httpd

2. 通過正則表示式將註釋行和空行去掉,下面是httpd-2.4版本配置檔案示例:

[[email protected] ~]# grep -v -E -e"^[[:space:]]*#" -e "^[[:space:]]*$" httpd.conf

在此需要注意的是該配置檔案中每一配置分為兩部分,配置指令和值兩部分,配置指令不分割槽大小寫,值部分除了路徑名是要區分大小寫,其它部分也是不區分大小寫的!

ServerRoot "/etc/httpd"配置httpd使用哪個位置中使用相對路徑查詢配置檔案,如指定錯誤日誌時寫到的就是一個相對路徑,相對與此處的目錄查詢錯誤日誌檔案存放目錄

Listen 80監聽埠,可以同時監聽多個埠不過要注意設定selinux和防火牆,可以重複定義多次,監聽多個埠

Include conf.modules.d/*.conf 載入其它配置檔案,類似於C語言的標頭檔案的載入,此處可以使用相對路徑也可以使用絕對路徑,相對路徑是相對於ServerRoot的路徑,可以使用glob萬用字元,此處的配置檔案是用來載入DSOdynamic shared object)模組

User apache

Group apache 程式執行時的使用者名稱和組名,在安裝Apache時已經建立了系統賬號和組賬號,程式啟動時是以root身份啟動,執行完root特權的所有操作後(例如啟動監聽80埠,低於1024的埠的監聽需要root才有權力執行)會以非特權使用者執行程式

ServerAdmin [email protected] 管理員的郵箱地址,當httpd出問題時,聯絡該郵箱地址可以聯絡到管理員

ServerName www.jackcui.node2.com:80   ServerName給定了主機名和埠號,主要用於伺服器辨識自己是什麼名字,如果此處沒有配置的話伺服器會進行查詢/etc/hosts檔案,最後查詢自己的DNS伺服器直到將IP地址反解至主機名如果沒有DNS伺服器,此處也可以直接寫自己的ip地址和埠號,強烈建議此處的配置不要省略,否者重啟httpd服務時會很慢,因為會進行DNS反解析,這一個配置的作用主要是用來定義重定向時,伺服器區分訪問的域名是自己還是別的主機

<Directory />  關於目錄的一些配置,有關目錄的訪問許可權等都是在這裡定義,可以使用基於URL定義訪問許可權,但要使用

<Location “”> …<Location>來定義

    AllowOverride none   AllowOverride引數就是指明Apache伺服器是否去找.htacess檔案作為配置檔案,如果設定為none,那麼伺服器將忽略.htacess檔案,如果設定為All,那麼所有在.htaccess檔案裡有的指令都將被重寫。對於AllowOverride,還可以對它指定如下一些能被重寫的指令型別.

    Require all denied 對目錄的授權此處為拒絕所有訪問

</Directory>

DocumentRoot"/var/www/html"  定義目錄的根位置類似於配置檔案的根,不過此處是網頁存放的根,在定義Directory目錄時,那裡的目錄同樣可以是絕對路徑,也可以是相對於此處的路徑

<Directory"/var/www">

    AllowOverride None

    Require all granted

</Directory>

<Directory"/var/www/html">

    Options Indexes FollowSymLinks

    AllowOverride None

    Require all granted

</Directory>

<IfModule dir_module>  此處為僅在載入了模組dir_module 後才執行,DirectoryIndex配置指令後面的值可以跟多個,先後順序很關鍵,值的含義為URL訪問時進入目錄是應該尋找哪一個檔案,多個時按順序尋找,找不到第一個然後尋找第二個值

    DirectoryIndex index.html

</IfModule>

<Files ".ht*">  對所有安全相關的敏感檔案設定為禁止,如目錄下的.htaccess.htpasswd

    Require all denied

相關推薦

學習 Apache httpd 原理配置

一、Apache的簡介      Apache  Httpd又可以簡稱為httpd或者Apache,它是Internet使用最廣泛的web伺服器之一。     使用Apache提供的web伺服器是由守護程序 httpd,通過http協議進行文字傳輸,預設使用80埠的明文傳輸方

iOS 推送服務的簡易原理配置

補充 com 思考 lib email p12 sig 導出 文件的 最近的項目需要用到iOS的push功能,在配置push功能的過程中遇到了一些不清楚的地方,經過查閱資料和思考,已有初步認識,下面進行一下梳理,我們的服務器端用的是Facebook的Parse。 完整的

DNS服務的原理配置

dns 楊書凡 域名 域名解析 服務器 DNS服務的原理與配置 DNS是一組協議和服務,基本功能是在主機名與對應的IP地址之間建立映射管理。 *主機名便於記憶 *數字形式的IP地址可能會由於各種原因而改變,而主機名可以保持不變。DNS的組成 根域:就是“.”(點號)

交換機的基本原理配置

mac地址 console 以太網幀 securecrt 楊書凡 交換機工作在數據鏈路層,負責網絡相鄰節點之間的數據通信,並進行流量控制,主要通過幀在對等層間數據傳輸。在物理線路上提供可靠的數據傳輸,對網絡層而言為一條無差錯的線路。 MAC地址 計算機聯網的必備硬件是網卡,每

路由器的基本原理配置命令(靜態路由和默認路由)

路由技術 路由表 route命令 路由環路 楊書凡 路由器工作在OSI參考模型的網絡層,它的重要作用是為數據包選擇最佳路徑,最終送達目的地。那麽路由器是怎樣選擇路徑的呢?如果主機A要和主機B通信,就需要一種方法判斷源主機和目標主機所經過的最佳路徑,從而進行數據轉發,這就是路由技術。

DNS-VIEW的原理配置

linux dns1.DNS系統簡介DNS系統是個多級別的、分布的數據庫系統。它保存互連網主機名和IP地址的對應關系,也保存IP地址和主機名的對應關系,郵件路由信息,和其他一些互連網程式用到的信息。DNS中客戶程序查找的信息叫解析庫(resolver library),他發送一個查詢到一個或多個服務器並等待回

STP配置以及RSTP的原理配置(2017年12月24日 17:43:52)

周期 post 周期性 轉發 頻率 body 最大 怎樣 pdu 1、根橋的選舉。(有且只有一臺,整個網絡中心) 2、所有非根橋上根端口的選舉。 怎樣確定鏈路是不通的? 定義了一系列的計時器與報文的發送來完成鏈路的狀態監控。 只有根橋周期性發送BPDU。 計時器有: Mes

RIP/OSPF的原理配置

發送 str 遠程 sta 永遠 access -c help 內容 華為ACL創建ACL基本ACL - 僅僅匹配源IP高級ACL - 可以同時匹配5元組 - 源IP、目標IP、源端口、目標端口、傳輸層協議 ID:2000-2999 | 3000-399 |

筆記 OSPF地址匯總 、 虛鏈路配置 、 IPV6的原理配置

虛電路 ospf ospf 地址匯總 ipv6 OSPF基本理論、單區域配置 OSPF多區域配置、ABR、ospf 路由類型internal:通過network方式宣告的;intra-areainter-area external:通過重分發方式宣告的(redistribute|import-

H3c網絡虛擬化原理配置

詳細信息 process 規則 作用 配置文件 周期性 生效 支持 增加 1. IRF的工作原理與沖突檢測機制 IRF(智能彈性架構): H3C硬件虛擬化技術。 定義: 將多臺設備通過IRF物理端口連接在一起,進行必要配置後,虛

http協議--Apache-Httpd服務基本配置-rpm安裝-編譯安裝(HTTP2.2,HTTP2.4)

超文本標記語言 cookie信息 multiview 異步 表達 tp服務器 The 計算 改變 socket: OSI七層: 上三層:用戶空間 下四層:通信子網,內核空間 ip:主機到主機通信 M

Linux 下 Apache 的安裝配置

1、安裝APR (Apache Portable Runtime) wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz tar -zxf apr-1.4.5.tar.gz cd apr-1.4.5 ./configure --pre

DHCP原理配置

一、DHCP服務概述 1 DHCP(Dynamic Host Configuration Protocol)動態主機配置協議。 DHCP是由Internet工作任務小組設計開發的,專門用於為TCP/IP網路中計算機自動分配TCP/IP引數的協議 使用DHCP可以減少管理員的工作量,

機器學習之AdaBoost原理程式碼實現

1 2.000000 1.000000 38.500000 66.000000 28.000000 3.000000 3.000000 0.000000 2.000000 5.000000 4.000000 4.000000 0.0

機器學習之KNN原理程式碼實現

                                      KNN原理與程式碼實現 KNN原理 KNN(k-Nearest Neighbour):K-近鄰演算法,主要思想可以歸結為一個成語:物以類聚 工作原理 給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的 k (k

BGP協議原理配置

一,BGP協議原理與配置 邊界閘道器協議( Border Gateway Protocol,BGP)是個複雜而又龐大的距離向量動態路由協議, 裡面涉及許多非常複雜的配置。當然它的功能也非常強大,主要用於網際網路AS之間的互連,BGP 最主要的功能在於控制路由的傳播和選擇最優的路由。目前移動、

STM32部分知識之SPI原理配置

SPI介面簡介:(同樣是基於正點原子F4) SPI 是英語Serial Peripheral interface的縮寫,顧名思義就是序列外圍裝置介面。是Motorola首先在其MC68HCXX系列處理器上定義的。 SPI,是一種高速的,全雙工,同步的通訊匯流排,並且在晶片

高負載均衡學習haproxy之安裝配置

ack 實例 人的 路徑 ESS fault 輸入 小型 .cn 有關高負載均衡的軟件,目前使用比較多的是haproxy、nginx和lvs。下面我們就開始學習haprxoy這款軟件。 一、haproxy介紹 以下開始介紹有關haproxy的原理及其優點。 1.1、hapr

Apache JMeter安裝配置

1、安裝Java JDK Apache JMeter是基於Java庫,執行Apache JMeter需要啟動JVM程序,因此必須安裝JAVA SE的JDK 2、進入官網,下載Apache JMeter安裝檔案 解壓檔案apache-jmeter-5.0.zip到D:\ProgramFiles\apache

MongoDB學習筆記(三)——安裝配置MongoDB(Linux)

前一篇博文講解了如何安裝與配置MongoDB的windows版,本篇博文接著上一篇講解如何在Linux系統中安裝與配置MongoDB,為了演示,我問同事要了它的雲伺服器用於演示,當然我自己也有,但是已經安裝了,就不解除安裝重新裝了[笑臉]。 下載Linux版的