0.網(wǎng)站頁(yè)面訪(fǎng)問(wèn):
a.網(wǎng)站頁(yè)面訪(fǎng)問(wèn)流程:
01.客戶(hù)端 瀏覽器輸入網(wǎng)址信息點(diǎn)擊回車(chē)
02.客戶(hù)端 完成域名的解析過(guò)程(DNS)嫁佳、
03.客戶(hù)端 直接訪(fǎng)問(wèn)相應(yīng)網(wǎng)站服務(wù)器 建立TCP三次握手過(guò)程
04.客戶(hù)端 訪(fǎng)問(wèn)網(wǎng)站服務(wù)器 發(fā)送HTTP請(qǐng)求報(bào)文
05.服務(wù)端 響應(yīng)客戶(hù)端請(qǐng)求 回復(fù)HTTP響應(yīng)報(bào)文
06.客戶(hù)端 瀏覽器看到網(wǎng)站頁(yè)面
07.客戶(hù)端 結(jié)束訪(fǎng)問(wèn)網(wǎng)站過(guò)程 完成TCP四次揮手過(guò)程
b.HTTP協(xié)議請(qǐng)求和響應(yīng)過(guò)程
01.HTTP請(qǐng)求報(bào)文
1) 請(qǐng)求行
請(qǐng)求方法: get --讀/看 --獲取/拿過(guò)來(lái)
post --寫(xiě)/提交
請(qǐng)求信息: index.html(首頁(yè)文件)
請(qǐng)求協(xié)議: http1.1 1.0短連接 1.1長(zhǎng)連接 2.0 長(zhǎng)TCP連接
2)請(qǐng)求頭:
請(qǐng)求主機(jī)信息
3)空行
4)請(qǐng)求主體
使用get方法時(shí)院领,沒(méi)有請(qǐng)求主體信息
使用POST方法時(shí)梳杏,具有請(qǐng)求主體內(nèi)容
02.HTTP響應(yīng)報(bào)文
1)起始行
***** 狀態(tài)碼信息 訪(fǎng)問(wèn)請(qǐng)求是成功響應(yīng)/失敗響應(yīng)
1XX:信息狀態(tài)碼
狀態(tài)碼 含義 描述
100 繼續(xù) 初始的請(qǐng)求已經(jīng)接受侯养,請(qǐng)客戶(hù)端繼續(xù)發(fā)送剩余部分
101 切換協(xié)議 請(qǐng)求這要求服務(wù)器切換協(xié)議拍鲤,服務(wù)器已確定切換
2XX:成功狀態(tài)碼
狀態(tài)碼 含義 描述
200 成功 服務(wù)器已成功處理了請(qǐng)求
201 已創(chuàng)建 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
202 已接受 服務(wù)器已接受請(qǐng)求,但尚未處理
203 非授權(quán)信息 服務(wù)器已成功處理請(qǐng)求忍疾,但返回的信息可能來(lái)自另一個(gè)來(lái)源
204 無(wú)內(nèi)容 服務(wù)器成功處理了請(qǐng)求闯传,但沒(méi)有返回任何內(nèi)容
205 重置內(nèi)容 服務(wù)器處理成功,用戶(hù)終端應(yīng)重置文檔視圖
206 部分內(nèi)容 服務(wù)器成功處理了部分GET請(qǐng)求
3XX:重定向狀態(tài)碼
狀態(tài)碼 含義 描述
300 多種選擇 針對(duì)請(qǐng)求卤妒,服務(wù)器可執(zhí)行多種操作
****301 永久移動(dòng) 請(qǐng)求的頁(yè)面已永久跳轉(zhuǎn)到新的url
****302 臨時(shí)移動(dòng) 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求甥绿,但請(qǐng)求仍繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
303 查看其他位置 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的GET請(qǐng)求來(lái)檢索響應(yīng)時(shí),服務(wù)器返回此代碼
304 未修改 自從上次請(qǐng)求后则披,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)
305 使用代理 請(qǐng)求者只能使用代理訪(fǎng)問(wèn)請(qǐng)求的網(wǎng)頁(yè)
307 臨時(shí)重定向 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求共缕,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
4XX:客戶(hù)端錯(cuò)誤狀態(tài)碼
狀態(tài)碼 含義 描述
400 錯(cuò)誤請(qǐng)求 服務(wù)器不理解請(qǐng)求的語(yǔ)法
****401 未授權(quán) 請(qǐng)求要求用戶(hù)的身份演驗(yàn)證
****403 禁止 服務(wù)器拒絕請(qǐng)求
****404 未找到 服務(wù)器找不到請(qǐng)求的頁(yè)面
405 方法禁用 禁用請(qǐng)求中指定的方法
406 不接受 無(wú)法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的頁(yè)面
407 需要代理授權(quán) 請(qǐng)求需要代理的身份認(rèn)證
408 請(qǐng)求超時(shí) 服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)
409 沖突 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突
410 已刪除 客戶(hù)端請(qǐng)求的資源已經(jīng)不存在
411 需要有效長(zhǎng)度 服務(wù)器不接受不含有效長(zhǎng)度表頭字段的請(qǐng)求
412 未滿(mǎn)足前提條件 服務(wù)器未滿(mǎn)足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件
413 請(qǐng)求實(shí)體過(guò)大 由于請(qǐng)求實(shí)體過(guò)大,服務(wù)器無(wú)法處理士复,因此拒絕請(qǐng)求
414 請(qǐng)求url過(guò)長(zhǎng) 請(qǐng)求的url過(guò)長(zhǎng)图谷,服務(wù)器無(wú)法處理
415 不支持格式 服務(wù)器無(wú)法處理請(qǐng)求中附帶媒體格式
416 范圍無(wú)效 客戶(hù)端請(qǐng)求的范圍無(wú)效
417 未滿(mǎn)足期望 服務(wù)器無(wú)法滿(mǎn)足請(qǐng)求表頭字段要求
5XX:服務(wù)端錯(cuò)誤狀態(tài)碼
狀態(tài)碼 含義 描述
500 服務(wù)器錯(cuò)誤 服務(wù)器內(nèi)部錯(cuò)誤翩活,無(wú)法完成請(qǐng)求
501 尚未實(shí)施 服務(wù)器不具備完成請(qǐng)求的功能
****502 錯(cuò)誤網(wǎng)關(guān) 服務(wù)器作為網(wǎng)關(guān)或代理出現(xiàn)錯(cuò)誤
503 服務(wù)不可用 服務(wù)器目前無(wú)法使用
504 網(wǎng)關(guān)超時(shí) 網(wǎng)關(guān)或代理服務(wù)器,未及時(shí)獲取請(qǐng)求
505 不支持版本 服務(wù)器不支持請(qǐng)求中使用的HTTP協(xié)議版本
2)響應(yīng)頭部
3)空行
4)響應(yīng)主體
03.HTTP協(xié)議資源信息:
a.URL:uniform resource location 統(tǒng)一資源定位
URI:uniform resource Identifier 統(tǒng)一資源標(biāo)識(shí)符
docs.ansible.com / ansible/latest/user_guide/playbooks.html
URL URI
b.網(wǎng)站頁(yè)面靜態(tài)資源: 要什么給什么
特點(diǎn): 01.網(wǎng)頁(yè)內(nèi)容固定不變的便贵,容易被搜索引擎搜索到
02.網(wǎng)頁(yè)沒(méi)有數(shù)據(jù)庫(kù)支持,所以在網(wǎng)站制作和維護(hù)方面工作量大
當(dāng)網(wǎng)站信息量大時(shí)菠镇,完全依靠靜態(tài)網(wǎng)頁(yè)比較困難
03.網(wǎng)頁(yè)的交互性較差,在程序的功能實(shí)現(xiàn)方面有較大的限制
04.當(dāng)客戶(hù)端向服務(wù)端請(qǐng)求數(shù)據(jù)時(shí)承璃,服務(wù)器直接從磁盤(pán)文件系統(tǒng)上返回?cái)?shù)據(jù)(不做任何解析)
c.網(wǎng)站頁(yè)面動(dòng)態(tài)資源: 要什么信息利耍,需要進(jìn)行查詢(xún)數(shù)據(jù)庫(kù)進(jìn)行解析后發(fā)送給客戶(hù)端
特點(diǎn): 01.采用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的網(wǎng)站可以實(shí)現(xiàn)更多的功能,如用戶(hù)注冊(cè)盔粹,登錄隘梨,在線(xiàn)調(diào)查,投票舷嗡,用戶(hù)管理轴猎,訂單處理,發(fā)博文等
02.動(dòng)態(tài)資源頁(yè)面會(huì)出現(xiàn)“进萄?” “&”不便于被搜索引擎收錄
03.接收到用戶(hù)請(qǐng)求捻脖,需要讓動(dòng)態(tài)服務(wù)和數(shù)據(jù)庫(kù)服務(wù)進(jìn)行處理
d.偽靜態(tài)資源:
特點(diǎn): 1.可以便于搜索引擎進(jìn)行收錄
2.有數(shù)據(jù)庫(kù)服務(wù)支持,實(shí)現(xiàn)網(wǎng)頁(yè)交互功能
04.網(wǎng)站好壞指標(biāo):
a. IP:根據(jù)用戶(hù)IP地址數(shù)量進(jìn)行統(tǒng)計(jì) 300-400萬(wàn) 一個(gè)星期
局域網(wǎng)多個(gè)用戶(hù)訪(fǎng)問(wèn): 網(wǎng)站服務(wù)器只記錄一個(gè)IP訪(fǎng)問(wèn)垮斯,NAT技術(shù)
b. PV:頁(yè)面訪(fǎng)問(wèn)量 700-800萬(wàn) 一個(gè)星期
c. UV: 記錄獨(dú)立訪(fǎng)客數(shù)量
cookie: 標(biāo)識(shí)用戶(hù)身份信息郎仆,會(huì)保存在用戶(hù)客戶(hù)端本地 內(nèi)存中
session: 記錄用戶(hù)的一些會(huì)話(huà)操作, eg: 記錄用戶(hù)登錄信息 記錄在服務(wù)端 內(nèi)存中
d.網(wǎng)站的并發(fā): 網(wǎng)站服務(wù)器在單位時(shí)間內(nèi)能夠處理的最大連接數(shù)
1.nginx服務(wù)軟件的特點(diǎn):
a.支持高并發(fā)兜蠕,消耗內(nèi)存資源少
b.具有多種功能:
01.網(wǎng)站web服務(wù)功能 --- apache
02.網(wǎng)站負(fù)載均衡功能 --- LVS
03.網(wǎng)站緩存服務(wù) --- squid
c.在多種系統(tǒng)平臺(tái)都可以進(jìn)行部署
d.nginx實(shí)現(xiàn)網(wǎng)絡(luò)通訊時(shí)使用的是異步網(wǎng)絡(luò)IO模型: epoll模型(apache --select
01.epoll模型:
宿舍管理員: 找人,查看人員登記信息
幼兒園阿姨: 小朋友上WC抛寝,都站在教室的某個(gè)位置
性能:隨著連接數(shù)的增加熊杨,性能基本上不會(huì)下降,連接數(shù)無(wú)限制
02.select模型:
宿舍管理員:找人盗舰,一個(gè)一個(gè)屋子去問(wèn)晶府,--線(xiàn)性輪詢(xún)
幼兒園阿姨:小朋友上WC,一個(gè)一個(gè)小朋友去詢(xún)問(wèn)
性能:隨著連接數(shù)的增加急劇下降钻趋,處理成千上成并發(fā)連接數(shù)川陆,性能很差,連接數(shù)不超過(guò)1024
2.nginx的安裝(兩種安裝方式)
01.yum安裝軟件:
a.使用官方y(tǒng)um源安裝蛮位, 安裝的是最新版本较沪,軟件目錄結(jié)構(gòu)比較標(biāo)準(zhǔn)(推薦)
b.使用非官方y(tǒng)um源進(jìn)行安裝 安裝的不是最新版 目錄結(jié)構(gòu)會(huì)發(fā)生變化
02.編譯安裝軟件
a.wget http://nginx.org/download/nginx-1.16.0.tar.gz
PS:解決軟件的依賴(lài) openssl-devel pcre-devel
b.解壓下載好的軟件,并進(jìn)入到軟件目錄中
c.編譯安裝三步曲
01. ./configure --prefix= --user=USER
--prefix=PATH --set installation prefix 指定程序安裝路徑
--user=USER --set non-priivleged user for worker processes 設(shè)置一個(gè)虛擬用戶(hù)管理worker進(jìn)程(安全)
--group=GROUP --set non-priivleged group for worker processes 設(shè)置一個(gè)虛擬用戶(hù)組管理worker進(jìn)程(安全)
02.進(jìn)行軟件的編譯過(guò)程:
make 編譯
03.編譯安裝過(guò)程
make install
03.YUM官方源安裝方法:
a.更新nginx官方源
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
b. yum安裝nginx軟件
yum install -y nginx
c.啟動(dòng)nginx服務(wù)失仁,檢查服務(wù)是否安裝正確
systemctl start nginx
systemctl enable nginx
04.nginx軟件目錄結(jié)構(gòu)
a./etc/logrotate.d/nginx --用于日志輪詢(xún)切割
root@nginx logrotate.d]# vim /etc/logrotate.conf
rotate log files weekly
weekly ---定義默認(rèn)日志切割的周期
keep 4 weeks worth of backlogs
rotate 4 ---定義只保留幾個(gè)切割后的文件
create new (empty) log files after rotating old ones
create ---創(chuàng)建出一個(gè)相同的源文件
use date as a suffix of the rotated file
dateext 時(shí)間擴(kuò)展名稱(chēng) ---定義角標(biāo)(擴(kuò)展名稱(chēng)信息)
uncomment this if you want your log files compressed
compress ---是否對(duì)切割后的文件進(jìn)行壓縮處理
RPM packages drop log rotation information into this directory
include /etc/logrotate.d ---加載包含/etc/logrotate.d/目錄中的文件配置
no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { ---單獨(dú)對(duì)某個(gè)文件進(jìn)行切割配置
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
system-specific logs may be also be configured here.
b./etc/nginx/nginx.conf --nginx主配置文件
/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/
c./etc/nginx/mime.types --http協(xié)議的content-type與擴(kuò)展名
d./etc/nginx/fastcgi_params --cgi,fastcgi,uwcgi配置文件
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
e./etc/nginx/koi-utf --nginx編碼轉(zhuǎn)換映射文件
/etc/nginx/koi-win
/etc/nginx/win-utf
f./etc/sysconfig/nginx --nginx服務(wù)守護(hù)進(jìn)程管理文件
/etc/sysconfig/nginx-debug
g./etc/nginx/modules
/usr/lib64/nginx
/user/lib64/nginx/modules --nginx模塊目錄
h./usr/share/nginx --nginx默認(rèn)站點(diǎn)目錄
i./var/log/nginx --nginx日志目錄信息
05.nginx服務(wù)配置文件
/etc/nginx/nginx.conf ---主配置文件
/etc/nginx/nginx.d/default ---擴(kuò)展配置(虛擬主機(jī)配置文件)
[root@mysql ~]# vim /etc/nginx/nginx.conf
第一部分:配置文件主區(qū)域配置
user nginx; ---定義worker進(jìn)程管理的用戶(hù)
PS: master process: 主進(jìn)程 ---管理服務(wù)是否能夠正常運(yùn)行 BOSS
worker process: 工作進(jìn)程 ---處理用戶(hù)的訪(fǎng)問(wèn)請(qǐng)求 員工
worker_processes 1; ---定義有幾個(gè)worker進(jìn)程的 ==cpu核數(shù) 最多cpu核數(shù)2倍
error_log /var/log/nginx/error.log warn; ---定義錯(cuò)誤日志
pid /var/run/nginx.pid; ---定義pid文件路徑
第二部分:配置文件事件區(qū)域
events {
worker_connections 1024; ---一個(gè)worker進(jìn)程可以同時(shí)接收1024個(gè)請(qǐng)求(可調(diào)整)
}
第三部分:配置http區(qū)域
http {
include /etc/nginx/mime.types; ---加載配置文件
default_type application/octet-stream; ---指定默認(rèn)識(shí)別文件類(lèi)型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
---指定日志路徑
access_log /var/log/nginx/access.log main; ---指定日志路徑
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; ---超時(shí)時(shí)間
#gzip on;
include /etc/nginx/conf.d/*.conf; ---加載一個(gè)配置文件
}
第四部分:
[root@mysql conf.d]# cat default.conf
server {
listen 80; ---指定監(jiān)聽(tīng)的端口
server_name localhost; ---指定網(wǎng)站域名
location / {
root /usr/share/nginx/html; ---定義站點(diǎn)目錄的位置
index index.html index.htm; ---定義首頁(yè)文件
}
error_page 500 502 503 504 /50x.html; ---優(yōu)雅顯示頁(yè)面
location = /50x.html {
root /usr/share/nginx/html;
}
}
3.nginx服務(wù)的企業(yè)應(yīng)用
01.利用nginx服務(wù)搭建一個(gè)網(wǎng)站(www)
1)編寫(xiě)虛擬主機(jī)配置文件
cd /etc/nginx/conf.d/
[root@mysql conf.d]# vim www.conf
server {
listen 80;
server_name www.lin.com;
location /lin {
root /usr/share/nginx/html;
index lin.html;
}
}
2)需要開(kāi)發(fā)編寫(xiě)的網(wǎng)站代碼
<html>
<meta charset="utf-8">
<head>
<title>你是最牛的</title>
</head>
<body>
我們是最強(qiáng)的尸曼,我們是最努力的
<table border=1>
<tr> <td>01</td> <td> </td> </tr>
<tr> <td>02</td> <td> </td> </tr>
<tr> <td>03</td> <td> </td> </tr>
</table>
<a >
<img src="lin.jpg" />
</a>
</body>
</html>
3)重啟nignx服務(wù)(平滑重啟) ---兩種方法,不要混合用萄焦,用一種控轿,混合容易出問(wèn)題
a.systemctl reload nginx
b.nginx -s reload
c.nginx命令參數(shù) -t 檢查測(cè)試配置文件語(yǔ)法
4)編寫(xiě)DNS配置信息
真實(shí)域名: 在阿里云上進(jìn)行DNS解析記錄配置
模擬域名: 在windows主機(jī)的hosts文件中進(jìn)行配置就行 C:\Windows\System32\drivers\etc\hosts
5)進(jìn)行測(cè)試訪(fǎng)問(wèn): www.lin.com
6)部署搭建網(wǎng)站常見(jiàn)錯(cuò)誤:
1)網(wǎng)站服務(wù)配置文件編寫(xiě)不正確
404 錯(cuò)誤
解決方法-:修改nginx配置文件--- location
解決方法二: 在站點(diǎn)目錄中創(chuàng)建相應(yīng)目錄或文件數(shù)據(jù)信息
403 錯(cuò)誤
解決方法一: 不要禁止訪(fǎng)問(wèn)
解決方法二: 因?yàn)闆](méi)有首頁(yè)文件
2)DNS信息配置不正確
3)nginx配置文件修改一定要重啟服務(wù);
站點(diǎn)目錄中代碼文件信息調(diào)整,不需要重啟服務(wù)
02.利用nignx服務(wù)搭建一個(gè)多網(wǎng)站(www bbs blog)
第一個(gè)歷程:創(chuàng)建多個(gè)虛擬主機(jī)配置文件
[root@mysql conf.d]# cat www.conf bbs.conf blog.conf
server {
listen 80;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
server {
listen 80;
server_name bbs.lin.com;
location / {
root /html/bbs;
index index.html;
}
}
server {
listen 80;
server_name blog.lin.com;
location / {
root /html/blog;
index index.html;
}
}
第二個(gè)歷程:創(chuàng)建站點(diǎn)目錄和目錄中首頁(yè)文件
[root@mysql conf.d]# for name in {www,bbs,blog};do echo "192.168.3.18 name/index.html ; done
[root@mysql conf.d]# for name in {www,bbs,blog};do cat /html/$name/index.html; done
重啟服務(wù) systemctl reload nginx
第三個(gè)歷程:編寫(xiě)hosts解析文件
192.168.3.18 www.lin.com bbs.lin.com blog.lin.com
第四個(gè)歷程:進(jìn)行測(cè)試訪(fǎng)問(wèn)
curl www.lin.com
curl bbs.lin.com
curl blog.lin.com
03.企業(yè)中虛擬主機(jī)訪(fǎng)問(wèn)方式
a.基于域名的方式進(jìn)行訪(fǎng)問(wèn)
b.基于地址的方式進(jìn)行訪(fǎng)問(wèn):(只能用指定地址訪(fǎng)問(wèn))
原因:當(dāng)一個(gè)主機(jī)多個(gè)IP時(shí)茬射,要綁定一個(gè)IP鹦蠕,不然多個(gè)IP都能訪(fǎng)問(wèn)
方法: 在listen綁定監(jiān)聽(tīng)I(yíng)P,一定要restart不能用reload重啟
server {
listen 192.168.3.18:80; --在監(jiān)聽(tīng)地址這綁定IP地址
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
[root@mysql nginx]# netstat -tlnup|grep 80
tcp 0 0 192.168.3.18:80 0.0.0.0:* LISTEN 20431/nginx: master
一個(gè)主機(jī)有多個(gè)網(wǎng)站時(shí)(比如BBS,www,BLOG)在conf配置文件要配置上
include /etc/nginx/conf.d/www.conf; --按第一個(gè)順序在抛,如果輸入192.168.3.18就顯示的是www.lin.com
include /etc/nginx/conf.d/*.conf; --如果沒(méi)寫(xiě)上一個(gè)片部,只有這個(gè),就會(huì)是BBS.lin.com按的是字母的順序
PS:服務(wù)配置文件中涉及到地址修改霜定,必須重啟nginx服務(wù)restart档悠,不能平滑重啟reload不行
c.基于端口的方式進(jìn)行訪(fǎng)問(wèn)(多個(gè)占用80比如zabbix要用到apache80)
server {
listen 8080;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
d.網(wǎng)站頁(yè)面訪(fǎng)問(wèn)原理
01.將域名進(jìn)行解析 www.lin.com
02.建立TCP的連接(四層協(xié)議)
192.168.3.18 目標(biāo)端口 80
03.根據(jù)應(yīng)用層HTTP協(xié)議發(fā)出請(qǐng)求
請(qǐng)求報(bào)文:hosts: www.lin.com
04.沒(méi)有相同域名的server主機(jī),會(huì)找滿(mǎn)足端口要求的第一個(gè)主機(jī)
www 8080 bbs 80 blog 80
www.lin.com --顯示的是bbs.lin.com 因?yàn)榻馕龀?92.168.3.18 www端口不對(duì)望浩,就找BBS
bbs.lin.com:8080 --顯示的是www.lin.com 也是先解析,端口8080要找www
4.企業(yè)中網(wǎng)站的安全訪(fǎng)問(wèn)配置
a.根據(jù)用戶(hù)訪(fǎng)問(wèn)的地址進(jìn)行控制
192.168.3.18 www.lin.com/video/ 可以訪(fǎng)問(wèn) 內(nèi)網(wǎng)
10.0.0.18 www.lin.com/video/ 不可訪(fǎng)問(wèn) 外網(wǎng)
nginx訪(fǎng)問(wèn)模塊: ngx_http_access_module
舉例配置:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
指令用法:
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
第一個(gè)歷程:編寫(xiě)配置文件
server {
listen 192.168.3.18:80;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
location /video { --每個(gè)loaction都是一個(gè)局部配置辖所,所以要寫(xiě)上站點(diǎn)目錄,不然是默認(rèn)的
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
}
}
PS: location外面的信息磨德,全局配置信息
location里面的信息缘回,局部配置信息
b.根據(jù)用戶(hù)訪(fǎng)問(wèn)進(jìn)行認(rèn)證
nginx認(rèn)證模塊Module ngx_http_auth_basic_module
舉例配置:
location / {
auth_basic "closed site"; --開(kāi)啟認(rèn)證功能 "closed site"引號(hào)內(nèi)容可自己寫(xiě),就是個(gè)說(shuō)明
auth_basic_user_file conf/htpasswd; ---加載用戶(hù)密碼文件
}
第一個(gè)歷程:編寫(xiě)虛擬主機(jī)配置文件
[root@mysql www]# vim /etc/nginx/conf.d/www.conf
server {
listen 192.168.3.18:80;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
auth_basic "請(qǐng)輸入密碼:";
auth_basic_user_file conf/htpasswd;
}
location /video {
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
}
}
第二個(gè)歷程:創(chuàng)建密碼文件(文件中密碼信息必須是密文的)
htpasswd 創(chuàng)建一個(gè)有密文信息的密碼文件
[root@mysql www]# rpm -qf `which htpasswd`
httpd-tools-2.4.6-89.el7.centos.x86_64
htpasswd命令參數(shù)說(shuō)明
-c Create a new file. *****
創(chuàng)建一個(gè)密碼文件
-n Don't update file; display results on stdout.
不會(huì)更新文件典挑,顯示文件內(nèi)容信息
-b Use the password from the command line rather than prompting for it.*****
免交互方式輸入用戶(hù)密碼信息
-i Read password from stdin without verification (for script usage).
讀取密碼采用標(biāo)準(zhǔn)輸入方式酥宴,并不做檢查
-m Force MD5 encryption of the password (default).
-B Force bcrypt encryption of the password (very secure).
-C Set the computing time used for the bcrypt algorithm
(higher is more secure but slower, default: 5, valid: 4 to 31).
-d Force CRYPT encryption of the password (8 chars max, insecure).
-s Force SHA encryption of the password (insecure).
-p Do not encrypt the password (plaintext, insecure).
-D Delete the specified user.
-v Verify password for the specified user.
修改密碼文件權(quán)限:
[root@mysql password]# chmod 600 htpasswd
[root@mysql password]# chown nginx.nginx htpasswd
500 internal server error
01.內(nèi)部程序代碼編寫(xiě)有問(wèn)題
02.程序服務(wù)中文件權(quán)限不正確
5.nginx的企業(yè)實(shí)踐應(yīng)用
1)利用nginx服務(wù)搭建網(wǎng)站文件共享服務(wù)器
第一個(gè)步驟:編寫(xiě)配置文件(www.conf)
nginx模塊功能: ngx_http_autoindex_module
nginx語(yǔ)法:Syntax: autoindex on | off;
Default: autoindex off; ---默認(rèn)是關(guān)的,要用on來(lái)打開(kāi)
Context: http, server, location
配置文件設(shè)置:server {
listen 192.168.3.18:80;
server_name www.lin.com;
location /video {
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
auth_basic "請(qǐng)輸入密碼:";
auth_basic_user_file password/htpasswd;
autoindex on; ---主要把這個(gè)設(shè)置打開(kāi)您觉,開(kāi)啟nginx站點(diǎn)目錄索引功能
}
}
PS:1.要把首頁(yè)文件進(jìn)行刪除拙寡,或改個(gè)名字,不然是首先加載首頁(yè)文件琳水。
2.mime媒體資源類(lèi)型文件作用:
[root@mysql nginx]# vim /etc/nginx/mime.types
types {
text/html html htm shtml;
text/css css;
text/xml
a.文件中有的擴(kuò)展名信息資源肆糕,進(jìn)行訪(fǎng)問(wèn)時(shí)直接看到數(shù)據(jù)
b.文件中沒(méi)有的擴(kuò)展名信息資源,進(jìn)行訪(fǎng)問(wèn)時(shí)會(huì)直接下載資源
3.重啟服務(wù)
4.瀏覽器訪(fǎng)問(wèn)時(shí)的樣子:
Index of /video/
../
centos6.9/ 17-Feb-2020 11:26 -
centos7.0/ 17-Feb-2020 11:26 -
centos7.5/ 17-Feb-2020 11:26 -
lin.html 17-Feb-2020 07:01 26
5.網(wǎng)站頁(yè)面目錄數(shù)據(jù)在孝,中文出現(xiàn)亂碼诚啃,解決方法:
nginx模塊功能:ngx_http_charset_module
nginx語(yǔ)法:Syntax: charset charset | off;
Default: charset off;
Context: http, server, location, if in location
配置文件修改:server {
listen 192.168.3.18:80;
server_name www.lin.com;
location /video {
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
auth_basic "請(qǐng)輸入密碼:";
auth_basic_user_file password/htpasswd;
charset utf-8; ---主要是增加這個(gè)charset,修改目錄結(jié)構(gòu)中的中文亂碼問(wèn)題
autoindex on;
}
}
6.利用nginx服務(wù)搭建配置文件別名功能
第一個(gè)歷程:編寫(xiě)配置文件
server_name www.lin.com l.com;
第二個(gè)歷程:配置好解析信息
作用: 01.編寫(xiě)網(wǎng)站訪(fǎng)問(wèn)測(cè)試
02.定位要訪(fǎng)問(wèn)的網(wǎng)站服務(wù)器
PS:定位是因?yàn)槎鄠€(gè)nginx時(shí),都是同樣的網(wǎng)址不好定位私沮,用別名好定位
7.利用nginx狀態(tài)模塊功能對(duì)網(wǎng)站進(jìn)行監(jiān)控
狀態(tài)模塊:ngx_http_stub_status_module
nginx語(yǔ)法:Syntax: stub_status;
Default: —
Context: server, location
1. 配置文件修改(重新編寫(xiě)一個(gè)配置始赎,用另一個(gè)server_name不然沖突了)
[root@mysql conf.d]# vim state.conf
server {
listen 80;
server_name state.lin.com;
stub_status;
}
2.重啟nginx服務(wù),并且編寫(xiě)解析文件
systemctl reload nginx
192.168.3.18 state.lin.com www.lin.com l.com
3.在瀏覽器中輸入state.lin.com
Active connections: 5 ---激活的連接數(shù)
server accepts handled requests
18 18 14
accepts:接收的連接數(shù)匯總(綜合)
handled:處理的連接數(shù)匯總(綜合)一般都是與accepts相同仔燕,除非資源上限了造垛,處理不過(guò)來(lái)
requests:總計(jì)的請(qǐng)求數(shù)量 HTTP協(xié)議請(qǐng)求,一個(gè)連接可有多個(gè)請(qǐng)求數(shù)量涨享,因?yàn)槭情L(zhǎng)連接
PS:在主配置文件nginx.conf中keepalive_timeout 0;設(shè)為0時(shí)就是短連接了筋搏,一個(gè)連接數(shù)就是一個(gè)請(qǐng)求數(shù)
Reading: 0 Writing: 1 Waiting: 4
Reading: nginx服務(wù)讀取請(qǐng)求報(bào)文的數(shù)量 100人點(diǎn)餐
Writing: nginx服務(wù)響應(yīng)報(bào)文信息數(shù)量 100人響應(yīng)
Waiting: nginx的隊(duì)列機(jī)制,要處理(讀取或響應(yīng)保存進(jìn)行保存) 20人排隊(duì)
8.網(wǎng)站日志功能配置
1)錯(cuò)誤日志:/var/log/nginx/error.log -- core functionality
Syntax: error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
舉例配置:error_log /var/log/nginx/error.log warn;
錯(cuò)誤級(jí)別:
debug :調(diào)試級(jí)別,服務(wù)運(yùn)行的狀態(tài)信息和錯(cuò)誤信息詳細(xì)顯示 信息最多
info :信息級(jí)別厕隧,只顯示重要的運(yùn)行信息和錯(cuò)誤信息
notice :通知級(jí)別奔脐,更加重要的信息進(jìn)行通知說(shuō)明
warn :警告級(jí)別俄周,可能出現(xiàn)了一些錯(cuò)誤信息,但不影響服務(wù)運(yùn)行
error :錯(cuò)誤級(jí)別髓迎,服務(wù)運(yùn)行已經(jīng)出現(xiàn)了錯(cuò)誤峦朗,需要進(jìn)行糾正 推薦這個(gè)級(jí)別
crit :嚴(yán)重級(jí)別,必須進(jìn)行修改調(diào)整
alert :嚴(yán)重警告級(jí)別:即警告排龄,而且必須進(jìn)行錯(cuò)誤修改
emerg :災(zāi)難級(jí)別波势,服務(wù)已經(jīng)不能正常運(yùn)行 信息最少
2)訪(fǎng)問(wèn)日志:/var/log/nginx/access.log -- ngx_http_log_module
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
log_format main 'remote_user [
request" '
'body_bytes_sent "
http_user_agent" "
remote_addr 顯示用戶(hù)訪(fǎng)問(wèn)源IP地址信息
time_local] 顯示訪(fǎng)問(wèn)網(wǎng)站時(shí)間
"status 用戶(hù)訪(fǎng)問(wèn)網(wǎng)站的狀態(tài)碼信息
http_referer" 記錄調(diào)用網(wǎng)站資源的連接地址(防止用戶(hù)盜鏈)
"http_x_forwarded_for"' 負(fù)載均衡
PS:日志文件信息需要做切割處理
3)nginx服務(wù)location作用說(shuō)明
模塊說(shuō)明:ngx_http_core_module
location進(jìn)行匹配(uri)
錯(cuò)誤頁(yè)面優(yōu)雅顯示
location /lin {
root /html/www;
error_page 404 /wen.jpg
}
Location詳細(xì)配置
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
location = / { --- 精確匹配 優(yōu)先級(jí)最高 01
[ configuration A ]
}
location / { ---默認(rèn)匹配 優(yōu)先級(jí)04 最低級(jí)
[ configuration B ]
}
location /documents/ { ---按照目錄進(jìn)行匹配 優(yōu)先級(jí)03
[ configuration C ]
}
location ^~ /images/ { ---優(yōu)先匹配/不識(shí)別URI信息中符號(hào)信息 優(yōu)先級(jí)02
[ configuration D ] ---比如下面的.要用到\來(lái)轉(zhuǎn)義
}
location ~* \.(gif|jpg|jpeg)$ { ---不區(qū)分大小寫(xiě)進(jìn)行匹配 優(yōu)先級(jí)03
[ configuration E ]
}
4)利用nginx實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)功能
利用rewrite模塊的跳轉(zhuǎn)功能 http_rewrite_module
Syntax: rewrite regex replacement [flag]; rewrite匹配的正則信息,替換成什么信息
Default: —
Context: server, location, if
PS:flag --- permanent redirect --改寫(xiě)URL breat last --這兩個(gè)是改寫(xiě)URI
語(yǔ)法: rewrite ^/(.*)http://www.lin.com/$1 permanent; 重寫(xiě)規(guī)則配置
PS:$1就是.*
跳轉(zhuǎn)方式:
永久跳轉(zhuǎn): permanent 301 會(huì)將跳轉(zhuǎn)信息進(jìn)項(xiàng)緩存
臨時(shí)跳轉(zhuǎn): redirect 302 不會(huì)緩存跳轉(zhuǎn)信息
出現(xiàn)無(wú)限跳轉(zhuǎn)解決方法:
原因: lin.com會(huì)跳轉(zhuǎn)到www.lin.com 但是www.lin.com也是匹配rewrite的^/(.*)中的^
第一種方法:利用不同server區(qū)塊配置打破循環(huán)
server {
listen 80;
server_name lin.com;
rewrite ^/(.*) http://www.lin.com/$1 permanent;
}
server {
listen 80;
server_name www.lin.com;
location / {
第二種方法:利用if判斷實(shí)現(xiàn)打破循環(huán)
server {
listen 80;
server_name www.lin.com lin.com;
if ($host ~* "^lin.com$") {
rewrite ^/(.*) http://www.lin.com/$1 permanent;
}
7.網(wǎng)站的LNMP架構(gòu)
L ---linux系統(tǒng) selinux和防火墻關(guān)閉 /tmp 1777
N ---nginx服務(wù) 作用:處理用戶(hù)的靜態(tài)請(qǐng)求 html jpg txt mp4/avi
P ---php服務(wù) 作用:處理動(dòng)態(tài)頁(yè)面請(qǐng)求竞川,負(fù)責(zé)和數(shù)據(jù)庫(kù)建立關(guān)系
M ---mysql服務(wù)部署 作用:存儲(chǔ)用戶(hù)的字符串?dāng)?shù)據(jù)信息
02.網(wǎng)站的LNMP架構(gòu)部署
a. nginx服務(wù) ---ansible一鍵化部署店溢,修改yum源
b. mysql服務(wù)部署:
1)安裝數(shù)據(jù)庫(kù)軟件
yum install mysql
PS:數(shù)據(jù)庫(kù)初始化過(guò)程 mysql_install_db
--basedir=path
--datadir=path
--user=mysql 700
2)啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)
systemctl start mysql
3)給數(shù)據(jù)庫(kù)服務(wù)設(shè)置密碼
mysqladmin -u root password 'lin.1214'
03.PHP服務(wù)部署流程
第一個(gè)歷程:更新yum源/卸載系統(tǒng)自帶的PHP軟件
yum remove php-mysql php php-fpm php-common
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
第二個(gè)歷程:安裝php軟件(不要安裝最新 ,安裝穩(wěn)定版本)
yum install -y php71w php71w-cli php71w-common php71w-devel php71w-fpm php71w-opcache php71w-gd php71w-mysqlnd php71w-mbstring php71w-pecl-redis php71w-pecl-memcached php71w-devel php71w-embedded php71w-mcrypt php71w-pdo php71w-xml php71w-pecl-mongodb
第三個(gè)歷程:編寫(xiě)配置文件
vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
PS:保證nginx進(jìn)程的管理用戶(hù)和php服務(wù)進(jìn)程的管理用戶(hù)保持一致
第四個(gè)歷程:?jiǎn)?dòng)php服務(wù)
systemctl start php-fpm
systemctl enable php-fpm
04.LNMP架構(gòu)的原理
nginx(fastcgi_pass) --FastCGI(不同程序之間要通過(guò)這種接口)-->(php-fpm -- wrapper) php(php解析器,翻譯成sql語(yǔ)句用)-->mysql(讀取或?qū)懭?
05.實(shí)現(xiàn)lnmp之間建立關(guān)系
1.實(shí)現(xiàn)nginx+php建立關(guān)系
第一個(gè)歷程:編寫(xiě)nginx文件
編寫(xiě)nginx配置文件: [root@mysql blog]# cd /etc/nginx/conf.d/
[root@mysql conf.d]# vim blog.conf
server {
listen 80;
server_name blog.lin.com;
location / {
root /html/blog;
index index.html;
}
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php; URL URI
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params; ---變量配置文件
重啟nginx服務(wù)委乌,并且編寫(xiě)解析文件
第二個(gè)歷程:編寫(xiě)動(dòng)態(tài)資源文件
vim /html/blog/test.php
<?php
phpinfo();
?>
第三個(gè)歷程:進(jìn)行訪(fǎng)問(wèn)測(cè)試
lin.blog.com/test.php
2.實(shí)現(xiàn)php+mysql建立關(guān)系
編寫(xiě)php代碼文件
[root@mysql blog]# vim /html/blog/mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "lin.1214";
//$link_id=mysql_connect('主機(jī)名','用戶(hù)','密碼');
//mysql -u用戶(hù) -p密碼 -h主機(jī)
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
echo "mysql successful by root !\n";
}else{
die("Connection failed: ".mysqli_connect_error());
}
?>
06.部署搭建網(wǎng)站頁(yè)面(代碼上線(xiàn))
第一個(gè)歷程:獲取代碼信息(git) --使用開(kāi)源的網(wǎng)站代碼
www網(wǎng)站頁(yè)面:http://www.dedecms.com/
bbs網(wǎng)站頁(yè)面: https://www.discuz.net
blog網(wǎng)站頁(yè)面:https://cn.wordpress.org/
wecenter網(wǎng)站頁(yè)面:http://www.wecenter.com/
第二個(gè)歷程:將代碼解壓床牧,將解壓后信息放入到站點(diǎn)目錄中
tar xf wordpress-5.3.2-zh_CN.tar.gz -C /html/blog/
mv wordpress/* /html/blog/
第三個(gè)歷程:修改站點(diǎn)目錄權(quán)限
chown -R nginx.nginx /html/blog
第四個(gè)歷程:進(jìn)行網(wǎng)站頁(yè)面初始化操作
lin.blog.com/index.php
輸入一些信息: 比如用戶(hù): linwen 密碼lin.1214
全輸入成功后,網(wǎng)頁(yè)顯示403這個(gè)是缺少首頁(yè)文件遭贸,在blog.conf加入index.php
[root@mysql blog]# vim /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.lin.com;
location / {
root /html/blog;
index index.php index.html;
}
第五個(gè)歷程:對(duì)數(shù)據(jù)庫(kù)服務(wù)進(jìn)行配置
創(chuàng)建數(shù)據(jù)庫(kù):create database wordpress;
創(chuàng)建數(shù)據(jù)庫(kù)管理用戶(hù): mysql> grant all privileges on wordpress.* to 'wordpress'@'localhost' identified by 'LinWen.1214';
第六個(gè)歷程:利用blog網(wǎng)站發(fā)布博文
07.錯(cuò)誤解析
1)上傳wordpress主題戈咳,報(bào)413錯(cuò)誤,如何解決
第一個(gè)歷程:修改nignx配置文件 vim blog.conf
server{
client_max_body_size 50m; --指定用戶(hù)上傳數(shù)據(jù)的大小限制默認(rèn)1M)
}
第二個(gè)歷程:修改php.ini配置文件
upload_max_filesize= 50M --使php接收用戶(hù)上傳的更大的數(shù)據(jù)(默認(rèn)2M)
2)如何讓LNMP架構(gòu)和存儲(chǔ)服務(wù)器建立關(guān)系
第一個(gè)歷程:找出圖片存儲(chǔ)的目錄
01.第一種方法:根據(jù)圖片鏈接地址獲取圖片存儲(chǔ)位置
http://blog.lin.com/wp-content/uploads/2020/01/lin.jpg
02.第二種方法:定位數(shù)據(jù)存放在站點(diǎn)目錄中
find /html/blog -tpe f -mmin -5 ---五分鐘以?xún)?nèi)的 mmin就是分鐘
inotifywait -mrq /html/blog
第二個(gè)歷程:使web服務(wù)器和存儲(chǔ)服務(wù)器建立關(guān)系
檢查存儲(chǔ)服務(wù)是否正常
編寫(xiě)存儲(chǔ)服務(wù)配置文件
mkdir /data/{bbs,blog,www}
將web服務(wù)器blog存儲(chǔ)的數(shù)據(jù)進(jìn)行遷移
mv /tmp/2020 /html/blog/wp-content/uploads/
3)默認(rèn)存儲(chǔ)服務(wù)器無(wú)法存儲(chǔ)數(shù)據(jù):
管理用戶(hù)無(wú)法存儲(chǔ):root_squash ---nfsnobody
普通用戶(hù)無(wú)法存儲(chǔ): no_all_squash
解決:第一個(gè)歷程:修改NFS配置文件革砸,定義映射用戶(hù)為nginx(或www)
useradd nginx -u 1002
chown -R www /data
第二個(gè)歷程:使root用戶(hù)可以上傳數(shù)據(jù)
sed -ri .bak 's#(sync)#\1,anonuid=1002,anongid=1002#g' /etc/exports
4)如何讓LNMP架構(gòu)和數(shù)據(jù)庫(kù)服務(wù)器建立關(guān)系?
第一個(gè)歷程:將web服務(wù)器本地?cái)?shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行備份
mysqldump -uroot -plin.1214 --all-database >/tmp/web.sql
第二個(gè)歷程:將備份數(shù)據(jù)進(jìn)行遷移
scp -rp /tmp/web.sql 192.168.3.12:/tmp
第三個(gè)歷程:恢復(fù)數(shù)據(jù)信息
mysql -uroot -plin.1214 </tmp/web.sql
第四個(gè)歷程:修改數(shù)據(jù)庫(kù)服務(wù)器中的用戶(hù)信息
select user,host from mysql.user
優(yōu)化:刪除無(wú)用的用戶(hù)信息(就是空用戶(hù)的)
delete from mysql.user where user="" and host="localhost";
添加:添加新的用戶(hù)信息
grant all privileges on wordpress.* to 'wordpress'@'192.168.3.%' identified by 'LinWen.1214';
flush privileges;
第五個(gè)歷程:修改web服務(wù)器代碼文件信息
vim wp-config.php --因?yàn)閹ぬ?hào)密碼和之前的一樣除秀,就是把主機(jī)改下就OK
/** WordPress數(shù)據(jù)庫(kù)的名稱(chēng) */
define( 'DB_NAME', 'wordpress' );
/** MySQL數(shù)據(jù)庫(kù)用戶(hù)名 */
define( 'DB_USER', 'wordpress' );
/** MySQL數(shù)據(jù)庫(kù)密碼 */
define( 'DB_PASSWORD', 'LinWen.1214' );
/** MySQL主機(jī) */
define( 'DB_HOST', 'localhost' ); -->define( 'DB_HOST','192.168.3.12');
/** 創(chuàng)建數(shù)據(jù)表時(shí)默認(rèn)的文字編碼 */
define( 'DB_CHARSET', 'utf8mb4' );
/** 數(shù)據(jù)庫(kù)整理類(lèi)型。如不確定請(qǐng)勿更改 */
define( 'DB_COLLATE', '' );
第六個(gè)歷程:停止web服務(wù)器上數(shù)據(jù)庫(kù)服務(wù)
systemctl stop mysqld
systemctl disable mysqld
問(wèn)題1:數(shù)據(jù)庫(kù)服務(wù)沒(méi)啟動(dòng)報(bào)錯(cuò):Error esttablishing a database connection
問(wèn)題2:php沒(méi)有啟動(dòng)報(bào)錯(cuò):502 bad gateway
問(wèn)題3:web01代碼信息遷移到web02服務(wù)器算利,并且修改了網(wǎng)站域名無(wú)法正確訪(fǎng)問(wèn)
方法-:修改wordpress后臺(tái)設(shè)置信息,將后臺(tái)中老的域名改為新的域名
方法二:修改數(shù)據(jù)庫(kù)中的一個(gè)表泳姐,在表中修改一個(gè)和域名有關(guān)的條目信息 update
-
(反向代理)負(fù)載均衡
01.(反向代理)負(fù)載均衡的概念
集群:完成相同任務(wù)或工作的一組服務(wù)器(web01 web02 web03 --web集群)
負(fù)載均衡:
⌒谩1)實(shí)現(xiàn)用戶(hù)訪(fǎng)問(wèn)請(qǐng)求進(jìn)行調(diào)度分配
2)實(shí)現(xiàn)用戶(hù)訪(fǎng)問(wèn)壓力分擔(dān)
反向代理:外網(wǎng) --->(eth0外網(wǎng)) 代理服務(wù)器(eth1內(nèi)網(wǎng)) ---> 公司網(wǎng)站服務(wù)器web(內(nèi)網(wǎng))
外網(wǎng)用戶(hù)(客戶(hù)端) ---代理服務(wù)器(服務(wù)端)
正向代理: 內(nèi)網(wǎng)(局域網(wǎng)主機(jī)) -- (內(nèi)網(wǎng))代理服務(wù)器(外網(wǎng)) ---互聯(lián)網(wǎng) ---web(服務(wù)器)
02.集群服務(wù)器部署
∨置搿PS:集群中每個(gè)服務(wù)器的配置一模一樣
企業(yè)中: 01.先部署好一臺(tái)LNMP服務(wù)器缎患,上傳代碼信息
02.進(jìn)行訪(fǎng)問(wèn)測(cè)試
03.批量部署多臺(tái)web服務(wù)器
04.將nginx配置文件進(jìn)行分發(fā)
05.將站點(diǎn)目錄分發(fā)給所有主機(jī)
利用手動(dòng)方式實(shí)現(xiàn)負(fù)載均衡:
修改hosts主機(jī)地址和域名映射文件
03.負(fù)載均衡服務(wù)器部署:
第一個(gè)歷程:安裝部署nginx軟件
yum install -y nginx
第二個(gè)歷程:編寫(xiě)nginx負(fù)載服務(wù)配置文件
ngx_http_upstream_module --- upstream 負(fù)載均衡
ngx_http_proxy_module --- proxy_pass 反向代理
[root@nginx conf.d]# vim lb.conf
upstream lin {
server 192.168.3.18:80;
server 192.168.3.20:80;
}
server {
listen 80;
server_name www.lin.com;
location / {
proxy_pass http://lin;
}
}
}
第三個(gè)歷程:實(shí)現(xiàn)負(fù)載功能測(cè)試
搭建集群測(cè)試環(huán)境:
for name in {bbs,www,blog}; do echo "name/lin.html;done
for name in {bbs,www,blog}; do echo "name/lin.html;done
04.負(fù)載均衡訪(fǎng)問(wèn)網(wǎng)站異常排錯(cuò)思路:
第一步:負(fù)載均衡 測(cè)試后端web節(jié)點(diǎn)服務(wù)器是否能夠正常訪(fǎng)問(wèn)
[root@nginx conf.d]# curl -H host:www.lin.com 192.168.3.18/lin.html
www 192.168.3.18
[root@nginx conf.d]# curl -H host:www.lin.com 192.168.3.20/lin.html
www 192.168.3.20
第二步: 負(fù)載均衡 利用curl命令訪(fǎng)問(wèn)負(fù)載均衡服務(wù)器
查看兩個(gè)配置文件
第三步: 打開(kāi)一個(gè)XSHELL連接, ping www.lin.com
第四步:配置文件編寫(xiě)不正確
05.負(fù)載均衡配置模塊詳細(xì)說(shuō)明
a.nginx_http_upstream_module --- upstream
實(shí)現(xiàn)不同調(diào)度功能
1.輪詢(xún)分配請(qǐng)求(平均)
2.權(quán)重分配請(qǐng)求(能力越強(qiáng)責(zé)任越重)
upstream lin {
server 192.168.3.18:80 weight=3;
server 192.168.3.20:80 weight=2;
server 192.168.3.21:80 weight=1;
}
3.實(shí)現(xiàn)熱備功能(備胎功能)
upstream lin {
server 192.168.3.18:80 weight=2;
server 192.168.3.20:80 weight=1 max_fail=5 fail_timeout=10s;
server 192.168.3.21:80 backup;
4.定義最大失敗次數(shù)
max_fails=5
5.定義失敗之后重發(fā)的間隔時(shí)間
fail_timeout=10s 會(huì)給失敗的服務(wù)器一次機(jī)會(huì)阎肝,再等10S后再一次機(jī)會(huì)
實(shí)現(xiàn)不同調(diào)度算法 (放在upstream模塊中)
1.rr 輪詢(xún)調(diào)度算法
2.wrr 權(quán)重調(diào)度算法
3.ip_hash 算法 ---根據(jù)ip來(lái)分配挤渔,(出現(xiàn)反復(fù)登錄的時(shí)候用)這樣可以避免在登錄驗(yàn)證時(shí)出問(wèn)題,因?yàn)轵?yàn)證在后端的18服務(wù)器時(shí)成功风题,可再發(fā)請(qǐng)求有可能是在20服務(wù)器判导,這樣又要重新驗(yàn)證嫉父,除非用了緩存服務(wù)器
4.least_conn 根據(jù)服務(wù)器連接數(shù)分配資源
b.ngx_http_proxy_module --- proxy_pass
*****01.訪(fǎng)問(wèn)不同的網(wǎng)站地址,不能顯示不同的網(wǎng)站頁(yè)面(bbs,blog,www)
server {
listen 80;
server_name www.lin.com;
location / {
proxy_pass http://lin;
proxy_set_header Hostremote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
server {
listen 80;
server_name bbs.lin.com;
location / {
proxy_pass http://lin;
proxy_set_header Hostremote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
server {
listen 80;
server_name blog.lin.com;
location / {
proxy_pass http://lin;
proxy_set_header Hostremote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
*****02.訪(fǎng)問(wèn)網(wǎng)站用戶(hù)地址信息無(wú)法進(jìn)行分析統(tǒng)計(jì)
proxy_set_header X-Forwarded-ForHost;
proxy_set_header X-Forwarded-ForHost;
proxy_set_header X-Forwarded-ForHost;
proxy_set_header X-Forwarded-Forhttp_user_agent ~* iphone) {
proxy_pass http://mobile;
}
if (Host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
4.高可用服務(wù)keepalive
01.用途: 避免負(fù)載均衡服務(wù)出現(xiàn)單點(diǎn)問(wèn)題
02.原理: keepalived高可用之間是通過(guò)VRRP通信的绕辖,先說(shuō)下VRRP
VRRP: a.全稱(chēng)Virtual Router Redundancy Protocol 虛擬路由冗余協(xié)議 VRRP的出現(xiàn)是為了解決 靜態(tài)路由的單點(diǎn)故障
b.VRRP是通過(guò)一種競(jìng)選協(xié)議機(jī)制來(lái)將路由任務(wù)交給某臺(tái)VRRP路由器
c.VRRP用IP多播的方式(默認(rèn)多播地址224.0.0.18)實(shí)現(xiàn)高可用之間通信
d.工作時(shí)主節(jié)點(diǎn)發(fā)包,備節(jié)點(diǎn)接包擂红,當(dāng)備節(jié)點(diǎn)接收不到主節(jié)點(diǎn)發(fā)的數(shù)據(jù)包時(shí)仪际,就啟動(dòng)
接管程序接管主節(jié)點(diǎn)的資源。PS:備節(jié)點(diǎn)可以多個(gè)昵骤,通過(guò)優(yōu)先級(jí)競(jìng)選树碱,一般keepalive在運(yùn)維中是一對(duì)
e.VRRP使用了加密協(xié)議加密數(shù)據(jù),但keepalive廴還是推薦使用明文方式
keepalive工作原理:keepalived高可用之間是通過(guò)VRRP進(jìn)行通信的变秦,VRRP是通過(guò)競(jìng)選機(jī)制來(lái)
確定主備的成榜,主的優(yōu)先級(jí)高于備,因此伴栓,工作時(shí)主會(huì)優(yōu)先獲得所有資源伦连,備節(jié)點(diǎn)處于等待狀態(tài),
當(dāng)主掛了的時(shí)候钳垮,備節(jié)點(diǎn)就會(huì)接管主節(jié)點(diǎn)的資源惑淳,然后頂替主節(jié)點(diǎn)對(duì)外提供服務(wù)。
在keepalive服務(wù)之間饺窿,作為主的服務(wù)器一直發(fā)送VRRP組播包歧焦,告訴備它還活著,當(dāng)主不可用
肚医,即備監(jiān)聽(tīng)不到主發(fā)送的組播包時(shí)绢馍,就會(huì)啟動(dòng)相關(guān)服務(wù)接管資源,保證業(yè)務(wù)的連續(xù)性肠套,接管速度最快可以小于1秒
03.實(shí)現(xiàn)部署高可用服務(wù)
利用keepalived軟件實(shí)現(xiàn)(高可用服務(wù)軟件好多舰涌,這只是其中一種)
作用: 1.為lVS服務(wù)誕生出來(lái)的你稚。2.實(shí)現(xiàn)高可用服務(wù)功能
04.高可用keepalived服務(wù)部署流程
第一個(gè)歷程:準(zhǔn)備高可用服務(wù)架構(gòu)
第二個(gè)歷程:安裝部署keepalived軟件 yum install -y keepalived高可用之間是通過(guò)VRRP進(jìn)行通信的瓷耙,VRRP是通過(guò)競(jìng)選機(jī)制來(lái)
第三個(gè)歷程:編寫(xiě)keepalived配置文件
vim /etc/keepalived/keepalived.conf
GLOBAL CONFIGURATION ---全局配置部分
VRRPD CONFIGURATION ---VRRP協(xié)議配置部分
LVS CONFIGURATION ---LVS服務(wù)管理配置部分(這部分可刪除,LVS時(shí)才有用)
[root@nginx ~]# vim /etc/keepalived/keepalived.conf
global_defs { ---全局配置部分
notification_email { ---設(shè)置發(fā)送郵件信息
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc〉罄怠--設(shè)置連接的郵件服務(wù)器信息
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL --- 高可用集群主機(jī)身份標(biāo)識(shí)(集群中班機(jī)身份標(biāo)識(shí)不能重復(fù))
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}vrrp_instance lin { ---Vrrp相關(guān)配置(vrrp實(shí)例配置--一個(gè)服務(wù)可以啟動(dòng)多個(gè)主進(jìn)程) vrrp協(xié)議家族搁痛,lin
state MASTER ---標(biāo)識(shí)所在家族中身份(master/backsup)
interface eth0 ---指定虛擬IP地址出現(xiàn)在什么網(wǎng)卡上
virtual_router_id 51 ---標(biāo)識(shí)家族身份信息 多臺(tái)高可用服務(wù)器配置要一致
priority 100 ---設(shè)定優(yōu)先級(jí) 優(yōu)先級(jí)越高,就越有可能成為主
advert_int 1 ---定義組播包發(fā)送的間隔時(shí)間(秒),主與備配置一樣
authentication { ---實(shí)現(xiàn)通訊需要有認(rèn)證過(guò)程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ---配置虛擬IP地址信息
192.168.200.16
192.168.200.17
192.168.200.18
}
}
02. lb01配置信息:
global_defs {
router_id lb01
}
vrrp_instance lin {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.88
}
}
03.lb02配置信息
global_defs {
router_id lb02
}vrrp_instance lib { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.3.88 } }
第四個(gè)歷程:?jiǎn)?dòng)keepalived服務(wù)
systemctl start keepalived
systemctl enable keepalived
global中的vrrp_strict一定要關(guān)掉宇弛,不然ping不了vip
05.高可用服務(wù)企業(yè)應(yīng)用
〖Φ洹1.高可用服務(wù)常見(jiàn)異常問(wèn)題---腦裂問(wèn)題
2.出現(xiàn)原因:高可用備服務(wù)器接收不到主服務(wù)器發(fā)送的組播包枪芒,備服務(wù)器上自動(dòng)生成vip地址
物理原因:高可用集群之間通訊線(xiàn)路出現(xiàn)問(wèn)題彻况,網(wǎng)絡(luò)波動(dòng)谁尸,線(xiàn)路出問(wèn)題等
邏輯原因:有安全策略阻止
3.解決方法:
01.進(jìn)行監(jiān)控,發(fā)出告警
備服務(wù)器出現(xiàn)VIP的原因:
a.主服務(wù)器出現(xiàn)故障
b.出現(xiàn)腦裂問(wèn)題
c.不管以上兩種什么情況都要報(bào)警疗垛,在備服務(wù)器上編寫(xiě)監(jiān)控腳本
[root@nginx scripts]# vim keepalived_alert.sh
#!/bin/bash
ip a s eth0|grep "192.168.3.88" >/dev/null
if [num -lt 3 ]
then
systemctl stop keepalived
fi
b.vim check_web.sh 推薦這種
#!/bin/bash
netstat -tlnup|grep ":80" >/dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi第二個(gè)歷程:測(cè)試編寫(xiě)腳本
第三個(gè)歷程:實(shí)時(shí)監(jiān)控nginx服務(wù)狀態(tài)---keepalived配置文件
01.設(shè)置腳本(放在globle 和Vrrp_instance之間)
vrrp_script check_web{
script "/server/scripts/check_web.sh"
interval 2
weight 2
}
02.調(diào)用腳本(放在vrrp_instance里面)
track_script {
check_web
}
5.高可用集群雙主配置
第一個(gè)歷程:編寫(xiě)lb01的配置文件泽裳,就是多寫(xiě)一個(gè)實(shí)例
global_defs {
router_id lb01
}
vrrp_instance lin {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.88/24
}
}
vrrp_instance wen {
state MASTER
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.89/24
}
}
第二個(gè)歷程:編寫(xiě)lb02的配置文件(與lb01相反)
第三個(gè)歷程:編寫(xiě)域名和IP地址解析信息
6.高可用服務(wù)安全訪(fǎng)問(wèn)配置(負(fù)載均衡服務(wù))
第一個(gè)歷程:修改nginx負(fù)載均衡文件 vim /etc/ngixn/conf.d/lb.conf
server {
listen 192.168.3.88:80;
server_name www.lin.com;
location / {
proxy_pass http://web;
proxy_set_header Host remote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
server {
listen 192.168.3.89:80;
server_name bbs.lin.com;
location / {
proxy_pass http://web;
proxy_set_header Host remote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
第二個(gè)歷程:修改內(nèi)核文件(主要是雙主的keepalive的配置)
異常問(wèn)題:如何監(jiān)控網(wǎng)卡上沒(méi)有的IP地址瞒斩,就是雙VIP,監(jiān)聽(tīng)不在本地的IP地址
解決方法:1.echo 'net.ipv4.ip_nonlocal_bind=1' >>/etc/sysctl.conf
2.sysctl -p 加載這個(gè)文件
3.[root@nginx conf.d]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
第三個(gè)歷程:重啟nginx負(fù)載均衡服務(wù)
systemctl restart nginx