linux之http詳解

HTTP(HyperText Transfer Protocol)超文本傳輸協議
html(HyperTextMarkLanguage)超文本標記語言
URI(Uniform Resource Indentifier)統一資源標識符:定義全局範圍內唯一引用某一個獨立的資源的命名方式
統一:路徑格式上的統一
URL(Uniform Resource Location)統一資源定位符:用於描述互聯網上互聯網資源的統一表示格式
是統一資源標識符的子對象
web資源:http://host:port/path/log.gif
多個資源很可能被整合爲一個html文檔
web對象(和web資源意義相同)
HTTP方法:0.9版本
GET:獲取服務器資源到本地瀏覽器進行顯示(不是簡單傳輸的)
1.0版本後
put:
post:通過表單提交數據到服務器上去
delete:
MIME:Mutilpurpose Internet Mail Extetion(多用途互聯網郵件擴展)
將非文本數據在傳輸前重新編碼爲文本格式,接收方能夠用相反的方式將其重新還原會原來的格式,還能夠調用相應的程序來打開此文件
base64文本編碼格式
動態網頁:服務器端存儲的文檔非HTML格式,而是編程語言開發的腳本,腳本接受參數之後在服務器運行一次,運行完成後會生成HTML文檔,把
生成的文檔發給客戶端
IP首部:
源地址
目的地址
tcp首部:
源端口
目的端口
http首部
定義了基於http協議獲取那個資源的
HTTP報文:請求報文、響應報文
請求報文的語法:
<method>(資源獲取方法) <request-URL>請求的資源是什麼 <version>協議的版本號(0.9還是1.0)
<headers>






























<entity-body>報文主體
響應報文語法:
<version> <status>狀態代碼  <reason-phrase>
<headers>

<entity-body>

請求報文:
GET / HTTP/1.1
Host:www.mageedu.com
Connection:keep-alive
響應報文:
HTTP/1.1 200 OK
X-Powered-By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent
Cache-Control:max-age=3,must-reavlidate
Content-Encoding:gzip
Content-Length:6931









Web服務器的主要操作
1、建立連接-接收或拒絕客戶端的請求
2、接收請求-通過網絡讀取HTTP請求報文
3、處理請求-解析請求文件報文並作出相應的動作
4、訪問資源-訪問請求報文中的相關資源
5、構建響應-使用正確的首部生成http響應報文
6、發送響應-向客戶端發送生成的響應報文
7、記錄日誌-當已經完成HTTP事物記錄進日誌






SERVER的響應模型
單進程、單線程
多進程、多線程
單進程、多請求
多進程、多請求



客戶端訪問服務器中的每一個資源都是單獨發送單獨請求的

狀態代碼:
1xx:純信息
2xx:“成功”類的資源信息
3xx:重定向的信息
4xx:客戶端錯誤類的信息
5xx:服務器錯誤類的信息
超鏈接:
Web:
C/S
c:Client Agent(browser,spider)
s:server
流程:Client-->request-->server-->response-->Client
Client:
IE
Firefox
Chrome
Opera
Safari
Server:
APACHE-->httpd
nginx
lighttpd
thttpd(主用於嵌入式)
應用程序服務器(不但能夠處理靜態內容,還能在自己內部處理某種格式的動態內容)
IIS
Tomcat(apache)
Websphere(IBM,JSP)
Weblogic(Bea,jsp,2008年被oracle收購)
JBoss(RedHat)
www.netcraft.com:查看web服務的最新市場排名,且支持查看其站點服務器的軟件類型
代理
Web代理服務器工作於web客戶端和web服務器之間。它負責接收來自於客戶端的http請求,並將其轉發至對應的服務;而後接收來自服務端的響應
,並將響應送回至客戶端
apache:17
早先產生於NCSA,httpd
A Patchy Server(一個充滿補丁的服務)最後被簡稱爲apache
FSF:GUN Free Software Foundation
ASF:Apache Software Foundation
web:httpd
Tomcat
Hadoop(提供並行處理環境,提供高性能運算非常重要的運算框架,可將數千臺電腦組織起來完成同一個任務)
httpd:
提供純粹的web服務,並且Open source
httpd的特性:
事先創建進程
按需維持適當的進程
模塊設計,核心比較小,各種功能都模塊添加(包括php)
支持運行時配置,支持單獨編譯模塊
支持多種多種方式的虛擬主機配置
虛擬主機:
物理服務器
web程序也只有一個
卻可以提供多個不同的服務
基於IP的虛擬主機
基於端口的虛擬主機
基於域名的虛擬主機
支持https協議(mod_ssl)
支持用戶認證:簡單認證,摘要式認證,基於表單的認證
支持基於IP或主機名的ACL
支持每目錄的訪問控制
支持URL重寫



























































httpd在redhat中的安裝配置:
rpm包安裝
源碼編譯
①selinux(事先處於關閉狀態)
/usr/sbin/httpd(MPM:prefork)Redhat5.8的系統上httpd工作模式多道處理模塊
httpd:root,root(並不響應用戶請求,創建和銷燬空閒進程的;主導進程)linux上小於1024的端口要想使用只有管理員有權限
httpd:apache,apache(work process 響應用戶的請求)
Port:(80/TCP),(SSL:443/TCP)
/etc/httpd:工作目錄,相當於程序安裝目錄
/etc/httpd/conf:配置文件目錄
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf 都是httpd的主配置文件的組成部分,被httpd.conf包含進去了
/etc/httpd/modules:模塊目錄
/etc/httpd/logs-->/var/log/httpd:日誌目錄
日誌文件有兩類:訪問日誌access_log和error_log
資源路徑:/var/www/
html:靜態頁面目錄
cgi-bin:apache提供動態內容的路徑
cgi(common gateway interface):是能夠讓web程序跟額外的程序通訊的一種機制
yum install httpd
rpm -ql httpd | less
/etc/httpd/conf/magic:定義了本地主機如何識別通過MIME格式編碼的非純文本文檔的
/usr/bin/ab:服務壓力測試工具
認證用戶賬號密碼的幾個命令:
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/bin/htdbm
消除httpd的歡迎信息:mv/etc/httpd/conf.d/welcome.html welcome.bak
grep "Section" httpd.conf:查看httpd.conf分成的三個片段
①global Environment 全局配置
如果#號後邊沒有空格但是跟的字符,是可以啓用的選項,由“指令+值”組成
指令是不區分字符大小寫的,但是”值“(路徑)是區分大小寫的
ServerTokens 輸出發行商版本號和軟件版本號(在apache的官網指令文檔中查看)
也可以安裝httpd的手冊:yum install -y httpd-manual
然後可訪問:ip/manual,查看手冊內容
ServerRoot "/etc/httpd"服務的根目錄
PidFile run/httpd.pid httpd進程pid保存在這個的文件當中
timeout tcp從緩存中讀取報文有關的
KeepAlive OFF 是否使用長連接(如果是關的,每次請求服務器的一個資源都要進行三次握手,耗費資源)
MaxKeepAliveRequests 100 處於長連接時一次最多可以讓客戶端請求多少個資源
KeepAliveTimeout 15 長連接的佔用時長
MPM(mtlti processing Modules):多道處理模塊
①mpm_winnt:windows NT專用
②prefork:預先生成進程(一個請求用一個進程響應)
③worker:基於線程工作的(一個進程下用多個線程響應用戶請求;一個請求用一個線程響應)
④event:基於事件驅動,(一個進程處理多個請求)
httpd的默認響應模型是prefork
修改httpd的響應模型:/etc/sysconfig/httpd 將httpd.worker前邊的註釋去掉,再起啓動,httpd就是prefork響應模型
<IfModule prefork.c>
StartServer 8 服務器剛啓動就要啓動多少個空閒進程
Min SpareServers 5 服務器最少需要多少個空閒進程
Max SpareServers 20 服務器最大需要多少個空閒進程
ServerLimit 256 爲Maxclient指定一個上限值,(需要服務器重啓之後才能修改)
MaxClient 256 最多隻允許多少個請求同時連進來
MaxRequestPerchild 4000 一個子進程最多能響應多少次用戶的請求
</IfModule >
#
<IfModule worker.c>
StartServer 2 默認啓動多少進程
MaxClients 150 最多允許多少個進程連進來
MinSpareTheads 25 最小空閒線程
MaxSpareTheads 75 最大空閒線程
ThreadsPerChild 25 一個進程最大生成多少個線程
MaxRequestPerchild 每個進程最多響應多少個請求
</IfModule>
Listen 80 指定監聽的地址和端口的但是地址可以省略,如果不帶地址。表示監聽當前主機所有地址的80端口,而且可以監聽
多個端口,Listen可以出現多次
Include conf.d/*.conf conf.d下所有的.conf文件都是主配置文件的組成部分
user:apache的worker進程的屬主
Group:apache的worker進程的屬組
②‘Main’ server configuration 只提供一個站點不提供虛擬主機
ServerAdmin root@localhost(一般而言每一個站點都應該配置一個管理員)
ServerName 如果不啓用此指令,服務在啓動的時候會反向解析當前IP地址到某一個主機名,如果解析成功就把主機名當做服務器的名稱,否則會報錯
UserCanonicalName 正式名稱
DocumentRoot 文檔根目錄(默認存放網頁的目錄)URL是相對於DocumentRoot路徑而言的
<Directory "/var/www/html" >
相當於一個容器,定義了此目錄如何被訪問
Option(定義這個目錄下的網頁文檔能夠在被訪問時候的訪問屬性,它的值有很多,之間用空格隔開)
None: 不啓用任何值
Indexes:索引目錄,如果根目錄中沒有index首頁,那就將目錄中的文件列出來,這種方式很不安全,除非你將這個web服務當成下載站點,可以啓用此值
FollowSymLinks:允許訪問符號鏈接,目錄下有一個文件夾是符號鏈接,是否能夠訪問此鏈接的內容,不安全的
Includes:允許執行服務器端包含的(SSI)不安全的,不需要啓用
SymLinksifOwnerMatch:允許執行符號鏈接,但是屬主必須與執行httpd進程的屬主一致
ExecCGI:允許執行CGI腳本
MultiViews:內容協商的機制,通過判斷操作系統的語言,給客戶端響應網頁
ALL:啓用所有的功能
AllowOverride:允許覆蓋 Authconfig
AuthType:認證的類型(Basic|Digest)
AuthName:限定的訪問區域
AuthUserFile:認證用戶文件位置
AuthgroupFile:認證組文件存放位置
Require user:認證用戶文件能夠登錄的用戶
Require group:組中的用戶能夠登錄訪問
htpasswd -c -m /etc/httpd/conf/htpasswd USERNAME
-c:創建httpd第一個認證賬號需要使用-c選項,之後不能使用-c選項,否則會清除文件中的所有內容
-m:賬號的密碼使用md5方式加密
-D:從httpd文件中刪除創建的用戶
Order:用於定義基於主機的訪問控制功能的,也能夠實現基於IP,網絡地址或主機定義訪問控制機制
Order allow,deny(次序很關鍵,前邊定義允許的,後邊就都是拒絕的)
allow from
deny from
訪問控制地址的表示方式:
IP
network/netmask
hostname:www.song.com
domianname:song.com
Partial IP:172.16=172.16.0.0/16
</Directoy>
<IfModule mod_userdir.c>
#UserDir disabled 用戶夠在自己的家目錄建立個人的網頁文件
UserDir public_html
*步驟:添加新用戶,將用戶的家目錄的權限更改爲o+x,在家目錄中新建public_html目錄,在目錄中新建index.html文檔
selinux(事先處於關閉狀態)
</IfModule>
DirectoryIndex index.html index.html.var 定義訪問URL的時候沒指定訪問頁面,默認會訪問那個頁面,如果兩個頁面都存在那麼自左而右
AccessFileName .htaccess 可以對網站根目錄的子目錄下的html做單獨的訪問控制,只需要在創建一個.htaccess文件,在文件中定義(AuthType)之類的訪問控制機制,一般註釋掉
<Files ~ "^.ht"> 拒絕用戶訪問.ht開頭的文件
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types 允許http協議傳輸多媒體文檔,非二進制格式的文件,其中定義了那個配置文件保存了MIME類型
DefaultType text/plain 如果沒定義了類型,那就是文本下的明文文本信息
<IfModule mod_mime_magic.c>:如果mod_mime_magic.c模塊存在,那麼MIME的文檔是conf/magic


























































































































MIMEMagicFile /usr/share/magic.mime

   MIMEMagicFile conf/magic
</IfModule>
    HostnameLookups Off  每個用戶的訪問都會被記錄到日誌裏邊去,是記錄主機名還是IP地址,耗費資源直接註釋掉
    ErrorLog logs/error_log 定義錯誤日誌以及存放位置
    LogLevel warn  日誌級別
訪問日誌的記錄格式:
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined(混合模式)
    LogFormat "%h %l %u %t \"%r\" %>s %b" common(普通模式)
    LogFormat "%{Referer}i -> %U" referer(只記錄客戶端訪問來源)
    LogFormat "%{User-agent}i" agent(只記錄瀏覽器類型)
    CustomLog logs/access_log combined
    Alias /icons/ "/var/www/icons/"   路徑別名,別名的路徑'/'和真實路徑的'/'一定需要保持一致

③Virtual Host 注意:②和③是無法同時生效的,有主服務器就不能有虛擬主機
基於IP
虛擬主機使用不同的IP地址,但是端口還是相同的
<VirtualHost 192.168.2.197:80>
ServerName song.com
DocumentRoot "/mnt/a/"
<Directory "/mnt/a/">
Options Indexes
</Directory>
</Virtualhost>
<VirtualHost 192.168.2.198:80>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
基於端口
虛擬主機使用相同的IP地址,但是端口不同的。缺點客戶端訪問時端口信息無從得知
<VirtualHost 192.168.2.197:80>
ServerName song.com
DocumentRoot "/mnt/a/"
<Directory "/mnt/a/">
Options Indexes
</Directory>
</Virtualhost>
<VirtualHost 192.168.2.197:8080>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
基於域名
ip和端口相同主機名稱不同,需要啓用http.conf文件中的VirtualHostname指令
<VirtualHost 192.168.2.198:80>
ServerName www.a.org
DocumentRoot "/mnt/b/"
<Directory "/mnt/b">
Options None
AllowOverride Authconfig
AuthType basic
AuthName a.org
AuthUserfile /etc/httpd/conf/htpasswd
Require valid-user
Order deny,allow
Deny from 192.168.2.205
</Directory>
Customlog /var/log/a.org/acess_log combined
</Virtualhost>
<VirtualHost 192.168.2.198:80>
ServerName www.b.org
DocumentRoot "/mnt/c/"
Customlog /var/log/b.org/access_log combined
</Virtualhost>
APACHE2.2需要啓用NameVirtualHost啓用此指令,2.4就不需要此指令
每一個虛擬主機需要配置的信息(使用虛擬主機需要停止中心主機,只需要註釋中心主機的DocumentRoot即可):
DocumentRoot /tmp/test/
ServerName:
ServerAlias:主機名稱別名
<Directory "/tmp/test/">
Option
AllowOverride
</Directory>
Alias 路徑別名
ErrorLog
CustomLog
<Location "/URL">
定義訪問URL資源的方法
</Location>
ScriptAlias 說明執行CGI腳本的目錄在哪裏

































































httpd -t:檢測httpd配置文件的語法是否正確
-l:查看已經加載的模塊
-D:Apache所支持的額外裝載的所有模塊
elinks:純文本界面下瀏覽網的工具
-dump:不進入交互式模式,顯示出網頁之後就退出了
-source:顯示網頁的源代碼
LoadRunner:測試工具
pv:page viwe 頁面訪問量
uv:user viwe 用戶訪問量







                     ssl配置還未學習                                           ________________來自馬哥課程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章