一.什么是代理?
代為辦理? ? -->? 代理
二.Nginx正向代理专执、反向代理?
正向代理: --> 上網(wǎng)? |? 路由器替代? | 科學(xué)上網(wǎng)
反向代理: -->
正向與反向代理的區(qū)別
區(qū)別在于形式上服務(wù)的 "對(duì)象" 不一樣
正向代理代理的對(duì)象是客戶端坑匠,為客戶端服務(wù)
反向代理代理的對(duì)象是服務(wù)端吭服,為服務(wù)端服務(wù)
三.Nginx代理支持哪些協(xié)議、常用的是哪些?
反向代理模式 Nginx反向代理模塊
http尸变、websocket义图、https ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uwsgi_module
grpc ngx_http_v2_module
四.Nginx反向代理語法?
五.Nginx反向代理示例?
1.如果后端監(jiān)聽80端口,會(huì)不會(huì)出現(xiàn)問題?
2.后端主機(jī)獲取的客戶端IP是否是真實(shí)的?
3.代理向后端請(qǐng)求時(shí),走的http1.0協(xié)議?
代理配置
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf
server {
listen 80;
server_name web.oldxu.com;
location / {
proxy_pass http://10.0.0.7:80;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
后端web配置
[root@web01 conf.d]# cat web.oldxu.com.conf
server {
listen 80;
server_name web.oldxu.com;
location / {
root /html;
index index.html;
}
}
六.Nginx反向代理參數(shù)?
額外擴(kuò)展知識(shí):
服務(wù)器默認(rèn)有65535個(gè)端口,通常系統(tǒng)服務(wù)需要占用部分端口:1~10000
配置一臺(tái)主機(jī)作為nginx代理服務(wù)召烂,最多支持5w的tcp連接歌溉,因?yàn)槎丝跀?shù)受限
配置一臺(tái)后端的應(yīng)用服務(wù),最多能支持2w-3w左右的tcp連接骑晶,因?yàn)楫?dāng)一個(gè)請(qǐng)求過來
nginx代理通過隨機(jī)端口--請(qǐng)求-->nginx應(yīng)用服務(wù)--通過-->隨機(jī)端口--請(qǐng)求-->php動(dòng)態(tài)程序--通過-->隨機(jī)端口-->mysql
1.什么是負(fù)載均衡?
2.為什么需要使用負(fù)載均衡?
3.負(fù)載均衡實(shí)現(xiàn)的場(chǎng)景? 四層負(fù)載均衡
四層負(fù)載均衡:? 轉(zhuǎn)發(fā)? 改寫數(shù)據(jù)包? 源IP? 源端口? 目標(biāo)IP? 目標(biāo)端口? 真實(shí)的目標(biāo)IP 目標(biāo)端口
七層負(fù)載均衡:? 代理? 代為辦理
4.七層負(fù)載均衡與四層負(fù)載均衡區(qū)別?
七層負(fù)載均衡效率沒有四負(fù)載均衡高。
四層負(fù)載均衡沒有七層負(fù)載均衡支持的功能多,比如? url匹配? 設(shè)置頭部信息
負(fù)載均衡是基于代理實(shí)現(xiàn)的一種形式
5.七層負(fù)載均衡配置示例?
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf
upstream web {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name web.oldxu.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@lb01 conf.d]# cat /etc/nginx/proxy_params
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
#后端web配置 (為了區(qū)分,將兩臺(tái)web的站點(diǎn)配置的不一樣,以便測(cè)試效果)
[root@web01 conf.d]# cat web.oldxu.com.conf
server {
listen 80;
server_name web.oldxu.com;
location / {
root /html;
index index.html;
}
}
6.七層負(fù)載均衡整合集群架構(gòu)示例?
blog
zh
7.七層負(fù)載均衡調(diào)度算法草慧、后端狀態(tài)?
1.負(fù)載均衡如何分配流量?
1.強(qiáng)與弱
2.平均
調(diào)度算法 概述
輪詢 按時(shí)間順序逐一分配到不同的后端服務(wù)器(默認(rèn))
機(jī)器的配置一致 (web集群? 硬件環(huán)境 一致)
weight 加權(quán)輪詢,weight值越大,分配到的訪問幾率越高
機(jī)器硬件不一致的情況下使用? (硬件? pc機(jī))
ip_hash 每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,這樣來自同一IP的固定訪問一個(gè)后端服務(wù)器
解決問題:? 能解決會(huì)話保持的問題
帶來新的問題: 會(huì)造成后端負(fù)載不均衡
url_hash 按照訪問URL的hash結(jié)果來分配請(qǐng)求,是每個(gè)URL定向到同一個(gè)后端服務(wù)器
least_conn 最少鏈接數(shù),那個(gè)機(jī)器鏈接數(shù)少? 就分發(fā)
七.七層負(fù)載均衡后端狀態(tài)?
狀態(tài) 概述
down 當(dāng)前的server暫時(shí)不參與負(fù)載均衡
backup 預(yù)留的備份服務(wù)器
max_fails 允許請(qǐng)求失敗的次數(shù)
fail_timeout 經(jīng)過max_fails失敗后, 服務(wù)暫停時(shí)間
max_conns 限制最大的接收連接數(shù)
a max_fails=2 fail_timeout=10s 運(yùn)維
b max_fails=2 fail_timeout=10s 運(yùn)維
c backup; 開發(fā)? 運(yùn)維
d down; 離職
企業(yè)案例:使用nginx負(fù)載均衡時(shí)桶蛔,如何將后端請(qǐng)求超時(shí)的服務(wù)器流量平滑的切換到另一臺(tái)上。如果后臺(tái)服務(wù)連接超時(shí)漫谷,Nginx是本身是有機(jī)制的仔雷,如果出現(xiàn)一個(gè)節(jié)點(diǎn)down掉的時(shí)候,Nginx會(huì)更據(jù)你具體負(fù)載均衡的設(shè)置,將請(qǐng)求轉(zhuǎn)移到其他的節(jié)點(diǎn)上碟婆,但是电抚,如果后臺(tái)服務(wù)連接沒有down掉,但是返回錯(cuò)誤異常碼了如:504竖共、502蝙叛、500,應(yīng)該如何處理公给。
可以在負(fù)載均衡添加如下配置proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是借帘,當(dāng)其中一臺(tái)返回錯(cuò)誤碼404,500...等錯(cuò)誤時(shí),可以分配到下一臺(tái)服務(wù)器程序繼續(xù)處理淌铐,提高平臺(tái)訪問成功率肺然。
nginx本身是有剔除機(jī)制,? 指的是 后端的nginx沒有正常工作
proxy_next_upstream nginx是正常工作,只不過后端的php或者其他程序出現(xiàn)問題? 502
server {
? ? listen 80;
? ? server_name xuliangwei.com;
? ? location / {
? ? ? ? proxy_pass http://node;
? ? ? ? proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
? ? }
}
八.七層負(fù)載均衡實(shí)現(xiàn)Redis會(huì)話共享? redis
1、粘性session
粘性session是指Ngnix每次都將同一用戶的所有請(qǐng)求轉(zhuǎn)發(fā)至同一臺(tái)服務(wù)器上腿准,及Nginx的 IP_hash际起。
2、session復(fù)制
即每次session發(fā)生變化時(shí)吐葱,創(chuàng)建或者修改街望,就廣播給集群中的服務(wù)器,使所有的服務(wù)器上的session相同唇撬。
3它匕、session持久化 ( 慢 )
將session存儲(chǔ)至數(shù)據(jù)庫中,像操作數(shù)據(jù)一樣操作session窖认。
4豫柬、session共享
緩存session至內(nèi)存數(shù)據(jù)庫中,使用redis ( 內(nèi)存-->刷到磁盤? )扑浸,memcached (內(nèi)存數(shù)據(jù)庫)烧给。
思路:
--------------------------------------------------------------------------
1.在 172.16.1.8? 和? 172.16.1.7 安裝 phpmyadmin? ?
分別進(jìn)行測(cè)試-->測(cè)試登錄
#1.安裝phpmyadmin(web01和web02上都裝)
[root@web01 conf.d]# cd /code
[root@web01 code]# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip
[root@web01 code]# unzip phpMyAdmin-4.8.4-all-languages.zip
#2.配置phpmyadmin連接遠(yuǎn)程的數(shù)據(jù)庫
[root@web01 code]# cd phpMyAdmin-4.8.4-all-languages/
[root@web01 phpMyAdmin-4.8.4-all-languages]# cp config.sample.inc.php config.inc.php
[root@web01 phpMyAdmin-4.8.4-all-languages]# vim config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '172.16.1.51';
--------------------------------------------------------------------------
2.接入負(fù)載均衡 ---> 代理至后端2臺(tái)主機(jī)
[root@lb01 conf.d]# cat proxy_php.oldxu.com.conf
upstream? php {
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name php.oldxu.com;
location / {
proxy_pass http://php;
proxy_set_header Host $http_host;
}
}
3.發(fā)現(xiàn)無法正常登陸
1.解決方法:?
在負(fù)載均衡上配置? ip_hash 會(huì)話保持? (? 造成用戶僅訪問后端的某一臺(tái)主機(jī)? )
[root@lb01 conf.d]# cat proxy_php.oldxu.com.conf
upstream? php {
ip_hash;
server 172.16.1.7;
server 172.16.1.8;
}
server {
listen 80;
server_name php.oldxu.com;
location / {
proxy_pass http://php;
proxy_set_header Host $http_host;
}
}
4.既希望能夠?qū)崿F(xiàn)流量的均攤,又希望會(huì)話的問題得以保持, 所以引入了redis
1)安裝redis
[root@db01 ~]# yum install redis -y
2)配置redis
[root@db01 ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
3)啟動(dòng)redis
[root@db01 ~]# systemctl enable redis
[root@db01 ~]# systemctl start redis
4) 改造php, session寫本地修改為寫入redis中 (所有的web上都需要配置)
前提:? 已經(jīng)安裝過了redis的模塊---> php71w-pecl-redis
1.修改php存儲(chǔ)session至redis中
[root@db01 ~]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379?weight=1"
2.修改php-fpm 注釋默認(rèn)存儲(chǔ)session的位置
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path]? ? = /var/lib/php/session
3.將修改后的配置文件,推送至172.16.1.8
[root@web01 ~]# scp /etc/php.ini root@172.16.1.8:/etc/?
[root@web01 ~]# scp /etc/php-fpm.d/www.conf? root@172.16.1.8:/etc/php-fpm.d/www.conf
4.重啟172.16.1.7 172.16.1.8兩臺(tái)服務(wù)器的php-fpm
[root@web02 conf.d]# systemctl restart php-fpm
5) 測(cè)試效果
1.瀏覽器登錄測(cè)試? (ok)
2.查看redis的sessionID和? ? 瀏覽器cookie中提交的sessionID是否一致
[root@db01 ~]# redis-cli
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:38ecc8696c70a7252d943e7cb9b20f70"
--------------------------------------------------------------------------
九.SLB負(fù)載均衡? + ECS 云主機(jī)? ? (? 120 塊錢? --> 按量付費(fèi) )
ECS 云主機(jī)? ===> 服務(wù)器? ? ( Linux 操作系統(tǒng)? 安裝? Nginx? PHP )
SLB 產(chǎn)品? ? ===> 開源技術(shù)? ( Tengine? LVS )? 手動(dòng)配置負(fù)載均衡沒什么區(qū)別
1) 購(gòu)買云主機(jī) (? 按量? --->? 釋放 )
2) 配置云主機(jī)環(huán)境? Nginx +PHP
2) 購(gòu)買SLB負(fù)載均衡 (? 按量? --->? 釋放 )
3) 集成 SLB+ECS
4) DNS解析