HTTP服務和APACHE

http協議 ?Httpd介紹 ?Htdtpd2.2配置 ?Httpd2.4配置 ?編譯安裝http

Socket套接字

Socket:套接字,進程間通信IPC的一種實現,允許位于不同主機(或同一主機)上 不同進程之間進行通信和數據交換,SocketAPI出現于1983年,4.2 BSD實現

Socket API:封裝了內核中所提供的socket通信相關的系統調用

Socket Domain:根據其所使用的地址

AF_INET:Address Family,IPv4

AF_INET6:IPv6

AF_UNIX:同一主機上不同進程之間通信時使用

Socket Type:根據使用的傳輸層協議

SOCK_STREAM:流,tcp套接字,可靠地傳遞、面向連接

SOCK_DGRAM:數據報,udp套接字,不可靠地傳遞、無連接

SOCK_RAW: 裸套接字,無須tcp或tdp,APP直接通過IP包通信

系統調用

套接字相關的系統調用:

socket(): 創建一個套接字

bind():綁定IP和端口

listen():監聽

accept():接收請求

connect():請求連接建立

write():發送

read():接收

close():關閉連接

 

HTTP服務通信過程

捕獲

HTTP工作機制

http請求:http request

http響應:http response

一次http事務:請求<–>響應

Web資源:web resource

一個網頁由多個資源構成,打開一個頁面,會有多個資源展示出來,但是每個資 源都要單獨請求。因此,一個“Web 頁面”通常并不是單個資源,而是一組資源 的集合 ?

靜態文件:無需服務端做出額外處理

文件后綴:.jpg, .html, .txt, .js, .css, .mp3, .avi ?

動態文件:服務端執行程序,返回執行的結果 (如一個段程序執行的輸出結果,而不是程序本身)

文件后綴:.asp, .php, .jsp

提高HTTP連接性能

并行連接:通過多條TCP連接發起并發的HTTP請求 ?

持久連接:keep-alive,長連接,重用TCP連接,以消除連接和關閉的時延,以事 務個數和時間來決定是否關閉連接 ? (默認不是持久連接)

管道化連接:通過共享TCP連接發起并發的HTTP請求 ?

復用的連接:交替傳送請求和響應報文(實驗階段)

URI: Uniform Resource Identifier 統一資源標識,分為URL和URN ?

URN: Uniform Resource Naming,統一資源命名

URL: Uniform Resorce Locator,統一資源定位符,用于描述某服務器某特定資 源位置

兩者區別:URN如同一個人的名稱,而URL代表一個人的住址。換言之,URN 定義某事物的身份,而URL提供查找該事物的方法。URN僅用于命名,而不指 定地址

 

URL組成

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

schame:方案,訪問服務器以獲取資源時要使用哪種協議 ?

user:用戶,某些方案訪問資源時需要的用戶名 ?

password:密碼,用戶對應的密碼,中間用:分隔 ?

Host:主機,資源宿主服務器的主機名或IP地址 ?

port:端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號 ?

path:路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔 ?

params:參數,指定輸入的參數,參數為名/值對,多個參數,用;分隔 ?

query:查詢,傳遞參數給程序,如數據庫,用?分隔,多個查詢用&分隔 ?

frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔

URL示例 ;

http://www.magedu.com:8080/images/logo.jpg ?

ftp://mage:password@172.16.0.1/pub/linux.ppt ?

rtsp://videoserver/video_demo/ Real Time Streaming Protocol

 

網站訪問量

IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP地址只 計算一次,記錄遠程客戶機IP地址的計算機訪問網站的次數,是衡量網站流量 的重要指標 (以IP地址作為統計)

PV(訪問量): 即Page View, 頁面瀏覽量或點擊量,用戶每次刷新即被計算一 次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV并不是頁面的來訪者數量,而是網站被訪問的頁面數量

UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦為一個訪客。一天內相 同的客戶端只被計算一次??梢岳斫獬?span style="color: #ff00ff">訪問某網站的電腦的數量。網站判斷來 訪電腦的身份是通過來訪電腦的cookies實現的。如果更換了IP后但不清除 cookies,再訪問相同網站,該網站的統計中UV數是不變的

示例: ?

甲乙丙三人在同一臺通過ADSL上網的電腦上(中間沒有斷網),分別訪問 www.magedu.com網站,并且每人各瀏覽了2個頁面,那么網站的流量統計是:

IP: 1 ? ? ? ? ? ?? PV:6 ? ? ? ?? UV:1 ?

若三人都是ADSL重新撥號后,各瀏覽了2個頁面,則

IP: 3 ? ? ? ? ? ? ? PV:6 ? ? ? ?? UV:1

 

網站訪問量

QPS:request per second,每秒請求數

PV,QPS,并發連接數換算公式

QPS= PV* 頁?衍?連接次數/ 統計時間(86400) ?

并發連接數 =QPS * http平均響應時間 ?

峰值時間:每天80%的訪問集中在20%的時間里,這20%時間為峰值時間 ?

峰值時間每秒請求數(QPS)=( 總PV數 *頁?衍?連接次數)*80% ) / ( 每天秒數 * 20% )

 

 

 

一次完整的http請求處理過程

1、建立連接:接收或拒絕連接請求(通過tcp/ip協議建立連接) ?

2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程

3、處理請求:服務器對請求報文進行解析,并獲取請求的資源及請求方法等相 關信息,根據方法,資源,首部和可選的主體部分對請求進行處理

4、訪問資源: 服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器, 負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源

5、構建響應報文: 一旦Web服務器識別除了資源,就執行請求方法中描述的動作,并返回響應報文。 響應報文中 包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體

6、發送響應報文

Web服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器 可能有很多條到各個客戶端的連接,有些是空閑的,有些在向服務器發送數據,還 有一些在向客戶端回送響應數據

7、記錄日志

最后,當事務結束時,Web服務器會在日志文件中添加一個條目,來描述 已執行的事務

 

Httpd的MPM工作模式?

prefork:多進程I/O模型,每個進程響應一個請求,默認模型 一個主進程:生成和回收n個子進程,創建套接字,不響應請求 多個子進程:工作work進程,每個子進程處理一個請求;系統初始時,預先 生成多個空閑進程,等待請求,最大不超過1024個

worker:復用的多進程I/O模型,多進程多線程,IIS使用此模型 一個主進程:生成m個子進程,每個子進程負責生個n個線程,每個線程響應 一個請求,并發響應請求:m*n

event:事件驅動模型(worker模型的變種) 一個主進程:生成m個子進程,每個進程直接響應n個請求,并發響應請求: m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,將請 求傳遞給服務線程,執行完畢后,又允許釋放。這樣增強了高并發場景下的請 求處理能力

httpd-2.2: event 測試版,centos6默認 httpd-2.4:event 穩定版,centos7默認

 

Httpd 2.2常見配置 的常用配置及簡單用法

主要配置文件的路徑:/etc/httpd/conf/httpd.conf ?

但也可以放在:/etc/httpd/conf.d/下以.conf結尾的的文件也可以(例如:test.conf)

當兩個配置文件定義的內容有沖突時,系統會以自己定義的文件為更改標準。

當主配置文件找不到要更改的選項時(此時為系統 默認),可以在自己定義的配置文件添加更改的選項。

檢查配置文件是否有語法錯誤: httpd -t

1、顯示服務器版本信息

再自定義的配置文件下/etc/httpd/conf.d/test.conf添加:ServerTokens Prod(大小寫無所謂)

再另一臺主機上:curl -i http://192.168.60.4/(來打開本主機就不會顯示http的版本號,保證安全)

2、修改監聽的IP和Port (默認為80端口)

(1) 省略IP表示為本機所有IP? (如果后面的IP地址不寫默認綁定本機的所有IP地址)

(2) Listen指令至少一個,可重復出現多次

Listen 80 (監聽80端口)

Listen 8080? (改為監聽8080端口)

Listen 192.168.1.100:8080 ? (將http服務現更改端口號然后綁定到192.168.1.100;只有此主機才能訪問其他的主機都不能訪問本機的http服務)

此端口號的更改如果在自己定義的配置文件里更改;默認原來的80和現在定義的8080端口都有效

如果訪問時需要添加端口號:curl http://192.168.60.4:8080/或者在web瀏覽器:http://192.168.60.4:9527/ 如果需要更改端口號則需要改原來的配置文件:/etc/httpd/conf/httpd.conf

 

3、持久連接

連接建立,如果網站里有多個資源,每個資源獲取完成后不會斷開連接,而是繼 續等待其它的請求完成,默認關閉持久連接 。

斷開條件:

數量限制:100 (連接的并發數量超過100個后就會斷開第101個連接)

時間限制:以秒為單位, httpd-2.4 支持毫秒級 (超過規定的時間會斷開連接,默認為6s)

副作用:對并發訪問量較大的服務器,持久連接功能會使用有些請求得不到響應

設置:

此設置配置文件里是沒有的,用的是默認值,如果需要更改,只需在配置文件里添加或者在自己定義的配置文件里添加也可以。

KeepAliveTimeout 15 (設置為15s之后斷開連接)

KeepAlive On|Off ? (開啟和關閉持久連接,默認是關閉的,時常為6s)

MaxKeepAliveRequests 100? (斷開連接的最大次數)

4、MPM( Multi-Processing Module)多路處理模塊

prefork, ?? worker, ?? event(試驗階段)

httpd-2.2不支持同時編譯多個模塊,所以只能編譯時選定一個;rpm安裝 的包提供三個二進制程序文件,分別用于實現對不同MPM機制的支持

確認方法: ps aux | grep httpd 默認為/usr/sbin/httpd, 即prefork模式

修改此模塊的配置文件在:vim /etc/sysconfig/httpd (cent0s6的配置文件)

/etc/httpd/conf.modules.d/00-mpm.conf (centos7上的配置文件路徑)

捕獲12

查看模塊列表 ?查看靜態編譯的模塊 httpd -l ?查看靜態編譯及動態裝載的模塊 httpd –M ?動態模塊加載:不需重啟即生效 ?動態模塊路徑 /usr/lib64/httpd/modules/

更換使用的httpd程序: ?/etc/sysconfig/httpd HTTPD=/usr/sbin/httpd.worker 重啟服務生效 pstree -p|grep httpd 查看進程和線程 ?Httpd 2.4 與之不同 以動態模塊方式提供 配置文件:/etc/httpd/conf.modules.d/00-mpm.conf httpd –M |grep mpm 重啟服務生效 pstree -p|grep httpd 查看進程和線程

prefork的默認配置:

<IfModule prefork.c>

StartServers ? ? 8 ? ?? (默認啟動時開啟的進程數,在自己的配置文件里可以更改)

MinSpareServers ? ? 5

MaxSpareServers 20

ServerLimit ? ? ? 256 ,最大20000? (每個進程開啟的線程數)

MaxClients 256 最大并發

MaxRequestsPerChild 4000 子進程最多能處理的請求數量。在處 理MaxRequestsPerChild 個請求之后,子進程將會被父進程終止,這 時候子進程占用的內存就會釋放(為0時永遠不釋放)

</IfModule>

worker的默認配置:

<IfModule worker.c>

StartServers ? ? ?? 4

MaxClients ? ? ? ? ? 300

MinSpareThreads ? ? 25

MaxSpareThreads ? ? ? 75

ThreadsPerChild ? ? ? 25

MaxRequestsPerChild ? ? ? ? 0 無限制

</IfModule>

 

5、DSO: Dynamic Shared Object

加載動態模塊配置

/etc/httpd/conf/httpd.conf

配置指定實現模塊加載格式: LoadModule <mod_name> <mod_path>

模塊文件路徑可使用相對路徑:

相對于ServerRoot(默認/etc/httpd)

示例:

LoadModule auth_basic_module

modules/mod_auth_basic.so

6、定義訪問頁面的路徑

一般默認訪問打開的頁面路徑為;/var/www/html/下的各個目錄和文件

DocumentRoot ?? /var/www/html/ ?? 文檔的根目錄當用戶訪問主頁時192.169.60.60/是以此目錄為參考點的/var/www/html/。(192.169.60.60/dir? ========/var/www/html/dir

在centos6上直接在自己定義的配置文件下更改就可以:DocumentRoot “/data/www”

在centos7上除了要在配置文件里添加要更改的內容,還需要給定義的目錄添加權限

DocumentRoot “/data/www”

<directory? “/data/www” >
require all granted
</directory>

重啟服務之后就會默認訪問到/data/www/下的目錄文件了。

 

7、定義站點主頁面

一般訪問某個主機的IP地址192.169.60.60/如果不跟文件名的話默認會訪問index.html這個文件夾。

DirectoryIndex ? ? ? index.html

如果需要更改,在自定義的配置文件里添加如下的內容就可以了。

<IfModule dir_module>
DirectoryIndex qw
</IfModule>

 

8、站點訪問控制常見機制

訪問控制機制有兩種:客戶端來源的IP地址;用戶賬號 ?

在centos7中2.4的版本;

允許所有主機訪問:Require all granted

拒絕所有主機訪問:Require all denied

Require ip IPADDR:授權指定來源的IP訪問

Require not ip IPADDR:拒絕特定的IP訪問

Require host HOSTNAME:授權特定主機訪問 ‘

Require not host HOSTNAME:拒絕

HOSTNAME: FQDN:特定主機 domin.tld:指定域名下的所有主機

具體實例:在配置文件里添加

對所有請求訪問的限制:

<RequireAll>

Require all granted ? ? ? ? ? (允許所有主機訪問)

Require not ip 172.16.1.1 ? ? ?? (但拒絕特定的IP的訪問 )

</RequireAll>

 

<RequireAny>

Require all denied ? ?? (拒絕所有主機的訪問)

require ip 172.16.1.1 ? ? ? (只允許特定IP的訪問)

</RequireAny> ? ? (在此種情況下自己訪問自己也會被拒絕,只允許172.16.1.1 單個主機的訪問)

對文件訪問的限制

<files “*.txt”>
require all denied
</files> ? ? ?? (案例;拒絕訪問以.txt結尾的文件)

 

centos6的2.2的http的版本:

對指定文件訪問的限制

<files “*.txt”> (對以.txt為結尾的文件限制其訪問,當此文件里包含有用戶的私密信息時可以限制其訪問)

order deny,allow ? ?? (下面的兩個條件沖突時,看此行的deny和allow的前后順序,在最后面的生效)

deny from 172.16. 100.100 ?? (拒絕此主機的訪問)

allow from 172.16.o.o/16 ? ? ? ? ? (允許此網段的所有主機)

</files> ? ? (所以此條命令中deny from 172.16. 100.100 是無效的)

 

<files “*.txt”>? (此案例和上面的案例干好相反)

order allow,deny

deny from 172.16.100.100 ?(拒絕此主機的訪問)

allow from 172.16.0.0/16 ? ? ??(允許此網段的所有主機)

</files>

?URL路徑:(就是192.168.60.60/URL ? ?/var/www/html/ 主頁下的某個文件夾 url)

<Location “/conf”> ? ?? (針對/var/www/html/目錄下conf文件來限定訪問)

</Location>

9、<Directory>中“基于源地址”實現訪問控制

在選項前的+,- 表示增加或刪除指定選項

FollowSymLinks:允許訪問符號鏈接文件所指向的源文件 None:全部禁用 All: 全部允許

Indexes:系統默認會顯示index.html里的內容。如果沒有此文件增加此項設置會顯示主目錄下所有的文件列表

例如在網站的主目錄下有個軟連接sports 并可以正常訪問的:

options ? ?? -FollowSymLinks (去掉支持軟連接的功能)

Options ? +Indexes ? ? (或者可以將/etc/httpd/conf.d/welcome.conf 此配置文件里的Options -Indexes 注釋掉就可以了)

(2) AllowOverride

與訪問控制相關的哪些指令可以放在指定目錄下的/var/www/html/.htaccess(由 AccessFileName指定)文件中,覆蓋之前的配置指令 只對<directory>語句有效

AllowOverride All: 所有指令都有效 在配置文件里添加

AllowOverride None:.htaccess 文件無效

AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都無法 覆蓋

 

 

10、日志設定 ? ?? (日志的路徑: /etc/httpd/conf/httpd.conf)

日志類型: 訪問日志 ;錯誤日志

錯誤日志:

ErrorLog? : ? logs/error_log

LogLevel 可選值:

debug, info, notice, warn,error crit, alert, emerg (定義錯誤日志的級別,當達到什么級別開始記錄到錯誤日志里面)

LogLevel warn ?? (系統默認是達到warn級別就記錄到日志里的)

捕獲

訪問日志: (記錄日常放的信息)

參考幫助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

定義日志格式:LogFormat format strings

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

%h 客戶端IP地址 ?

%l 遠程用戶,啟用mod_ident才有效,通常為減號“-” ?

%u 驗證(basic,digest)遠程用戶,非登錄訪問時,為一個減號“-”

%t 服務器收到請求時的時間 ?

%r First line of request,即表示請求報文的首行;記錄了此次請求的“方法”, “URL”以及協議版本 ?

%>s 響應狀態碼 ? %b 響應報文的大小,單位是字節;不包括響應報文http首部 ?

%{Referer}i 請求報文中首部“referer”的值;即從哪個頁面中的超鏈接跳轉至 當前頁面的 ?

%{User-Agent}i 請求報文中首部“User-Agent”的值;即發出請求的應用程 序

捕獲123

將日志定義格式日期為年月日不含有英文的月:

 

11、設定默認字符集

AddDefaultCharset UTF-8

中文字符集:GBK, GB2312, GB18030

12、定義路徑別名

alias /pp ? /app/zz (在自定義的配置文件里添加別名)
<directory “/app/zz”>? (然后給別名對應的路徑添加權限)
require all granted
</directory>

13、基于用戶的訪問控制 (指定銘文和密碼)

cd? /etc/httpd/conf.d/

htpasswd -c /etc/httpd/conf.d/.httpuser user1

htpasswd -c /etc/httpd/conf.d/.httpuser user2 ? (.httpuse此為文件?user1此為用戶 )

<directory /var/www/html/ff>? (對特定的目錄做密碼驗證)
AuthType Basic
AuthName “welcome to access admin dir” ? ?? (歡迎語句)
AuthUserFile “/etc/httpd/conf.d/.httpduser” ?? (存放用戶和密碼的路徑)
Require user user1 user2 ? ? ? ? ? (具體指定的哪些創建的用戶)
</directory>

14、實現用戶家目錄的http共享

/etc/httpd/conf.d/userdir.conf 將此文件的兩項配置更改

# UserDir disabled? (注釋掉)

UserDir public_html (取消注釋啟用)

cd /home/lv/建立文件夾public_html然后在此文件夾里建立文件index.html

setfacl –m u:apache:x ~lv ? (對特別權限此家目錄增加)

192.168.60.6/~lv? (訪問)

15、ServerSignature On | Off | EMail 當客戶請求的網頁并不存在時,服務器將產生錯誤文檔,缺省情況下由于打開 了 ServerSignature選項,錯誤文檔的最后一行將包含服務器的名字、Apache的版 本等信息 如果不對外顯示這些信息,就可以將這個參數設置為Off 設置為Email,將顯示ServerAdmin 的Email提示

18、虛擬主機 的建立(既在一臺主機上建立多個網站)

有三種實現方案:

基于ip:為每個虛擬主機準備至少一個ip地址

基于port:為每個虛擬主機使用至少一個獨立的port (端口)

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

 

 

實驗:基于不同端口的虛擬主機的建立

1? mkdir /var/www/html/websit{1,2,3} -pv ? (建立三個 目錄)

2? .分別在每個目錄下創建index.html并寫些內容

echo 3333333 > /var/www/html/websit3/index.html
echo 222222 > /var/www/html/websit2/index.html
echo 111111 > /var/www/html/websit1/index.html

3 . 在自己定義的配置文件里添加:

listen 81
listen 82
listen 83 ?? (增加3個端口)

<VirtualHost 192.168.60.4:81>
DocumentRoot “var/www/html//websit1”? (訪問的主頁面路徑)
ServerName www.a.com ? ? ? ?? (服務的網址,需要添加dns指定才可以,本處沒有添加)
errorlog “logs/a.com error_log” ? ? ? ? ? ? ?? (錯誤日志存放的路徑)
Transferlog “logs/a.com access_log” ? ? ? ?? (訪問日志存放的路徑)
</VirtualHost>

<VirtualHost 192.168.60.4:82>
DocumentRoot “var/www/html//websit2”
ServerName www.b.com
errorlog “logs/b.com error_log”
Transferlog “logs/b.com access_log”
</VirtualHost>

<VirtualHost 192.168.60.4:83>
DocumentRoot “var/www/html/websit3”
ServerName www.c.com
errorlog “logs/c.com error_log”
Transferlog “logs/c.com access_log”
</VirtualHost

最后訪問:http://192.168.60.22:81/;http://192.168.60.22:82/;http://192.168.60.22:83/

 

基于ip來實現

1 mkdir /var/www/html/websit{1,2,3} -pv (建立三個 目錄)
2 .分別在每個目錄下創建index.html并寫些內容
echo 3333333 > /var/www/html/websit3/index.html
echo 222222 > /var/www/html/websit2/index.html
echo 111111 > /var/www/html/websit1/index.html

3 .添加3個新的IP地址 (此添加的IP為臨時的IP地址重啟后失效如果需要永久生效查看前面網絡的內容)

ip a add 192.168.60.11/24 dev ens33

ip a add 192.168.60.22/24 dev ens33

ip a add 192.168.60.33/24 dev ens33

 

4 .在自定義的配置文件里添加

VirtualHost 192.168.60.11:80> ? ?? (端口都是相同的,但IP地址是不同的)
DocumentRoot “/var/www/html//websit1”
ServerName www.a.com
errorlog “logs/a.com error_log”
Transferlog “logs/a.com access_log”
</VirtualHost>

<VirtualHost 192.168.60.22:80>
DocumentRoot “/var/www/html//websit2”
ServerName www.b.com
errorlog “logs/b.com error_log”
Transferlog “logs/b.com access_log”
</VirtualHost>

<VirtualHost 192.168.60.33:8o>
DocumentRoot “/var/www/html/websit3”
ServerName www.c.com
errorlog “logs/c.com error_log”
Transferlog “logs/c.com access_log”
</VirtualHost>

5 ,最后訪問:192.168.60.11:80/? (端口號可以不用寫)

如果要使用名字訪問則需要配dns解析,臨時使用可以配置host文件

vim /etc/hosts ? ? :添加一下內容就可以

192.168.33.33? www.a.com ? ? www.b.com ? ? www.c.com

現在訪問:curl 192.168.33.33 則會默認訪問在前面的www.a.com的主頁面

 

http協議狀態碼分類
?status(狀態碼): ?

1xx:100-101 信息提示 ?

2xx:200-206 成功 ?

3xx:300-305 重定向 ?

4xx:400-415 錯誤類信息,客戶端錯誤 ?

5xx:500-505 錯誤類信息,服務器端錯誤

具體實例:

200: 成功,請求數據通過響應報文的entity-body部分發送;OK ?

301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指 明了資源現在所處的新位置;Moved Permanently ?

302: 響應報文Location指明資源臨時新位置 Moved Temporarily ?

304: 客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應 此響應狀態碼通知客戶端;Not Modified ?

401: 需要輸入賬號和密碼認證方能訪問資源;Unauthorized ?

403: 請求被禁止;Forbidden ?

404: 服務器無法找到客戶端請求的資源;Not Found

500: 服務器內部錯誤;Internal Server Error ?

502: 代理服務器從后端服務器收到了一條偽響應,如無法連接到網關;Bad Gateway ?

503 – 服務不可用,臨時服務器維護或過載,服務器無法處理請求 ?

504 – 網關超時

 

HTTP 首部字段

HTTP 首部字段包含的信息最為豐富。首部字段同時存在于請求和響應報文內, 并涵蓋 HTTP 報文相關的內容信息。使用首部字段是為了給客服端和服務器端 提供報文主體大小、所使用的語言、認證信息等內容

 

實驗https的實現

1 . 在一臺主機上:cd /etc/pki/CA/(進入到此目錄下創建證書)

(umask 077;openssl genrsa -out private/cakey.pem 2048) ? (生成私鑰文件)

2 . openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650( 自簽名證書)

(要填的內容:CN ;beijing;beijing;magedu;opt;ca.magedu.com;)

3 .新建兩個文件:touch index.text ? ? 和 ??echo 01 > serial

4 . 在httpd服務器端開始向剛才生成的證書主機端申請證書:

cd ?/etc/httpd/conf.d/ ?? mkdir? ssl

5 cd ssl

(umask 077;openssl genrsa -out httpd.key 1024)? (自己生成私鑰文件)

6 .?openssl req -new -key httpd.key -out http.csr ? (生成申請證書的文件)

7 .scp http.csr 192.168.60.2:/etc/pki/CA ?? (復制到剛才的主機上去申請證書)

8 .openssl ca -in httpd.csr -out certs/www.magedu.com.crt -days 720(在另一臺主機上開始頒發證書)

9 . scp certs/www.magedu.com.crt 192.168.60.4:/etc/httpd/conf.d/ssl/(將頒發的證書復制回來)

scp cacert.pem /www.magedu.com.crt 192.168.60.4:/etc/httpd/conf.d/ssl

10 .yum install mod_ssl (在httpd服務端安裝模塊) 重啟http服務

11 .(修改配置文件將剛剛頒發的證書文件路徑寫在上面)

vim /etc/httpd/conf.d/ssl.conf

捕獲

12 .? https走的是443端口:開始訪問:https://192.168.60.4/(就可以實現加密的訪問)

由于自己授權的證書不信任,需要在瀏覽器端導入一下證書文件。

 

?重定向

Permanent? (永久重定向)

temp ?? (臨時重定向)

redirect temp ? ? ? ? ? / ? ? ? ? ? ?? http://www.baidu.com ? (當在瀏覽器上輸入192.168.60.4/是頁面會被重定向到http://www.baidu.com 網站上去)

http重定向到https上去:(前提是本網站以實現https的加密)

redirect temp ? / ? https ://192.168.60.4/

上述方法存在安全隱患:可用下面的方法重定向到https上去。

vim /etc/httpd/conf/httpd.conf

Header always set Strict-Transport-Security “max-age=31536000”

RewriteEngine on

RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

加入此三行就可以了

 

在centos6編譯安裝httpd-2.4

1 .??開發環境包組: Development Tools,Server? 相關包:pcre-devel,openssl-devel expat-devel

2 .?安裝httpd-2.4 ?依賴于apr-1.4+, apr-util-1.4+

3 .下載源代碼并解壓縮: httpd-2.4.27.tar.bz2 apr-1.6.2.tar.bz2 apr-util-1.6.0.tar.bz2

4. mkdir /src (新建文件并將下載下來的源碼包上傳到此文件夾下)

5 .將三個壓縮包解壓縮到 cd /src目錄下

tar xvf httpd-2.4.33.tar.bz2

tar xvf apr-util-1.6.1.tar.gz

tar xvf apr-1.6.3.tar.gz

6 .?mv apr-1.6.3 /src/httpd-2.4.33/srclib/apr ? (將解壓的apr-1.6.3 整個目錄移動到目錄下并重命名)

mv apr-util-1.6.1 /src/httpd-2.4.33/srclib/apr-util? (同上)

7 . cd /src/ httpd-2.4.33 / (進入到此目錄下開始進行編譯)

mkdir? /app? (新建一個目錄供編譯安裝時指定路徑)

./configure –prefix=/app/http24 –enable-so –enable-ssl –enable-cgi –enable-rewrite –with-zlib –with-pcre –with-included-apr –enable-modules=most –enable-mpms-shared=all –with-mpm=prefork

捕獲? (編譯成功)

8 .?make && make install

9 .vim /etc/profile.d/httpd24.sh (新建文件存放PATH變量)

PATH=/app/http24/bin:$PATH

. /etc/profile.d/httpd.sh ? ? (讓其生效)

10 .?apachectl start ? (開啟服務)(其主程序在/app/httpd24/bin網站的主頁面在/app/httpd24/htdocs)

總結:在編譯安裝時指定編譯安裝的目錄為/app/httpd24時他的自定義配置文件在哪里

在yum安裝時在/etc/httpd/conf.d/下新建一個test.conf的自定義配置文件

而在編譯安裝時他的目錄在:/app/http24/conf/extra/下新建一個test.conf的自定義配置文件。但有一個前提需要在主配置文件中啟用自定義的配置文件/app/httpd24/conf/ httpd.conf 添加一行如下圖:

捕獲12

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101223

(0)
無所謂無所謂
上一篇 2018-06-19
下一篇 2018-06-19

相關推薦

欧美性久久久久