(httpd、php)

 

(一)http協議介紹php

http: 超文本傳輸協議,http協議是應用層協議,實現http協議的軟件都監聽的TCP的80端口之上。http協議也是一種文本協議,是基於TCP協議實現
http協議有幾個版本:http/1.0、http/1.1(使用最多)、http/2.0

  • http協議的工做方式
請求頭
請求體

響應頭
響應體
  • curl命令講解
curl命令:curl命令是一個利用URL規則在命令行下工做的文件傳輸工具。


curl命令格式
curl [選項] 請求的URL

經常使用選項
-I:其實就是向服務器端發送了一個HEAD的請求方法,只顯示響應報文首部信息

示例:
curl -I http://www.baidu.com
  • telnet命令模仿瀏覽器發送請求報文
[root@6 ~]# telnet 192.168.23.4 8000 
Trying 192.168.23.4...
Connected to 192.168.23.4.
Escape character is '^]'.
GET /index.html HTTP/1.1 # 輸入請求報文信息,兩行信息便可
Host: 192.168.23.4

HTTP/1.1 200 OK
Date: Mon, 21 Aug 2017 18:50:45 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Mon, 21 Aug 2017 18:44:22 GMT
ETag: "24aa-1e-55747de074076"
Accept-Ranges: bytes
Content-Length: 30
Connection: close
Content-Type: text/html; charset=UTF-8

<p>你好,我是尹歡一</p>
Connection closed by foreign host.
  • 一次完整http請求過程(必須掌握)
1)當用戶在瀏覽器輸入一個URL,且回車,會先進行DNS解析請求
2)客戶端拿到DNS解析請求返回的IP以後,去請對應的服務器站點的資源
3)服務器端判斷是否接受請求,若是接收請求,會對請求報文進行解析,分析請求報文的請求頭信息,分析請求頭的請求資源
4)服務器端對請求頭的請求資源進行解析以後,構建響應頭和響應體,組合爲響應報文
5)服務端發送響應報文給客戶端,服務端在本地記錄http對應的日誌信息
6)客戶端解析響應報文
  • 請求報文首部的基本格式
<請求方法> <請求的URL> <協議對應的版本信息>
頭部字段: (key : value)
<請求體>
  • http服務器程序類型
(1)httpd(Apache)
(2)nginx
(3)lighted
(4)IIS
(5)tomcat
(6)Tengine
...

(二)httpd介紹html

特性:模塊化,支持模塊動態裝卸載,支持MPM(多路處理模塊)

  • 什麼是多路處理模塊(MPM) 
    • httpd進程運行的模式
1)prefork
多進程模型,每一個進程響應一個請求
2)worker
多進程多線程模型,每一個線程處理一個用戶請求
3)event(最優)
事件驅動模型,多進程模型,每一個進程響應多個請求
  • httpd版本介紹
httpd 2.2(紅帽6)
httpd 2.4(紅帽7)

(三)httpd安裝nginx

httpd的安裝有RPM包安裝和源碼編譯安裝兩種方式

  • 紅帽6安裝httpd2.4 
    • (1)RPM包安裝
yum install -y httpd
    • (2)編譯安裝httpd-2.4.25.tar
說明: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



  • 紅帽7安裝httpd 
    • (1)RPM包安裝
yum install -y httpd
    • (2)編譯安裝httpd-2.4.25.tar
# 安裝包組
yum groupinstall -y "Development tools" "Server Platform Development"

# 安裝依賴開發包
yum install pcre-devel apr-devel apr-util-devel openssl-devel

# 解壓本地的httpd-2.4.25.tar
tar xf httpd-2.4.25.tar
cd httpd-2.4.25

# 配置安裝信息,生成make file, yum 安裝的RPM包通常都是在/usr目錄下
./configure --prefix=/usr/local/apache2.4 --sysconfdir=/etc/httpd2.4 --enable-so --enable-ssl --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --with-mpm=prefork

# 編譯安裝
make && make install

(四)httpd介紹web

基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本

  • httpd2.2軟件配置說明
配置文件: 
/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
  • httpd2.4軟件配置說明
配置文件
/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 #檢查下配置文件的語法是否錯誤
3)在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000


配置文件詳細介紹(超級重要必須掌握)

  • 1:設置監聽的端口(很重要)
在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000
  • 2:持久鏈接
因爲web服務的鏈接是:基於一個TCP的虛鏈接,http事務可重複執行屢次。例如咱們打開https://www.taobao.com,首先返回的是首頁的HTML骨架資源,再返回的是CSS級聯樣式表資源,最後返回的是JavaScript代碼資源。TCP鏈接創建後,每一個資源獲取完成後不全斷開鏈接,而是繼續等待其餘資源請求的進行

KeepAlive On 或 Off :設置TCP保持鏈接關閉或開啓
KeepAliveTimeout 15 :設置保持鏈接的超時時長
MaxKeepAliveRequests 100 : 設置最大保持鏈接數量
  • 3:MPM機制(多處理模塊機制)(很重要)
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>


  • 4:啓用或禁用模塊(DSO)(很重要)
LoadModule <模塊名> <模塊相對路徑>
例如:LoadModule auth_basic_module modules/mod_auth_basic.so
這裏的auth_basic_module是模塊名,modules/mod_auth_basic.so是模塊文件的路徑,若是模塊前面沒有路徑,表示啓用相關模塊
模塊的徹底路徑是:/etc/httpd/modules/*

  • 5:定義中心主機(重要)
指定DocumentRoot(這是中心主機的站點根目錄,中心主機的根站點目錄能夠更換)
例如:DocumentRoot "/var/www/html"
能夠修改成其餘的路徑:DocumentRoot "/app/www"
  • 6:站定訪問控制 
    • 基於兩種機制指明對哪些資源進行何種的訪問控制
1:基於文件系統路徑的訪問控制
<Directory "/var/www/html">
這樣的訪問控制代表,對於/var/www/html目錄下的全部的文件均有效
</Directory>

<File "某文件路徑">
這樣的訪問控制代表,對於某文件路徑有效
</File>

<FileMatch "模式匹配">
這樣的訪問控制代表,對於被模式匹配到的文件有效
</FileMatch>

2:基於URL的訪問控制
# 顯示httpd服務器的狀態信息,這樣的訪問控制代表,對於訪問http://ip:port/server-status都生效
<Location /server-status>
SetHandler server-status
Order deny,allow
#Deny from all
Allow from all
</Location>

# 顯示httpd軟件信息,這樣的訪問控制代表,LocationMatch中指定的URL的效用
<LocationMatch "URL">
......
</LocationMatch>

  • 7:Directory訪問控制中指令詳解
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主機訪問。

  • 8:定義站點的默認主頁面
DirectoryIndex index.html index.html.var
若是在站點根目錄沒有index.html,那麼直接在瀏覽器輸入域名就會返回Apache的首頁信息
  • 9:給路徑取別名
定義格式爲: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。

  • 10:設定默認字符集
AddDefaultCharset UTF-8
  • 11:設定日誌的保存級別日誌
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
比指定錯誤級別層次高的級別的錯誤日誌都會被記錄
  • 12:基於用戶的訪問認證安全機制
有兩種認證的安全機制:
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訪問控制機制
  • 15:httpd進程的屬主和屬組
指定以哪一個用戶的身份運行httpd服務的進程
User apache
Group apache

  • 16:mod_deflate模塊的使用方式
先不講,容易讓你們迷糊
  • 17:https:http協議調用OpenSSL提供的加密庫
先不講,https的概念須要先講OpenSSL和CA證書
  • 18: httpd包自帶的壓力測試的工具程序
ab命令
例如:ab -c 100 -n 1000 https://www.baidu.com/index.html
-n :總請求數
-c:模擬的併發數
-k:在持久鏈接下進行壓測
  • 19:httpd包自帶的工具程序
htpasswd:基於basic實現虛擬用戶的帳號和密碼驗證機制
apachectl:httpd自帶的服務器控制腳本,支持start和stop
rotatelogs:日誌切割工具,自動切割日誌
例如:日誌信息能夠根據當天的時間進行切割
20170824access_log
20170825access_log
20170826access_logab:Apache bench:壓力測試工具
相關文章
相關標籤/搜索