Web Service初步
一、引言
Web服務也是一個C/S架構,服務器端就是一個進程,客戶端是一個瀏覽器。我們打開瀏覽器的時候,都會看到hppt,https的字樣,然后才是輸入網址,這兩個協議是web服務的應用層協議,用來實現某些具體應用的。像https,前面學習openssl的時候也接觸過,https=http+ssl。
web的傳輸層協議用到了tcp協議,監聽在80端口上。
dns的傳輸層協議用到了53/tcp(傳輸使用),53/udp(解析使用)
二、知識點
1、web
Web是一種超文本信息系統,主要實現方式是超文本鏈接,它使得文本不在像一本書一樣是固定的、線性的,而是可以從一個位置跳轉到另外一個位置。
2、http協議
http叫hyper text transfer protocol,超文本傳輸協議,提供了訪問超文本信息的功能,是web瀏覽器和web服務器之間的應用層通信協議。web使用http協議傳輸各種超文本頁面和數據。
3、html(超文本標記語言)
html可以供不同的計算機讀取。html對web網頁的內容、格式及web網頁中的超級鏈接進行描述,而web瀏覽器的作用就在于讀取web網站上的html文檔。
4、web、http、html的關系。
web使用http協議傳輸超文本html頁面和數據。
5、tcp連接:三次握手
客戶端請求,服務端響應請求,客戶端確認
6、tcp斷開:四次斷開
客戶端請求斷開,服務器響應斷開,服務器請求斷開,客戶端響應斷開
7、socket連接
建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket 。簡稱C/S架構
套接字之間的連接過程分為三個步驟:服務器監聽—->客戶端請求—->連接確認。
8、一次完整的http請求處理過程
(1) 建立或處理連接:接收請求或拒絕請求;
(2) 接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程;
(3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;
(4) 訪問資源:獲取請求報文中請求的資源;
(5) 構建響應報文:
(6) 發送響應報文:
(7) 記錄日志:
9、接受請求的模型
并發訪問響應模型: 單進程 I/O 模型:啟動一個進程處理用戶請求;這意味著,一次只能處理一個請求,多個請求被串行響應; 多進程 I/O 結構:并行啟動多個進程,每個進程響應一個請求; 復用的 I/O 結構:一個進程響應 n 個請求; 多線程模式:一個進程生成 n 個線程,一個線程處理一個請求; 事件驅動(event-driven):一個進程直接 n 個請求; 復用的多進程 I/O 結構:啟動多個(m)個進程,每個進程生成(n)個線程; 響應的請求的數量:m*n
10、web資源:
靜態資源:客戶端請求直接發給你,服務端不用做處理的:jpg,png,gif,html,txt等
動態資源:服務端需要通過執行程序處理的:php,jsp
一個頁面會有多個資源,每個資源都要單獨請求
11、http與tcp的聯系
http是利用傳輸層協議tpc來建立連接的,每個資源的請求都要經過3次握手,4次斷開才能實現。每個資源斷開,后面的才能用。但是有些人不斷開怎么辦呢?這就要用到后面的配置文件了,在keep-alive上配置長連接還是短鏈接,長連接有多長,下面來看看配置文件。
三、基礎配置文件
1、http特性
高度模塊化:core+modules
DSO:動態共享(dynamic shared object),httpd -M,查看裝載模塊
MPM:多路處理模塊
prefork:多進程模型,一個進程響應一個請求 一個主進程:負責生成子進程及回收子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理; n 個子進程:每個子進程處理一個請求; 工作模型:會預先生成幾個空閑進程,隨時等待用于響應用戶請求;最大空閑和最小空閑; worker:多進程多線程模型,每個線程處理一個請求 一個主進程:負責生成子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理; 多個子進程:每個子進程負責生成多個線程;每個線程:負責響應用戶請求; 并發響應數量:m*n m:子進程數量 n:每個子進程所能創建的最大線程數量; event:事件驅動模型,多進程模型,每個進程響應多個請求 一個主進程 :負責生成子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理; 子進程:基于事件驅動機制直接響應多個請求; httpd-2.2: 仍為測試使用模型; httpd-2.4:event 可生產環境中使用;
2、配置文件(以http-2.2為例,centos6上面)
一、主配置文件:/etc/httpd/conf/httpd.conf
配置之前先備份一份:cp -v httpd.conf{,.backup}
常用配置
常用配置大致先說一下:(所有的配置修改完后,httpd -t檢查,然后restart或reload)
1、修改監聽的IP 和 Port 端口 /Listen 2、定義長連接,短鏈接 /KeepAlive 3、MPM 4、DOS 5、定義‘Main’ Server的文檔頁面路徑 DocumentRoot "/var/www/html" 6、站點訪問控制常見機制 7、定義站點主頁面 /DirectoryIndex 8、定義路徑別名 /Alias 9、設定默認字符集 /AddDefaultCharset 10、日志設定 11、基于用戶的訪問控制 12、虛擬主機 13、status 頁面
大致的記得有如上幾個功能,下面挑一些比較重要與難理解的進行總結。其余的自行讀閱英語文檔,都好理解。
3、MPM:
前面也已經介紹過了,MPM是多路處理模塊,包含三種類型
prefork:多進程模型,每個進程響應一個請求 worker:多進程多線程模型,每個線程處理一個請求 event:事件驅動模型,多進程模型,一個驅動可以響應多個請求。
現在,http-2.2版本沒法同時編譯這三個不同類型的模塊,所以要選擇使用哪一個模塊進行請求處理。這時候就要用到主配置文件進行配置。其配置文件是在:
/etc/sysconfig/httpd
默認是prefork模型,要想配置其他模型,將注釋去掉配置即可:
配置內容如下:
StartServers 8 設置服務器啟動時的守護進程數 MinSpareServers 5 設置如果有低于該值的空閑子進程,就創建一個新的子進程準備為客戶提供服務 MaxSpareServers 20 設置如果有高于該值的空閑子進程,就刪除子進程來提高系統性能服務 ServerLimit 256 設置服務器允許連接的最大同時連接數 MaxClients 256 設置同一時間內客戶端的最大連接數 MaxRequestsPerChild 4000 設置限制每個子進程在結束處理請求之前提出的連接請求數量
4、DOS,不想用的注釋掉,想用的啟用(LoadModule)
5、定義‘Main’ Server的文檔頁面路徑,你要編寫中心主機的文檔,可以放在這個下面,中心主機是對應一個站點,虛擬主機可以對應多個站點。 ———————————DocumentRoot "/var/www/html"
6、站點訪問控制常見機制,就是設置哪些條件下可以訪問,有兩種機制,如下:
注意:Indexes,默認啟用,很危險,主動關掉。allow deny做白名單,deny allow 做黑名單。
8、定義路徑別名,這個挺有用。
格式: Alias /URL/ "/PATH/TO/SOMEDIR/" DocumentRoot "/www/htdocs" 主戰點存放路徑,網頁存放在這里面有效,其他都無效。 http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm 這個文件對應的網站存放在什么地方。 /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm Alias /download/ "/rpms/pub/"即為以download的起始文件都來自于/rpms/pub/路徑下。 http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm /rpms/pub/bash-4.4.2-3.el6.x86_64.rpm http://www.magedu.com/images/logo.png /www/htdocs/images/logo.png
10、日志設定
日志類型:訪問日志 和 錯誤日志 錯誤日志: ErrorLog logs/error_log LogLevel warn Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 訪問日志: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog logs/access_log combined LogFormat format strings: http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats %h:客戶端 IP 地址; %l:Remote User, 通常為一個減號(“-”); %u:Remote user (from auth; may be bogus if return status (%s) is 401);非為登錄訪問時,其為一個減號; %t:服務器收到請求時的時間; %r:First line of request,即表示請求報文的首行;記錄了此次請求的 “方法”,“URL”以及協議版本; %>s:響應狀態碼; %b:響應報文的大小,單位是字節;不包括響應報文的 http 首部; %{Referer}i:請求報文中首部“referer”的值;即從哪個頁面中的超鏈接跳轉至當前頁面的; %{User-Agent}i:請求報文中首部“User-Agent”的值;即發出請求的應用程序;
11、基于用戶的訪問控制,與6做比較。IP地址控制訪問,很簡陋,容易有漏洞,別人偽裝ip地址。
現在Document 指定的區域創建一個目錄/var/www/html/admin
創建賬號密碼文件
htpasswd -c -m /etc/httpd/conf/.htpasswd tom -c是第一次創建,不存在,則使用,存在就不用,會被覆蓋 htpasswd -m /etc/httpd/conf/.htpasswd jerry
這里我輸入了上面創建的tom
同樣也可以要求某一個組的用戶進行訪問。 <Directory ""> …… Require group grpname1 grpname2 … ……
創建用戶賬號和組賬號文件; vim /etc/httpd/conf/.htgroup 自定義一行文件 組文件:每一行定義一個組 GRP_NAME: username1 username2 ...
12、虛擬主機(很重要)
中心主機只能為一個站點提供服務,即為你虛擬機的ip地址。要想為多個站點提供服務,應該怎么辦呢,就用到虛擬主機。切記,虛擬主機跟中心主機不能混用,如果想要使用虛擬主機就將中心主機給注釋掉DocumentRoot。下面有三種方式來實現
基于ip:ip很貴 基于端口:端口均為默認端口80 基于FQDN(域名):域名不同
(1)基于ip
a、注冊需要的ip地址
ifconfig eth0:0 192.168.1.120/24 ifconfig eth0:1 192.168.1.121/24
b、創建目錄
mkdir -pv /www/{a.com,b.net,c.org}/hdtocs
c、編輯主配置文件
結果是這樣子
(2)基于端口
注意:Listen 8080
測試結果如下
(3)基于FQDN
注意:NameVirtualHost :192.168.1.119:80
在windows上或者虛擬機上改hosts文件
結果如下
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/63103
tcp連接與tcp的斷開可以使用文字來進行描述一下的。