圖論_圖結構的基礎理論知識
阿新 • • 發佈:2020-09-12
Nginx
1.Nginx反向代理
-
既然是反向代理,那麼什麼是正向代理,當一個使用者向訪問谷歌瀏覽器,我通過在瀏覽器中配置代理伺服器(比如www.zxdl.com)通過代理伺服器去訪問谷歌瀏覽器。
-
而反向代理是,其實客戶端對代理無感知,客戶端不需要任何配置就可以訪問,我們只需要將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料後再返回客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴漏的是代理伺服器地址。隱藏真實伺服器地址。
2.負載均衡
- 我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上改成將請求分發多個伺服器上,將負載分發到不同的伺服器,也就是我們所說的負載均衡。
3.動靜分離
- 動態資源和靜態資源分開部署,把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。
4.nginx安裝
-
安裝nginx前需要安裝一些依賴
1.pcre依賴安裝 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz tar -xvf pcre-8.37.tar.gz cd pcre-8.37/ # 檢查,如果抱錯:configure: error: You need a C++ compiler for C++ support. 請執行:yum install -y gcc gcc-c++ ./configure # 安裝 make && make install # 檢視安裝是否完成:pcre-config --version # yum 安裝 openssl zlib # yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
-
安裝nginx
https://www.runoob.com/linux/nginx-install-setup.html
5.nginx常用命令
# 檢視版本好
/usr/sbin/nginx -v
# 啟動
/usr/sbin/nginx
# 停止
/usr/sbin/nginx -s stop
# 重新載入配置
/usr/sbin/nginx -s reload
6.nginx配置
- 全域性塊:主要影響nginx伺服器整體執行配置指令
- events塊:影響nginx與使用者網路連線
- http塊:
6.1全域性塊
worker_processes 1; #它可以有效提高併發處理,根據CPU核心數,e.g:雙核4執行緒可以設定為4 worker_connections #單個工作程序可以允許同時建立連線的數量。預設:1024。它與記憶體和作業系統級別的‘程序最大可開啟檔案數’
6.2events塊
1.connections不是隨便設定的,而是與兩個指標有重要關聯,一是記憶體,二是作業系統級別的“程序最大可開啟檔案數”。
2.記憶體:每個連線數分別對應一個read_event、一個write_event事件,一個連線數大概佔用232位元組,2個事件總佔用96位元組,那麼一個連線總共佔用328位元組,通過數學公式可以算出100000個連線數大概會佔用 31M = 100000 * 328 / 1024 / 1024,當然這只是nginx啟動時,connections連線數所佔用的nginx。
3.程序最大可開啟檔案數:程序最大可開啟檔案數受限於作業系統,可通過 ulimit -n 命令查詢,以前是1024,現在是65535,
nginx提供了worker_rlimit_nofile指令,這是除了ulimit的一種設定可用的描述符的方式。 該指令與使用ulimit對使用者的設定是同樣的效果。此指令的值將覆蓋ulimit的值,如:worker_rlimit_nofile 20960;
設定ulimits:ulimit -SHn 65535
6.3http塊
- http塊,server塊
7.Nginx配置例項-反向代理
- 當用戶瀏覽器訪問192.168.1.1 就會反向代理到 http://127.0.0.1:8080
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 192.168.1.1;#訪問ip
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:8080
}
...
}
# 當用戶瀏覽器訪問192.168.1.1 就會反向代理到 http://127.0.0.1:8080
- 根據不同路徑訪問,當訪問 127.0.0.1:9001/edu/將轉發到http://127.0.0.1:8001,當訪問 127.0.0.1:9001/vod/將轉發到http://127.0.0.1:8002,
server {
listen 9001;
server_name localhost;
location ~/edu/ {
proxy_pass http://127.0.0.1:8001;
}
location ~/vod/ {
proxy_pass http://127.0.0.1:8002;
}
}
- 負載均衡。瀏覽器訪問http://192.168.1.1/edu/a.html 負載均衡效果,平均分配8080和8081
# 負載均衡配置
![image-20200827231727170](/Users/xujunkai/Library/Application Support/typora-user-images/image-20200827231727170.png)
- 動靜分離
- 靜態資源放在獨立伺服器上。通過nginx轉到靜態伺服器。通過expires可以設計瀏覽器快取時間。它會對比伺服器該檔案最後更新時間的變化,如果沒有變化,則不從伺服器抓取,返回狀態碼304,如果有修改,則直接從伺服器重新下載,返回狀態碼200。
location /www/ {
root /data/; #訪問data目錄下靜態檔案
autoindex on;# 它會列出當前檔案下所有靜態資源
}
# 當你輸入 http://192.168.1.1/xxxx/a.html
location /xxx/ {
root /data/; #訪問data目錄下靜態檔案
}
# 直接返回a.html
7.Nginx配置高可用的叢集
-
一臺主伺服器一臺從伺服器
-
需要一個軟體keepalived
對外暴漏一個虛擬ip,當主伺服器掛了,會將虛擬IP轉從伺服器。
- 準比工作
1.準備2臺伺服器
2.在兩臺伺服器安裝nginx
3.在兩臺伺服器安裝keepalived
yum install keepalived
- 編輯/etc/keepalived/keepalived.conf。之前有預設配置檔案
# 全域性定義
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL# 唯一值,伺服器名字可在vi /etc/hosts中配置,如 127.0.0.1 LVS_DEVEL
}
# 檢測指令碼 和權重引數,判斷nginx是否活著
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 #檢測指令碼執行間隔
weight 2 #設定當前伺服器權重
}
// 虛擬ip配置
vrrp instance VI_1 {
state MASTER # 主伺服器為MASTER,備份伺服器BACKUP
interface ens33 # 要在哪個網絡卡繫結你虛擬主機名字
virtual_router_id 51# 主,備機的virtual_router_id必須相同
priority 100 #主,備機取不同的優先順序,主機值較大,備份機較小
advert_int 1# 每隔1秒,進行心跳
# 許可權校驗
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.11.50 # 虛擬ip地址繫結,當然可以繫結多個
}
}
- nginx_check.sh 檢查nginx是否還活著
#! /bin/bash
A = `ps -c nginx -no-header |wc -l`
if [ $A eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
- 從伺服器更改 虛擬ip配置即可
state BACKUP # 主伺服器為MASTER,備份伺服器 BACKUP
priority 90 # priority小於主伺服器
- 啟動nginx 主伺服器和備份伺服器
- 啟動keepalived
systemctl start keepalived.service
- 測試
1.在瀏覽器輸入虛擬ip也就是上面設定的192.168.11.50
2.通過ip a 檢視虛擬ip是否繫結
# 當把主伺服器停止 再從瀏覽器訪問虛擬ip,按理來說是可以訪問的
./nginx -s stop #停止主伺服器
# 瀏覽器也可以正常訪問。說明切換了備份伺服器。
8.nginx機制
![image-20200830110351231](/Users/xujunkai/Library/Application Support/typora-user-images/image-20200830110351231.png)
- 一個 master和多個woker工作的好處
- 可以使用nginx -s reload熱部署,利用nginx進行熱部署
- 每個work是獨立程序,如果其中一個woker出現問題,其他woker獨立的,繼續進行爭搶,實現請求過程,不會造成服務中斷
- nginx使用io多路複用,Windows無這種機制。
- 關於連線數
根據cpu數量設定worker
傳送請求佔用多少個woker連線數???要麼2個,要麼4個
連線 + 返回
work支援最大連線數: cpu核數 乘以最大連線數:比如4個worker 每個worker支援1024連線數 那麼就是4*1024
worker支援最大併發數????
4*1024除以2 或 4, 但也不絕對,支援最大併發數,應該用如下公式
- 普通靜態訪問最大併發數:worker_connections * worker_processes/2
- 而如果是HTTP作為反向代理,最大併發數量是worker_connections * worker_processes/4