基于Apache實現(xiàn)linux平臺web服務(wù)實戰(zhàn)

1、Centos7系統(tǒng)下實現(xiàn)httpd-2.4的安裝,并分別實現(xiàn)prefork、worker、event等幾種工作方式。
編譯安裝

# yum  install -y httpd

程序環(huán)境配置文件

  • 主配置文件:/etc/httpd/conf/httpd.conf
    不想修改主配置文件,可通過新增/etc/httpd/conf.d/*.conf文件來完成配置
    symtemd的服務(wù)文件
  • /usr/lib/system/lsystemd/httpd.service
    主程序文件:
  • /usr/sbin/httpd httpd-2.4 支持的MPM的動態(tài)切換;
    日志文件:
  • /var/log/httpd;
  • access_log; 訪問日志
  • error_log; 錯誤日志
    站點文檔
  • /var/www/html ; 即幫助文件
    模塊文件路徑
  • /uar/lib64/httpd/modules

服務(wù)控制命令:

  • systemctl enable | disable httpd.service 是否自動啟動
  • systemctl { start | stop | restart | status } httpd.service 服務(wù)是否 開啟、停止、重啟、狀態(tài)

多處理模塊(MPM)

prefork:多進程模型,一個進程響應(yīng)一個請求;
worker:多進程多線程模型,一個線程響應(yīng)一個請求;
event:事件驅(qū)動模型,一個進程響應(yīng)n個請求;
分別啟用prefork、worker、event工作方式

默認開啟的狀態(tài)是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.

1、開啟prefork模式

[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf 
image.png

重啟服務(wù)并且檢查語法:


image.png

2、啟動event模式
將LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用,并開啟 LoadModulempm_event_modulemodules/mod_mpm_event.so,如圖

image.png

重啟服務(wù)并檢查語法:


image.png

3、啟動worker模式,方法類似

image.png

image.png

2、簡述request報文請求方法和狀態(tài)響應(yīng)碼

request報文請求方法:

  • GET:從服務(wù)器獲取一個資源
  • POST:向服務(wù)器發(fā)送要處理的數(shù)據(jù)
  • HEAD:只從服務(wù)器獲取文檔的響應(yīng)頭部
  • DELETE:請求刪除服務(wù)器的某個資源
  • PUT:把請求的主題存儲在服務(wù)器上
  • TRACE:追蹤請求過程中所經(jīng)過的代理服務(wù)器
  • OPTION:返回服務(wù)器對指定資源所支持使用的請求方法

狀態(tài)響應(yīng)碼

三位數(shù)字,如200,401,404,502等,標記請求處理當中發(fā)生的情況; 1xx:100-101,信息提示
2xx:200-206,成功
3xx:300-305,重定向
4xx:400-415,錯誤類信息,客戶端錯誤
5xx:500-505,錯誤類信息,服務(wù)端錯誤
常用狀態(tài)碼:
200:成功,請求的所有數(shù)據(jù)通過響應(yīng)報文的entity-body發(fā)送;OK
301:請求的URL指向的資源已經(jīng)被刪除;但在響應(yīng)報文中通過Location指明資源的新位置,Moved Permanently
302:與301類似,但在響應(yīng)報文通過Location指明的是資源所處的臨時新位置
304:客戶端發(fā)出了條件式請求,但服務(wù)器的資源未曾發(fā)生改變,則通過響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端;Not Modified
401:需要輸入賬號和密碼認證方能訪問資源
403:請求被禁止;Forbbiden
404:請求的資源不存在;Not Found
500:服務(wù)器內(nèi)部錯誤;Internal Server Error
502:代理服務(wù)器從后端服務(wù)器收到一條偽響應(yīng);Bad Gateway

3、詳細描述httpd虛擬主機、站點訪問控制、基于用戶的訪問控制、持久鏈接等應(yīng)用配置實例"

3.1虛擬主機

一個物理服務(wù)器可以服務(wù)于多個站點,每個站點可通過一個或者多個虛擬主機來實現(xiàn);http三種類型的虛擬主機:基于ip、基于port、基于FQDN。
定義虛擬主機的方法:

<VirtualHost "IP:PORT">
ServerName
SeverAlias
DocumentRoot
</VirtualHost>

注意:大多數(shù)可用于全局或‘main’ server中的指令,都可以定義在VirtualHost中;
實例1:基于IP

<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
<VirtualHost "192.168.1.110:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>

注意:要在本機上配置上述兩個地址,并能實現(xiàn)網(wǎng)絡(luò)通信
實例2:基于Port

<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>

Listen 10086
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>

注意:這里的所有端口都要被httpd監(jiān)聽
實例3:基于域名FQDN

<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>

Listen 10086
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>

注意:額外經(jīng)常用于每個虛擬主機的配置有

  • Errorlog
  • Customlog
  • <Directory>
  • <Location>
  • ServerAlias

3.2站點訪問控制

訪問控制機制:可以基于來源地址或者基于賬號進行控制;定義的方式有兩種:
文件系統(tǒng)路徑:

<Directory"/PATH/TO/SOMEDIR>
...
</Directory>

URL路徑:

<Location "URL">
 ...
</Location>

Directory中的訪問控制定義

(1)Options :定義訪問特性

Indexes:允許索引,指明的URL路徑不存在或沒有與主頁面資源相匹配的文件時,返回給用戶索引列表。
FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件。
None:禁止訪問
All:啟用除了MultiViews所有選項
定義格式:

允許索引,允許跟蹤符號鏈接文件

<Directory>
Options Indexes FollowSymLinks
</Directory>

禁止訪問設(shè)置

<Directory>
Options None
</Directory>

(2)基于來源地址訪問控制
order:檢查次序
Oder Allow Deny:只有明確allow的地址,才允許訪問,其他均為deny;
Allow from:允許訪問的所有地址
Deny from:拒絕訪問的來源地址
3.3基于用戶的訪問控制
生成用戶密碼文件:
使用htpasswd生成用戶密碼文件
格式為:htpasswd [-c][-m][-D]passwdfile username,分別生成tom,jerry,Obama用戶。


image.png

編輯/etc/httpd/conf.d/admin.conf,內(nèi)容如下:


image.png

編輯/etc/httpd/conf.d/.htgroup,寫入如下內(nèi)容
image.png

完成后,打開瀏覽器,輸入ip+admin即可完成基于組的認證,用戶認證省略定義組用戶,相對簡單,這里不做演示。

3.4持久鏈接相關(guān)配置

持久鏈接:鏈接建立后,每個資源獲取結(jié)束后不會斷開鏈接,而是繼續(xù)
等待其他資源請求并完成傳輸;但是總歸要斷開的,如何斷開呢?我們可以通過限制鏈接請求數(shù)量或者限制時間,超時即斷開鏈接。

劣勢:對并發(fā)訪問量較大的服務(wù)器,開持久會使有些請求得不到服務(wù);
改進:縮短時間,httpd-2.4支持毫秒級
非持久鏈接:每個資源都是單獨通過專用的鏈接獲取
持久鏈接相關(guān)參數(shù):
KeepAlive Off|On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

可以通過Telnet命令來進行持久鏈接測試:

telnet Sever 80

GET /URL HTTP/1.1
Host:Server
在超過15秒后沒用操作自動斷開鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容