天天看點

Httpd服務的配置和使用(基礎)

Http

端口定義:

0-1023:永久配置設定給固定的應用使用,特權端口

1024-41951:也是注冊端口,要求不嚴格

41952+:用戶端随即使用的端口,動态端口,或私有端口

BSD Socket :

IPC的一種實作,允許位于不同主機上的程序之間進行通訊

Socket API(封裝了核心中socket通信相關的系統調用)

SOCK_STREAM:tcp套接字

SOCK_DGRAM:UDP套接字

SOCK_RAW:raw套接字

TCP協定的特性:

建立連接配接:三次握手

将資料打包成段:校驗和CRC32

确認、重傳及逾時

排序:邏輯序号

流量控制:滑動視窗算

http:hyper text transfer protocol,應用層協定,80/tcp

Html:hyper text mark language,程式設計語言,超文本标記語言

<html>

<head>

<title>TITLE</title>

</head>

<body>

<h1></h1>

<p>……<a href=”http://www.baidu.com/download.html”>……</a></p>

<h2><h2>

</body>

</html>

CentOS 6 :

程式環境:

配置檔案:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

服務腳本:

/etc/rc.d/init.d/httpd

腳本配置檔案:

/etc/sysconfig/httpd

主程式檔案:

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

日志檔案:

/var/log/httpd:

Access_log:通路日 志

Error_log:錯誤日志

站點文檔:

/var/www/html

子產品檔案路徑:

/usr/lib64/httpd/modules

服務控制和啟動:

chkconfig httpd on

service start/stop/restart/status/reload/configtest httpd

CentOS 7:

/etc/httpd/conf/*.conf

子產品相關配置檔案:/etc/httpd/conf.modules.d/*.conf

systemd unit file:

/usr/lib/systemd/system/httpd.service

httpd-2.4支援MPM的動态切換

/var/log/httpd/:

access_log:通路日志

error_log:錯誤日志

systemctl enable httpd.service

systemctl start/stop/restart/status httpd.service

Web Server :

httpd-2.2的常用配置:

主配置檔案:

DirectoryIndex index.html 定義預設首頁名稱

DocumentRoot “/var/www/html”預設站點目錄

ServerRoot “/etc/httpd” 用于指定Apache的運作目錄,服務啟動之後自動将目錄改為目前目錄,在後面所使用的所有相對路徑都是相對這個目錄的

#Section 1 : 全局環境變量

#Section 2 : 主服務配置

#Section 3 : 虛拟主機

cp -v httpd.conf {,.backup}   #編輯配置檔案之前備份同名字尾為“.backup”的檔案

配置檔案格式:

directive value

directive : 不區分大小寫

value : 為路徑時,是否區分大小寫取決于檔案系統

常用配置:

1. 修改監聽的IP和端口

Listen IP:PORT

不寫IP預設監聽所有IP

2. 修改監聽Socket 重新開機即生效

3. 持久連結功能:TCP建立連結之後,每個最遠擷取完成後不斷開連接配接,而是繼續等待其他資源請求的進行

是否開啟:KeepAlive On/Off

斷開方法:

1. 數量限制

最大連接配接數:MaxKeepAliveRequests 100

2. 時間限制

逾時時長:KeepAliveTimeout 10

Telnet 測試:

Telnet SERVER_IP PORT

GET /URL HTTP/1.1

Host: SERVER_IP

MPM子產品

http2.2不支援同時編譯多個MPM子產品,故隻能編譯標明使用的那一個,CentOS 6 中轉麼能提供了三個應用程式檔案,httpd(prefok), httpd.worker  httpd.event  分别用于實作對不同的MPM機智的支援

預設使用的為/usr/sbin/httpd,為prefork的MPM子產品

檢視httpd程式的子產品清單

# httpd -l

檢視靜态編譯以及動态編譯的子產品

# httpd -M

更換使用httpd程式,來支援其他MPM機制

HTTPD=/usr/sbin/httpd.{worker,event}

重新開機服務才可生效

MPM(多處理子產品)配置:

prefork的配置:

<IfModule prefork.c>

StartServers 8    #啟動時啟動多少程序

MinSpareServers 5   #最小空閑程序

MaxSpareSercers 20   #最大空閑程序

ServerLimit 256    #最大線上程序數量

MaxClients 256    #這個是真正控制單台host上Apache真正能控制的最大        并發連接配接數。這個參數很重要,是你計算系統峰值時消耗        系統資源的主要依據

MaxRequestPerChild 4000 #每一個程序能處理的請求最大數量,之後必須銷毀

</IfModule>

worker的配置:

<IfModule worker.c>

StartServers         4

MaxClients         300

MinSpareThreads     25

MaxSpareThreads     75

ThreadsPerChild     25

MaxRequestsPerChild  0  #永久存在不執行銷毀

PV/UV :

PV : PageView 頁面浏覽量

UV : UserView

DSO :

配置指定實作子產品加載

LoadModule <mod_name>  <mod_path>

子產品檔案路徑可使用相對路徑

相對于ServerRoot(預設/etc/httpd)

定義‘Main’server的文檔頁面路徑

修改DocumentRoot指向的路徑為URL路徑的起始位置

相當于站點URL的根路徑

站點通路控制常見機制

可基于兩種機制指明對那些資源進行通路控制

檔案系統路徑

1. <Directory””>

……

</Directory>

2. <File””>

</File>

URL路徑 :

<Location “/”>

</Location>

<Directory>中“基于源位址”實作通路控制

1. Options後面跟一個或多個以空白字元分隔得“選項”清單

選項:

indexes: 指定的URL路徑下不存在與定義的首頁面資源相符的資源檔案時,返   回索引清單給使用者

Attention:測試Indexes功能時,務必要把/etc/httpd/conf.d/welcome.conf裡面的Option選項後面的“-”去掉,否則測試時隻會加載預設歡迎頁面而不會列出Indexes

FollowSymLinks (跟蹤符号連結) : 允許跟蹤符号連結檔案所指向的源檔案

None :全部關閉

All:全部開啟

2. AllowOverride :

與通路控制相關的哪些指令可以放在.htaccess檔案(每一個目錄下都可以有一個)中;

All : 表示所有都可以放進去

None : 否上

3. Order和allow、deny

order: 定義生效次序,寫在後面的表示預設法則;

Allow from, Deny from

來源位址:

IP:

NetAddr:三種格式:172.18

172.18.0.0

172.18.0.0/16

172.18.0.0/255.255.0.0

定義站點首頁面:

DirectoryIndex index,html index.html.var

定義路徑别名:

Alias /URL/ “/PATH/TO/SOMEDIR”

設定預設字元集:

AddDefaultCharset UTF-8

中文字元集:GBK/GB2312/GB18030

日志設定:

日志類型:通路日志  和 錯誤日志

錯誤日志:

ErrorLog logs/error_log

LogLevel warn

日志級别:debug/info/notice/warn/error/alert/emerg

通路日志:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

CustonLog logs/access_log combined

LogFormat formatrr string:

%h : 用戶端IP位址

%l :RemoteUser 通常為一個減号(“-”)

%u : 非登入通路時,為減号

%t : 服務收到請求的時間

%r : First line of request 表示請求封包的首行,記錄此次請求的方法,url以及協定版本

%>s : 響應狀态碼;

%b : 響應封包的大小,機關是位元組,但是不包括響應封包的HTTP首部

%{referer}i : 請求封包中首部“referer”的值,即從哪個頁面中的超連結跳轉至目前頁面的,

%{User-Agent}i : 請求封包中首部“User-Agent”的值,即送出請求的應用程式;

基于使用者的通路控制:

認證質詢:響應碼為401,拒絕用戶端請求,并說明要求用戶端提供賬号和密碼

認證:用戶端使用者填入賬号和密碼後再次發送請求封包、認證通過時,則伺服器發送響應的資源

認證方式有兩種:

basic:明文

digest : 消息摘要認證

安全域:需要使用者認證後方能通路的路徑,應該䚒名稱對其進行辨別,一遍告知使用者認證的原因

使用者的賬号和密碼存放位置:

虛拟賬号:僅用于通路某服務時用到的認證辨別

存儲:

文本檔案:

SQL資料庫

ldap目錄存儲

basic認證配置示例:

定義安全域

<Directory””>

Option None

AllowOverride None

AuthType Basic

AuthName “String”

AuthUserFile “/PATH/TO/HTTPF_USER_PASSWD_FILE”

Require User username1 username2 ……

允許賬号檔案中的所有使用者登入通路

Require vaild-user

提供賬号和密碼存儲(文本檔案)

使用專用指令完成此類檔案的建立以及使用者管理

htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE  username

-c 自動建立此處指定的檔案,是以,僅應該在此檔案不存在時使用

-m MD5加密

-s sha 格式加密

-D 删除指定使用者

基于組賬号進行認證:

Option None

AllowOverride None

AuthType Basic

AuthName “String”

AuthUserFile “/PATH/TO/HTTPF_USER_PASSWD_FILE”

AuthGroupFile “/PATH/TO/HTTPD_GROUP_FILE”

Require group gropname1 gropname2 ……

建立使用者賬号群組賬号檔案:

組檔案:每一行定義一個組

GRP_NAME: username1 username2 ……

虛拟主機:不建議直接在/etc/httpd/conf/httpd.conf 中配置,建議單獨一個檔案配置虛拟主機

站點辨別:socket

IP相同,但端口不同

IP不同,但是端口均為預設端口

FQDN不同:

請求封包首部實作

Host:www.zhangwentao.com

三種實作方案:

基于IP:為每一個虛拟主機準備至少一個IP位址

基于PORT:為每一個虛拟主機使用至少一個獨立的PORT

基于FQDN:為每一個虛拟主機使用至少一個FQDN

Attention: 一般的虛拟你不要與中心主機混用,是以,需要使用虛拟主機,要先禁用‘main’主機

禁用方法:注釋中心主機的DocumentRoot指令即可

虛拟主機的配置方法:

<VirtualHost IP:PORT>

ServerName FQND

DocumentRoot “”  虛拟主機站點那檔案路徑

</VirtualHost>

其它可用指令:

ServerAlias: 虛拟主機的别名,可以多次使用

ErrorLog:

CutomLog:

1.基于IP的虛拟主機示例:通過IP變化來實作虛拟主機

<VirtualHost 192.168.9.128:80>

ServerName www.zhangwentao.com

DocumentRoot “/www/zhangwentao.com/httpdocs”

<VirtualHost 192.168.9.129:80>

ServerName www.zhangwentao.net

DocumentRoot “/www/zhangwentao.net/httpdocs”

<VirtualHost 192.168.9.130:80>

ServerName www.zhangwentao.org

DocumentRoot “/www/zhangwentao.org/httpdocs”

2.基于端口的虛拟主機配置示例:

Listen 808

<VirtualHost 192.168.9.128:808>

<VirtualHost 192.168.9.128:8080>

ServerName www.zhangwentao.org

3.基于FQDN的虛拟主機:http-2.2版本中,虛拟主機要基于主機名需要加NameVirtualHost 

NameVirtualHost 192.168.9.128:80

ServerName www.zhangwentao.com

ServerName www.zhangwentao.net

status狀态頁面:

LoadModule status_module modules/mod_status.so

<Location /server-status>

SetHandler server-status

Order allow.deny

Allow from all #Allow from all 是極其危險的操作

測試httpd服務時,注意SElinux 的問題

常見報錯:SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 808. For complete SELinux messages run: sealert -l

http協定和httpd的配置:

URL:Unifrom Resource Locator

http:// :預設端口為80

https:// : 預設端口為443

基本文法:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

params: 參數

query:

frag: 網站目錄定位

相對URL:同一個站點内

絕對URL:跨站點

http協定:

http/0.9 ,http/1.0 ,http/1.1 ,http/2.0

http協定:statuless

伺服器無法持續追蹤通路者來源

cookie session

http事務:

請求:request

響應:response

封包文法格式:

request封包:

<method><request-URL><version>

<headers>

<entity-body>

response封包

<version><status><reason-phrase>

<header>

method: 請求方法,标明用戶端希望伺服器對資源執行的動作

GET 、HEAD 、POST

version:

HTTP/<major>.<minor>

status:

三位數字,如200,301,302,404,502;描述請求過程中發生的情況

reason-phrase:

狀态碼所标記的狀态的簡要描述,

headers:

每一個請求或響應封包可包含任意個首部,每個首部都有首部名稱,後面 跟上一個冒号,而後跟上一個空格,接着是一個值

entity-body:

請求時附加的資料或響應時附加的資料;

method(方法):

GET:從伺服器擷取一個資源;

HEAD:隻從伺服器擷取文檔首部

POST: 向伺服器發送要處理的資料

PUT:将請求的主體部分存儲在伺服器上(比較危險,容易被利用)

DELETE:請求删除伺服器上指定的文檔

TRACE:追蹤請求到達伺服器中間經過的代理伺服器

OPTIONS: 請求伺服器傳回對指定資源支援的使用請求方法

協定檢視或分析的工具:

tcpdump , tshark , wireshark

status(狀态碼):

1XX:100-101,資訊提示,

2XX:200-206,成功類響應

3XX:300-305,重定向

4XX:400-415,錯誤類資訊(用戶端錯誤)

5XX:500-505,錯誤類資訊(伺服器端錯誤)

常用的狀态碼:

200:成功,請求的所有資料通過響應封包的entitu-body:OK

301:請求的URL資源已經被删除;但在響應封包中通過首部Location指  明了資源現在所知的新位置(永久重定向)

302:與301相似,但在響應封包中通過Location指明資源現在所處臨時新  位置(臨時重定向)

304:用戶端發出了條件式請求:但伺服器上的資源未曾發生改變,通過  響應此狀态碼通知用戶端

401:需要輸入賬号和密碼認證之後方能通路資源

403:請求被禁止,Forbidden

404:伺服器無法找到用戶端請求的資源:Not Found

500: 伺服器内部錯誤:Internal Server Error

502:代理伺服器從後端伺服器收到了一條僞響應:Bad Gateway

Headers :

格式:

通用首部(既可以應用在請求封包首部也可以用在響應封包首部):

Date:封包的建立時間

Connection: 連接配接方式,如KeepAlive,Close

Via:顯示封包經過的節點

Catche-Control:控制緩存

請求首部:

Accept:通過伺服器自己可以接受的媒體類型

Accept-Charset:

Accept-Encoding:接受編碼格式,如gzip

Accept-Language:接受的語言

Client-IP:

Host:請求的伺服器名稱和端口号

Referer:包含目前正在請求的資源的上一級資源

User-Agent:用戶端代理

條件式去請求首部:

Expect:

If-Modified-Since:自從指定的時間後,請求的資源是否發生過修改

If-Unmodified-Since:自從指定時間之後,是否沒發生過修改

If-None-Match:本地緩存中存儲的文檔的ETag标簽是否與伺服器文檔的ETag不比對

If-Match:

安全請求首部:

Authorization:向伺服器發送認證資訊。賬号密碼

Cookie:用戶端向伺服器發送cookie

cookie2:

代理請求首部:

Proxy-Authorization:向代理伺服器認證

響應首部:

資訊性:

Age:響應持續時長

Server:伺服器程式軟體名稱和版本

協商首部:某資源有多重表示方法時使用

Accept-Ranges:伺服器可接受的請求範圍類型

Vary:伺服器檢視的其他首部清單

安全響應首部:

Set-Cookie:向用戶端設定Cookie

Set-Cookie2:

WWW-Authenticate:來自伺服器的對用戶端的質詢認證表單

實體首部:

Allow:列出對此實體可以使用的請求方法

Lcation:告訴用戶端真正的實體位于何處

Content-Encoding:内容的編碼格式

Content-Language:内容的語言

Content-Length:主體的長度

Content-Location:實體真正所處的位置

ontent-Type:主體對象類型

緩存相關:

ETag:實體的擴充标簽

Expires:實體的過期時間

Last-Modified:最後一次修改的時間

HTTPD-2.2的常見配置:

curl指令:

curl是基于URL文法在指令行方式下工作的檔案傳輸工具,它支援FTP/FTPS/HTTP/HTTPS/GOPHER/TELNET/DICT/FILE以及LDAP等協定

curl [options] URL

常用選項:

-A/--user-agent<string>設定使用者代理發送給伺服器

-basic使用HTTP基本認證

--tcp-nodelay 使用TCP_NODELAY選項

-e/--referer<URL>來源網址

--cacert<file>CA憑證(SSL)

--compressed 要求傳回是壓縮的格式

-H/--header<line>自定義首部資訊傳遞給伺服器

-I/--head 隻顯示響應封包首部資訊

--limit-rate<rate>設定傳輸速度

-u/--user<user[:password]> 設定伺服器的使用者和密碼

-0/--http1.0 使用HTTP 1.0 

elinks [options] url

-dump :不進入互動式模式,而是直接将URL的内容全部列出

user/group:

指定以哪個使用者的身份運作httpd服務程序

User apache

Group apache

使用mod_deflate子產品壓縮頁面優化傳輸速度

适用場景:

1. 節約帶寬,額外消耗CPU,可能較老的浏覽器不支援

2. 壓縮适用于壓縮的資源,例如文本檔案

https , http over ssl

SSL會話過程:

1. 用戶端發送可供選擇的加密方式,并想伺服器請求證書

2. 伺服器端發送證書以及標明的加密方式給用戶端

3. 用戶端取得證書并進行證書驗證

a) 如果信任給其頒發的證書CA

1. 驗證證書來源的合法性:用CA的公鑰解密證書上數字簽名

2. 驗證證書的内容的合法性:完整性驗證

3. 檢查證書的有效期限

4. 檢查證書是否被吊銷

5. 證書中擁有者的名字,與通路的目标主機要一緻

b) 用戶端生成臨時會話密鑰(對稱密鑰),并使用伺服器端的公鑰加密此資料發送給伺服器,完成密鑰交換

c) 伺服器用此密鑰加密使用者請求的資源,響應給用戶端

SSL會話是基于IP位址建立的,是以單IP的主機上,僅可以使用一個https虛拟主機

配置httpd支援https:

1. 為伺服器申請數字證書

測試:通過私建CA發證書

a. 建立私有CA

b. 在伺服器上建立證書簽署請求

c. CA驗證

2. 配置httpd支援使用ssl,及使用的證書

# yum -y install mod_ssl

配置檔案:/etc/httpd/conf.d/ssl.conf

DocumentRoot

ServerName

SSLCertificateFile

SSLCertificatKeyFile

3. 測試基于https通路相應的主機

繼續閱讀