(一)http協議介紹
php
http: 超文本傳輸協議,http協議是應用層協議,實現http協議的軟件都監聽的TCP的80端口之上。http協議也是一種文本協議,是基於TCP協議實現
http協議有幾個版本:http/1.0、http/1.1(使用最多)、http/2.0
請求頭
請求體
響應頭
響應體
curl命令:curl命令是一個利用URL規則在命令行下工做的文件傳輸工具。
curl命令格式
curl [選項] 請求的URL
經常使用選項
-I:其實就是向服務器端發送了一個HEAD的請求方法,只顯示響應報文首部信息
示例:
curl -I http://www.baidu.com
[root@6 ~]
(1)當用戶在瀏覽器輸入一個URL,且回車,會先進行DNS解析請求
(2)客戶端拿到DNS解析請求返回的IP以後,去請對應的服務器站點的資源
(3)服務器端判斷是否接受請求,若是接收請求,會對請求報文進行解析,分析請求報文的請求頭信息,分析請求頭的請求資源
(4)服務器端對請求頭的請求資源進行解析以後,構建響應頭和響應體,組合爲響應報文
(5)服務端發送響應報文給客戶端,服務端在本地記錄http對應的日誌信息
(6)客戶端解析響應報文
<請求方法> <請求的URL> <協議對應的版本信息>
頭部字段: (key : value)
<請求體>
(1)httpd(Apache)
(2)nginx
(3)lighted
(4)IIS
(5)tomcat
(6)Tengine
...
(二)httpd介紹
html
特性:模塊化,支持模塊動態裝卸載,支持MPM(多路處理模塊)
(1)prefork
多進程模型,每一個進程響應一個請求
(2)worker
多進程多線程模型,每一個線程處理一個用戶請求
(3)event(最優)
事件驅動模型,多進程模型,每一個進程響應多個請求
httpd 2.2(紅帽6)
httpd 2.4(紅帽7)
(三)httpd安裝
nginx
httpd的安裝有RPM包安裝和源碼編譯安裝兩種方式
yum install -y httpd
說明:httpd-2.4依賴apr-1.4以上版本 , 依賴apr-util-1.4以上版本, 所以先編譯安裝apr-1.5.二、apr-util-1.5.4
(0)yum gourpinstall -y "Development tools" "Server Platform Development"
yum install -y pcre-devel
(1)先將apr-1.5.二、apr-util-1.5.四、httpd-2.4下載到本地,解壓
(2)編譯安裝apr-1.5.2
cd apr-1.5.2
./configure --prefix=/usr/local/apr/
make && make install
(3)編譯安裝apr-util-1.5.4
cd ../apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
(4)編譯安裝httpd-2.4
cd ../httpd-2.4.25
./configure --prefix=/usr/local/apache-2.4 --sysconfdir=/etc/httpd-2.4 --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-mpm=prefork
make && make install
yum install -y httpd
(四)httpd介紹
web
基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本
配置文件:
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 主配置文件
服務腳本
/etc/rc.d/init.d/httpd
腳本配置文件:
/etc/sysconfig/httpd 腳本配置文件中定義了,httpd以哪一種MPM模式啓動
主程序文件
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日誌文件
/var/log/httpd:
access_log:訪問日誌
error_log:錯誤日誌
站點文檔
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
啓動程序和開機自啓
service {start|stop|restart|status|configtest|reload} httpd
chkconfig httpd on
配置文件
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 其餘配置文件
/etc/httpd/conf.modules.d/*.conf 模塊相關的配置文件
systemd 啓動腳本文件 (服務腳本)
/usr/lib/systemd/system/httpd.service
主程序
/usr/sbin/httpd
日誌文件(其中access_log:訪問日誌,error_log:錯誤日誌)
/var/log/httpd
中心主機站點根路徑
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
啓動程序和開機自啓
systemctl {start|stop|restart|status|reload} httpd.service
systemctl enable httpd.service
(五)httpd2.2詳解
apache
基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本
(1)主配置文件:/etc/httpd/conf/httpd.conf
全局配置:Section 1: Global Environment 第33行
中心主機配置: Section 2: ‘Main’ server configuration 第246行
虛擬主機配置:Section 3: Virtual Hosts 第986行
(2)每一次修改配置文件以後,可使用httpd -t檢查配置文件是否錯誤,通常若是沒有給ServerName值的話會報錯,那麼給一個IP做爲ServerName的值
httpd -t
配置文件詳細介紹
(超級重要必須掌握)
在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000
因爲web服務的鏈接是:基於一個TCP的虛鏈接,http事務可重複執行屢次。例如咱們打開https://www.taobao.com,首先返回的是首頁的HTML骨架資源,再返回的是CSS級聯樣式表資源,最後返回的是JavaScript代碼資源。TCP鏈接創建後,每一個資源獲取完成後不全斷開鏈接,而是繼續等待其餘資源請求的進行
KeepAlive On 或 Off :設置TCP保持鏈接關閉或開啓
KeepAliveTimeout 15 :設置保持鏈接的超時時長
MaxKeepAliveRequests 100 : 設置最大保持鏈接數量
httpd-2.2不支持同時編譯多個MPM模塊,因此只能編譯選定要使用的那個模塊,CentOS 6的rpm包爲此專門提供了三個程序文件,httpd(prefork),httpd.worker,httpd.event,分別用於實現對不一樣的MPM機制的支持。
當httpd啓動時候,可使用 ps aux | awk '/httpd$/{print $11}' 命令查看當前httpd是以哪種機制運行的,若是是/usr/sbin/httpd,那麼就是以prefork模式運行的,若是是/usr/sbin/httpd.worker,那麼就是以worker模式運行的,若是是/usr/sbin/httpd.event,那麼就是以event模式運行的。
使用 httpd -l 命令能夠查看編譯的核心模塊
使用 httpd -M 查看靜態編譯及動態編譯的模塊
在配置文件中能夠配置prefork模式和worker模式的屬性信息
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
LoadModule <模塊名> <模塊相對路徑>
例如:LoadModule auth_basic_module modules/mod_auth_basic.so
這裏的auth_basic_module是模塊名,modules/mod_auth_basic.so是模塊文件的路徑,若是模塊前面沒有路徑,表示啓用相關模塊
模塊的徹底路徑是:/etc/httpd/modules/*
指定DocumentRoot(這是中心主機的站點根目錄,中心主機的根站點目錄能夠更換)
例如:DocumentRoot "/var/www/html"
能夠修改成其餘的路徑:DocumentRoot "/app/www"
1:基於文件系統路徑的訪問控制
<Directory "/var/www/html">
這樣的訪問控制代表,對於/var/www/html目錄下的全部的文件均有效
</Directory>
<File "某文件路徑">
這樣的訪問控制代表,對於某文件路徑有效
</File>
<FileMatch "模式匹配">
這樣的訪問控制代表,對於被模式匹配到的文件有效
</FileMatch>
2:基於URL的訪問控制
# 顯示httpd服務器的狀態信息,這樣的訪問控制代表,對於訪問http:
1:Options:用於控制目錄中全部的資源被訪問的方式,後跟一個或多個以空白字符分割的選項列表
Indexes:若是輸入的網址對應服務器上的一個文件目錄,而此目錄中又沒有DirectoryIndex指令(例如:DirectoryIndex index.html index.http.var),那麼服務器會返回由mod_autoindex模塊生成的一個格式化後的目錄列表,可是若是訪問的是根路徑就返回Apache的首頁信息
FollowSymLinks:服務器容許在此目錄中使用符號鏈接。若是該配置選項位於<Location>配置段中,將會被忽略。
通常來講,在Options這一項設置爲 None。
2:AllowOverride:與訪問控制相關的哪些指令能夠放在.htaccess文件(每一個目錄下均可以有一個)中
ALL:全部指令均可以放進去
None:全部指令都不能夠放進去
3:order和allow、deny
Order:定義生效次序,寫在後面的表示默認法則
Allow from all:代表任意網段均可以訪問
Deny from all:代表任意網段都不能夠訪問
例如:
Allow from 192.168.23.0/24:表示只是容許192.168.23.0網段的主機訪問。
Allow from 192.168.23.24/32:表示只是容許192.168.23.24主機訪問。
DirectoryIndex index.html index.html.var
若是在站點根目錄沒有index.html,那麼直接在瀏覽器輸入域名就會返回Apache的首頁信息
定義格式爲:Alias /文件系統路徑/ "/別名路徑/"
舉個例子:
若是如今你的DocumentRoot "/app/www" : 那麼站點的根目錄就是/app/www
此時在瀏覽器訪問http://192.168.23.4/users/index.html,那麼在服務器的文件系統上訪問的文件爲/app/www/users/index.html。
那麼若是指定一個別名:Alias /users/ "/app/www/username/"
那麼此時,在瀏覽器訪問http://192.168.23.4/users/index.html,那麼在服務器的文件系統上訪問的文件爲/app/www/username/index.html。
AddDefaultCharset UTF-8
1:訪問日誌
(1)訪問日誌的四種格式定義以下:
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
%h:客戶端IP地址
%l:remote user,登入名,一般爲「-」號
%u:遠程用戶名,非登入時,爲-號
%t:服務器收到請求時的時間
%r:First line of request,表示請求報文的首行,首行記錄了:請求的方法,URL和http協議版本
%>s:響應的狀態碼
%b:不包含http首部的響應報文的大小,單位是字節
%{Referer}i:請求報文中首部「referer」的值,referer爲哪一個頁面的超連接跳轉至當前頁面的
%{User-Agent}i:請求報文中首部的「User-Agent」的值,User-Agent爲發出請求的命令程序
(2)指定訪問日誌保存在哪裏,選擇使用哪一種訪問日誌格式
CustomLog /logs/httpd/httpd_access_log combined
2:錯誤日誌
(1)指定錯誤日誌的路徑
ErrorLog /logs/httpd/httpd_error_log
(2)指定錯誤日誌的記錄級別
LogLevel warn
(3)錯誤級別的類型
log層級的取值有:debug, info, notice, warn, error, crit, alert, emerg
比指定錯誤級別層次高的級別的錯誤日誌都會被記錄
有兩種認證的安全機制:
basic:明文
digest:消息摘要認證
1:basic 認證
(1)在Location的訪問認證中設置
基於單個用戶進行認證
<Location /server-info>
SetHandler server-info
AuthType Basic
AuthName "請求輸入你的用戶名和密碼"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require user yhy
</Location>
若是讓/etc/httpd/conf/.htpasswd中的用戶均可以登入,須要修改最後一行指令
<Location /server-info>
SetHandler server-info
AuthType Basic
AuthName "請求輸入你的用戶名和密碼"
AuthUserFile "/etc/httpd/conf/.htpasswd"
# 修改下面這一行指令
Require valid-user
</Location>
(2)如何建立虛擬用戶文件
使用命令 htpasswd 進行建立
例如:htpasswd -m -c /etc/httpd/conf/.htpasswd yhy
htpasswd的選項說明:
-c:自動建立指定的用戶文件
-m:MD5格式化加密
-s:sha格式加密
-D:刪除指定用戶
(3)還能夠基於用戶組進行認證
基於組認證
<Location /server-info>
SetHandler server-info
AuthType Basic
AuthName "請求輸入你的用戶名和密碼"
AuthUserFile "/etc/httpd/conf/.htpasswd"
AuthGroupFile "/etc/httpd/conf/.htgroup"
Require group my_group
</Location>
建立用戶帳號
htpasswd -m -c /etc/httpd/conf/.htpasswd1 yhy1
htpasswd -m -c /etc/httpd/conf/.htpasswd2 yhy2
htpasswd -m -c /etc/httpd/conf/.htpasswd3 yhy3
最後分別將認證文件中的用戶名和密碼拷貝出來,寫在一個.htpasswd文件中,那麼這個文件就有多個用戶了
建立組帳號
建立/etc/httpd/conf/.htgroup文件,將建立的用戶添加到組裏面
my_group: yhy1 yhy2 yhy3
13:虛擬主機的建立詳解
- 網卡取別名:ifconfig eth0:0 192.168.23.10/24
(一)虛擬主機的分類:
1:IP相同,但端口不一樣
2:IP不一樣,但端口均爲默認端口
3:FQDN不一樣(在請求報文首部有一個Host:www.baidu.com,在解析請求報文的時候,能夠從這裏知道請求了哪一個虛擬機)
(二)三種不一樣的實現方案
1:基於IP:爲每個虛擬主機配置一個IP地址,編輯/etc/httpd/conf.d/virtual_machine.conf文件,添加以下配置
<VirtualHost 192.168.6.205:80>
ServerName www.taobao.com
DocumentRoot "/app/www/taobao"
</VirtualHost>
<VirtualHost 192.168.6.209:80>
ServerName www.tianmao.com
DocumentRoot "/app/www/tianmao"
</VirtualHost>
<VirtualHost 192.168.6.210:80>
ServerName www.jd.com
DocumentRoot "/app/www/jd"
</VirtualHost>
訪問的時候經過主機名訪問
2:基於PORT:爲每個虛擬主機配置一個獨立的PORT
# 注意這裏使用到的端口須要提早聲明
Listen 800
Listen 8000
<VirtualHost 192.168.6.205:80>
ServerName www.taobao.com
DocumentRoot "/app/www/taobao"
</VirtualHost>
<VirtualHost 192.168.6.209:800>
ServerName www.tianmao.com
DocumentRoot "/app/www/tianmao"
</VirtualHost>
<VirtualHost 192.168.6.210:8000>
ServerName www.jd.com
DocumentRoot "/app/www/jd"
</VirtualHost>
3:基於FQDN:爲每個虛擬主機配置一個獨立的FQDN(虛擬主機不要與中心主機混用,若是要使用虛擬主機,要禁用中心主機。禁用中心主機的方法:註釋中心主機的DocumentRoot指令便可 )
# 注意:這裏的NameVirtualHost表示全部的虛擬主機監聽在同一個IP和端口上,根據不一樣的FQDN來識別訪問了哪一個虛擬主機
NameVirtualHost 192.168.6.205:80
<VirtualHost 192.168.6.205:80>
ServerName www.taobao.com
DocumentRoot "/app/www/taobao"
</VirtualHost>
<VirtualHost 192.168.6.205:80>
ServerName www.tianmao.com
DocumentRoot "/app/www/tianmao"
</VirtualHost>
<VirtualHost 192.168.6.205:80>
ServerName www.jd.com
DocumentRoot "/app/www/jd"
</VirtualHost>
(三)虛擬主機配置方式
<VirtualHost *:80>
DocumentRoot /app/www
ServerName www.yhyblog.cn
# 除了以上兩個指令,在虛擬主機中還能夠有如下幾個指令
ServerAlias :虛擬主機的別名,可屢次使用
ErrorLog:自定義虛擬主機的錯誤日誌
CustomLog:自定義虛擬主機的訪問日誌
<Directory "/app/www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
示例配置以下:
<VirtualHost *:80>
DocumentRoot /app/www
ServerName www.uplooking.com
ServerAlias www.yhyblog.cn
ErrorLog /logs/uplooking_error_log
CustomLog /logs/uplooking_access_log combined
<Directory "/app/www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
(四):每個虛擬主機裏面均可以指定錯誤路徑鏈接和訪問日誌路徑,和Directory訪問控制機制
指定以哪一個用戶的身份運行httpd服務的進程
User apache
Group apache
先不講,容易讓你們迷糊
17:https:http協議調用OpenSSL提供的加密庫
先不講,https的概念須要先講OpenSSL和CA證書
ab命令
例如:ab -c 100 -n 1000 https://www.baidu.com/index.html
-n :總請求數
-c:模擬的併發數
-k:在持久鏈接下進行壓測
htpasswd:基於basic實現虛擬用戶的帳號和密碼驗證機制
apachectl:httpd自帶的服務器控制腳本,支持start和stop
rotatelogs:日誌切割工具,自動切割日誌
例如:日誌信息能夠根據當天的時間進行切割
20170824access_log
20170825access_log
20170826access_logab:Apache bench:壓力測試工具