web服務 初步

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連接:三次握手

客戶端請求,服務端響應請求,客戶端確認 web服務   初步

6、tcp斷開:四次斷開

客戶端請求斷開,服務器響應斷開,服務器請求斷開,客戶端響應斷開 web服務   初步

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}

web服務   初步

常用配置

常用配置大致先說一下:(所有的配置修改完后,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模型,要想配置其他模型,將注釋去掉配置即可:

web服務   初步

配置內容如下:

StartServers 8
    設置服務器啟動時的守護進程數
MinSpareServers 5
    設置如果有低于該值的空閑子進程,就創建一個新的子進程準備為客戶提供服務
MaxSpareServers 20
    設置如果有高于該值的空閑子進程,就刪除子進程來提高系統性能服務
ServerLimit 256
    設置服務器允許連接的最大同時連接數
MaxClients 256
    設置同一時間內客戶端的最大連接數
MaxRequestsPerChild 4000
    設置限制每個子進程在結束處理請求之前提出的連接請求數量

4、DOS,不想用的注釋掉,想用的啟用(LoadModule)

web服務   初步

web服務   初步

5、定義‘Main’ Server的文檔頁面路徑,你要編寫中心主機的文檔,可以放在這個下面,中心主機是對應一個站點,虛擬主機可以對應多個站點。 ———————————DocumentRoot "/var/www/html"

6、站點訪問控制常見機制,就是設置哪些條件下可以訪問,有兩種機制,如下:

web服務   初步

web服務   初步

注意: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”的值;即發出請求的應用程序;

web服務   初步

11、基于用戶的訪問控制,與6做比較。IP地址控制訪問,很簡陋,容易有漏洞,別人偽裝ip地址。

現在Document 指定的區域創建一個目錄/var/www/html/admin

web服務   初步

創建賬號密碼文件

htpasswd -c -m /etc/httpd/conf/.htpasswd tom
    -c是第一次創建,不存在,則使用,存在就不用,會被覆蓋

htpasswd  -m /etc/httpd/conf/.htpasswd jerry

web服務   初步

這里我輸入了上面創建的tom

web服務   初步

同樣也可以要求某一個組的用戶進行訪問。 <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

web服務   初步

b、創建目錄

mkdir -pv /www/{a.com,b.net,c.org}/hdtocs

web服務   初步

c、編輯主配置文件

web服務   初步

web服務   初步

結果是這樣子

web服務   初步


(2)基于端口

注意:Listen 8080

web服務   初步

測試結果如下

web服務   初步

(3)基于FQDN

注意:NameVirtualHost :192.168.1.119:80

web服務   初步

在windows上或者虛擬機上改hosts文件

web服務   初步

結果如下

web服務   初步

原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/63103

(0)
N24_yeziN24_yezi
上一篇 2016-12-09 18:03
下一篇 2016-12-09 22:24

相關推薦

  • Linux入門之文本處理三劍客之grep

    Linux入門之文本處理三劍客之grep  文本處理工具:  grep,sed(流編輯器),awk    grep簡述及特點 簡介:全局搜索正則表達式出來的行并打印 (Global search REgular expression and Print out  the line),一種按照特定模式(patt…

    Linux干貨 2016-08-07
  • shell三劍客之grep

    正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。 給定一個正則表達式和另一個字符串,我們可以達到如下的目的: 1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”); 2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分。 正…

    Linux干貨 2016-08-08
  • 第四周

    查看鏈接:http://note.youdao.com/noteshare?id=317ec635a5f28f2681421fd7c9a60f27

    Linux干貨 2016-09-19
  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 who |cut -d ' ' -f1 |sort|uniq 2、取出最后登錄到當前系統的用戶的相關信息 last|head -1 3、取出當前系統上被用戶當作其默認shell的最…

    Linux干貨 2016-12-26
  • 文本查看、處理工具的應用及組、用戶的相關操作

            一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可      查看已經登錄的用戶用“who”命令,為了試驗我用root多登錄了幾次。    &nb…

    2017-07-16
  • grub文件文件修復

    首先我們先破壞一下grub文件 這里我們先查看一下電腦是哪塊硬盤啟動的 這里我們就直接破壞硬盤的二進制數據,以達到grub的破壞。 要記住我們只能破壞前446字節,也就是bootloader。后面64字節是分區表。 我們可以查看一下前512字節的二進制文件 hexdump -C -n 512 /dev/sda 先破壞/boot/grub/stage1的前44…

    2017-07-28

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-14 14:19

    tcp連接與tcp的斷開可以使用文字來進行描述一下的。

欧美性久久久久