Linux---web-service---http

一、http介紹

web服務是一種應用層的服務,是一種超文本標記語言。HTML是一種純文本的文本信息,通過所謂的標籤來規範所要顯示的內容格式,在客戶端通過瀏覽器可以對HTML及多媒體資源進行解析,然後呈現在各個終端上。HTML的格式如下:

<html>
        <head>
             <title>title</title>
        </head>
        <body>
            <h1>內容</h1>
            <h2>內容</h2>
        </body>
</html>

http協議是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。

二、http的請求處理過程

1、建立連接:接收或拒絕連接請求

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

    Web訪問響應模型(Web I/O)

        (1)單進程I/O模型:啓動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應

        (2)多進程I/O模型:並行啓動多個進程,每個進程響應一個連接請求

        (3)複用I/O結構:啓動一個進程,同時響應N個連接請求

            實現方法:多線程模型和事件驅動

                多線程模型:一個進程生成N個線程,每線程響應一個連接請求

                事件驅動:一個進程處理N個請求

        (4)複用的多進程I/O模型:啓動M個進程,每個進程響應N個連接請求,同時接收M*N個請求

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

    元數據:請求報文首部,格式如下:

    <method> <URL> <VERSION>

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

    資源放置於本地文件系統特定的路徑:DocRoot

        DocRoot /var/www/html

    web服務器資源路徑映射方式:

        (a) docroot

        (b) alias

        (c) 虛擬主機docroot

        (d) 用戶家目錄docroot

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

的話,還包括響應主體。

(1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:

    描述了響應主體MIME類型的Content-Type首部

    描述了響應主體長度的Content-Length實際報文的主體內容

(2)URL重定向:web服務構建的響應並非客戶端請求的資源,而是資源另外一個訪問路徑

    永久重定向:http://www.360buy.com

    臨時重定向:http://www.taobao.com

(3)MIME類型:

Web服務器要負責確定響應主體的MIME類型。多種配置服務器的方法可將MIME類型與資源管理起來

    魔法分類:Apache web服務器可以掃描每個資源的內容,並將其與一個已知模式表(被稱爲魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較

慢,但很方便,尤其是文件沒有標準擴展名時。

     顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型。

     類型協商: 有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式

(及相關的MIME類型)"最好"。

6、發送響應報文

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

向客戶端回送響應數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之後,關閉自己這一端的連

接。對持久連接來說,連接可能仍保持打開狀態,在這種情況下,服務器要正確地計算ContentLength首部,不然客戶端就無法知道響應什麼時候結束了。

7、記錄日誌

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

三、http的功能特性

1、虛擬主機:基於IP、Port、FQDN的虛擬主機

2、CGI:Common Gateway Interface,通用網關接口

3、反向代理

4、負載均衡

5、路徑別名

6、豐富的用戶認證機制,如basic和digest

7、支持第三方模塊

四、http的配置文件

配置文件:

    主配置文件:/etc/httpd/conf/httpd.conf

    分段配置文件:/etc/httpd/conf.d/*.conf

服務腳本:

    /etc/rc.d/init.d/httpd

腳本配置文件:

    /etc/sysconfig/httpd

站點網頁文檔根目錄:

    /var/www/html

模塊文件路徑:

    /etc/httpd/modules

    /usr/lib64/httpd/modules

主程序文件:

    /usr/sbin/httpd(prefork)

    /usr/sbin/httpd.worker(worker)

    /usr/sbin/httpd.event(event)

主進程文件:

    /etc/httpd/run/httpd.pid

日誌文件目錄:

    /var/log/httpd

    access_log: 訪問日誌

    error_log:錯誤日誌

幫助文檔包:

    httpd-manual

五、實驗

實驗1:在centos7安裝rpm包的httpd並測試

1、使用yum安裝httpd

yum -y install httpd

KMGM~$C$EW1JKI]{G4)LC@E.png

2、啓動httpd

systemctl start httpd

KJYEWDEIF3QS`FV)7)]QMZP.png

3、編輯主頁文件並使用 curl 測試

vim /var/www/html/index.html
<html>
    <head>
        <title>Hello MuMu</title>
    </head>
    <body>
        <h1>Welcome to mumu.com</h1>
    </body>
</html>
curl http://172.18.254.192/

P]DZ%R9E2IH6S4WU7BRAZYK.png

注:測試前一定要關閉防火牆和selinux,否則會出現以下錯誤。

T9MIZ[PZ6CF}J0MSZ(YW8Z1.png

實驗2:實現基於ip的訪問控制

實現白名單

1、編輯配置文件

vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    <RequireAll>
    Require all granted
    Require not ip 172.18.254.191
    </RequireAll>
</Directory>

%UBQ$5M~DE~IS3HDFN8{1F0.png

注:把/etc/httpd/conf/httpd.conf文件中<Directory "/var/www/html">以下這一行註釋掉,這句話意思是允許所有訪問。

~6DS}(JLZ{9{5_7~RDD}KWR.png

2、測試

FS}7Y30`MWNBC700}7J8XJW.png

注:別忘了把/etc/httpd/conf.d目錄下的welcome.conf修改名字,否則會顯示如下內容,不顯示403錯誤。修改完成後,重啓服務。

OJ_9T~W`@~MSFBPXN0IP3@W.png

BV%BF%E{N(RZSPG93OU(YM9.png

實現黑名單

1、編輯配置文件

vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    <RequireAny>
    Require ip 172.18.254.191
    </RequireAny>
</Directory>

CA4)(PKH%7XW1JS1UT617JQ.png

2、檢查語法是否有錯誤,並重啓服務

httpd -t
systemctl restart httpd

)UVLTMQ@$A4O)OJ2CYSC1XX.png

3、本機IP測試

curl http://172.18.254.192/

R6`F2_%QRQ%Q`P(AYO_19HP.png

4、測試機ip測試


實驗3:基於用戶的訪問控制

質詢:(WWW-Authenticate)服務器用401狀態拒絕客戶端請求,說明需要用戶提供用戶名和密碼,彈出對話框。

認證:(Authorization)客戶端用戶填入賬號和密碼後再次發請求至服務器;認證通過,則請求授權。

http 協議支持的認證方式:basic 基本認證和digest 摘要認證。

basic 認證機制的實現

(1)定義安全域

vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/admin">             
        AllowOverride none                                     .htaccess 文件無效        
        AuthType Basic                                             http協議認證機制
        AuthName "Please login"                            用戶登錄標題內容
        AuthUserfile "/etc/httpd/conf/.htpasswd"   用戶存放目錄位置
        Require user mumu wuwu
</Directory>

`@%`}~MEGQG_@TNK1TX6@~9.png

創建測試文件和路徑

6V2S(0H`5RC(@3N`ZG))Q7C.png

創建用戶文件

3O)FTI%Y}J(8`[T4M$N@$_I.png

使用火狐進行測試

TNS%]`M4YV6W[G47ZV@73$A.png

使用谷歌進行測試

K%OEIJY3QNC1[FDTD~O%JZU.png

C(Y{L)_F~YONG4B0OI{JLII.png

Require valid-user:所有位於AuthUserFile文件中定義的用戶都允許登錄;

Require user1 user2 user3 ...:僅允許user1,user2 等出現AuthUserFile文件中定義的特定幾個用戶登錄,這些用戶爲虛擬用戶,即非系統用戶。

(2)提供用戶的賬號文件

htpasswd 命令用於維護此文件

htpasswd [-c] [-m] [-D] passwdfile username

    -c:添加第一用戶時創建此文件;

    -m:以md5格式加密用戶密碼存放;

    -s:以sha格式加密用戶密碼存放;

    -D:刪除指定用戶

htpasswd -b -c -m /etc/httpd/conf/.htpasswd mumu centos
htpasswd -b -m /etc/httpd/conf/.htpasswd wuwu centos

1%$W%KHWLE7TF0704CZMG@I.png

(3)組認證

<Directory "/var/www/html/admin">
        Options indexes                 只允許index認證訪問
        AllowOverride none           允許對應的配置網頁路徑訪問
        AuthType Basic                   認證類型是basic
        AuthName "Please login"   認證名稱:Please login
        AuthUserfile "/etc/httpd/conf/.htpasswd"           保存用戶密碼文件路徑
        AuthGroupfile "/etc/httpd/conf/.htgroup"          保存組文件路徑
        Require group mumuzhijia                                    允許組mumuzhijia認證訪問
</Directory>

DK_EHM6W1OAVQUI7_GIG%CK.png

創建組文件

組文件:每行定義一個組,格式

Grp_Name:User1 User2 ...

VULIT3O99EY6G9EV5TB`W]I.png

測試

19V60A]Y]S[W~LP2W}K1BTV.png

`HL8YC310%HTAL_5XRFW1L6.png

一個物理器可以服務於多個站點,每個站點可通過一個或多個虛擬主機來實現。

httpd 三種類型的虛擬主機:基於IP、基於port、基於域名(fqdn)。

注:開啓虛擬主機需要首先關閉 'Main' server 即中心主機,方法:註釋 DocumentRoot 指令即可。

定義虛擬主機的方法:

虛擬主機的配置方法:

<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path"
</VirtualHost>

實驗4:基於端口的訪問控制

vim /etc/httpd/conf.d/vhost.conf 
Listen 8080
Listen 9090
<VirtualHost *:8080>                          允許訪問本機的所有8080端口
    DocumentRoot "/app/website1"      網頁位置
    <Directory "/app/website1">          授權目錄下的內容
    Require all granted
    </Directory>                                     封裝            定義
</VirtualHost>
<VirtualHost *:9090>
    DocumentRoot "/app/website2"
    <Directory "/app/website2">
    Require all granted
    </Directory>    
</VirtualHost>

創建測試文件

T{P4R`K_K]Q5674GA39_~WD.png

使用httpd -M 是否有一下內容:

TWJQ]`2KVJ4~{P95UXOQTJB.png

測試

[B7EDJRCBR%@`{(MF1U$J85.png

X7R{C6C2_UZ$TW~YNMCG}8J.png

實驗5:基於ip地址訪問

添加IP地址

編輯配置文件

vim /etc/httpd/conf.d/vhost.conf
<VirtualHost 172.18.254.193:80>
        DocumentRoot "/app/website1"
        <Directory "/app/website1">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost 172.18.254.194:80>
        DocumentRoot "/app/website2"
        <Directory "/app/website2">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>

添加IP地址

ifconfig ens34:0 192.168.153.17/24
ifconfig ens34:1 192.168.153.27/24

Q4S6H(SKH)Z}XXF51POMV68.png

檢查語法是否有錯誤,並重啓服務

測試

JE]}IQ2{NRMRE6XDTEU2N7J.png

W$Z~6UL)DDCGI2C)0GW$[NK.png

實驗6:基於port的訪問控制

vim /etc/httpd/conf.d/vhost.conf 
listen 8080
listen 9090
<VirtualHost *:8080>
        DocumentRoot "/app/website1"
        <Directory "/app/website1">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost *:9090>
        DocumentRoot "/app/website2"
        <Directory "/app/website2">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>


測試

IY{{SRG6QC([8AHB@`}XW2W.png

TX2U~{4~WKPACU75E$AU(MK.png

注:httpd要監聽這裏指明的所有端口

實驗7:混用IP和port的訪問控制

vim /etc/httpd/conf.d/vhost.conf

<VirtualHost 172.18.254.195:80>

        DocumentRoot "/app/website1"

        <Directory "/app/website1">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost 172.18.254.196:80>
        DocumentRoot "/app/website2"
        <Directory "/app/website2">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>

測試


實驗8:基於域名的訪問

vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
        ServerName www.mumu.com
        DocumentRoot "/app/website1"
        CustomLog "logs/www.mumu.com_access_log" combined
       <Directory "/app/website1">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>
<VirtualHost 172.18.254.196:80>
        ServerName bbs.mumu.com
        DocumentRoot "/app/website2"
        CustomLog "logs/bbs.mumu.com_access_log" combined
        <Directory "/app/website2">
        Options None
        AllowOverride None
        Require all granted
        </Directory>
</VirtualHost>

修改

Z~A{K81J@{PGQTAUJM%PN10.png

修改Windows的hosts文件

4W6S29MN~WM)3Q3XRQM}~PP.png

測試

L(GZYL]1E{R5((UAGMKNK~7.png

F~XDA$YJPLSU9BNBX3$6HXV.png

注:任意目錄下的頁面只有顯式授權才能被訪問

實驗9:實現https

1、安裝mod_ssl

yum -y install mod_ssl

$]LDKX)F)}NZASY17K}1X%7.png

2、創建證書所需的文件

cd /etc/pki/CA
touch index.txt
echo 00 > serial

7GI1%)Z214{}8]D8E9E@60C.png

3、生成私鑰,私鑰的文件名與存放位置都要和配置文件的設置相匹配

(umask 066;openssl genrsa -out private/cakey.pem 4096)

FOTP1O%ZUW{S)WSU7O(Q$U2.png

4、生成對應的公鑰

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

)3UQD@_RPL7]{}()O7TQD@4.png

注:如果不相同,則根CA無法完成對其簽名

5、創建所需的目錄

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

R$Y~Y`]CDXZ68K%BNJTAKTO.png

6、生成httpd的私鑰

(umask 066;openssl genrsa -out httpd.key 1024)

Z{%@4I}M$Z3G%W$UI%I}`4D.png

7、生成httpd公鑰

openssl req -new -key httpd.key -out httpd.csr

PX9OZTO18(V)@_RK7V_26(I.png

_F3`WLMI5Y_[0M9P3TC6`NJ.png

8、簽名httpd公鑰,期限設一年

openssl ca -in httpd.csr -out httpd.crt -days 365

NZ[~E5QGNA~T4S@Y)G2LGFH.png

注:之後選擇yes或no的直接yes回車

9、複製CA到指定目錄

cp /etc/pki/CA/cacert.pem .

T]OOA%U~QF9`3WG$$WOJ~8W.png

10、編輯CA配置文件

vim /etc/httpd/conf.d/ssl.conf 
  SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
  SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem

5CCIOTWFEL%AXJ)5UO5P_KP.png

11、配置httpd配置文件

vim /etc/httpd/conf.d/vhost.conf
  <VirtualHost *:443>
    ServerName  www.mumu.com
    DocumentRoot "/app/website1"
    CustomLog "logs/www.mumu.com_access_log" combined
    <Directory "/app/website1">
    Require all granted
    </Directory>
  </VirtualHost>

I}~I~NJ{N$NNKPCLPXN32DH.png

12、測試



實驗:基於lamp搭建WordPress blog

1、安裝

yum -y install httpd php mariadb-server php-mysql

2V_DWW$8({[H%[8BN`_~3A0.png

2、關閉防火牆和selinux

systemctl stop firewalld
setenforce 0

)E_F$Q6]`W_6IV7_L}U8)FE.png

3、編輯httpd配置文件

vim /etc/httpd/conf.d/vhost.conf
  <VirtualHost *:80>
    ServerName  blog.mumu.com
    DocumentRoot "/app/blog/htdocs"
    CustomLog "logs/blog.mumu.com_access_log" combined
    <Directory "/app/blog/htdocs">
    Require all granted
    </Directory>   
  </VirtualHost>

92HI4Z))_EV]7]F8L3A(I@M.png

4、啓動httpd服務

systemctl restart httpd

}PD0MD`R9DF$(GP@F`$IF0Y.png

5、編輯/etc/my.cnf文件

vim /etc/my.cnf
[mysqld]
……skip_name_resolve

9A)ZFNLP4E[EI)VKW_$~R(5.png

6、啓動mariadb服務

systemctl restart mariadb
mkdir -pv /app/blog

)I`NB~7{H0N1@O6XJ~ZUU@Y.png

7、解壓並創建軟鏈接

tar xvf wordpress-4.9.4-zh_CN.tar.gz -C /app/blog/
mv wordpress wordpress-4.9.4
ln -sv wordpress-4.9.4 htdocs

OC]JM{PI_$ZJJSS_{7@W$MX.png

8、添加特殊權限

cd /app/blog/
setfacl -m u:apache:rwx htdocs/

3$BWQJ[0V{D3W((0)`1WQQM.png

9、在數據庫創建wpdb數據庫,並給予所有權限

MariaDB [(none)]> create database wpdb;
MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'192.168.153.%' identified by 'wppass';

@Q8@B0{LFNF`10V%N(FF)IR.png

[N33A[%]%BE]$_297)2]V5P.png

10、編輯windows的hosts

win+r  打開運行:notepad C:\Windows\System32\drivers\etc\hosts
    172.18.254.192 www.mumu.com bbs.mumu.com blog.mumu.com

$HEWCU1SV(NI(_QVVDA16Q0.png

11、編輯Linux的hosts                                                                                             

vim /etc/hosts
    172.18.254.192 www.mumu.com bbs.mumu.com blog.mumu.com

7E90GAIAGDEV4~YIQG)7EWS.png
12、在瀏覽器輸入域名blog.mumu.com開始安裝。

1

KW6CVM6ASU]H[RSTXMFB[UQ.png

2

SPLERAA}P(KQR82[8`(E@{J.png

3

N`{1P[%V}WWP)41%BOZ)]{O.png

I5XX%WVQDWF6LQV}8FB@D6C.png

4

{M$IAFY)0LITR(KP`CVGXBV.png

5

I4I~$DYZOZY]CJ7)XQ]E%3P.png

登錄成功之後,WordPress blog搭建成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章