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上的配置文件路徑)
查看模塊列表 ?查看靜態編譯的模塊 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”的值;即發出請求的應用程 序
將日志定義格式日期為年月日不含有英文的月:
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 添加一行如下圖:
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101223