概述
Nginx 是一個高性能的 HTTP 和反向代理服務器,特點是占用記憶體少,并發能力強
1. 正向代理
如果把局域網外的 Internet 想象成一個巨大的資源庫,則局域網中的客戶端要訪問 Internet,需要通過代理服務器來訪問,這種訪問就稱為正向代理

2. 反向代理
客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器 IP 地址
3. 負載均衡
增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器
4. 動靜分離
簡單來說就是把動態請求跟靜態請求分開,不能單純地理解為動態頁面和靜態頁面分類,一般使用 Nginx 處理靜態頁面,Tomcat 處理動態頁面
動靜分離有兩種實作:
- 把靜態檔案獨立成單獨的域名,放在獨立的服務器
- 靜態檔案和動態檔案混在一起發布,通過 nginx 分開
Nginx 操作命令
# 必須先進入 nginx 目錄
cd /usr/local/nginx/sbin
# 查看 nginx 版本號
./nginx -v
# 啟動 nginx
./nginx -s start
# 關閉 nginx
./nginx -s stop
# 重新加載 nginx(修改了組態檔)
./nginx -s reload
Nginx 組態檔
Linux 下 Nginx 組態檔路徑一般如下:
/usr/local/nginx/conf/nginx.conf
組成部分:
# 全域塊
...
# events 塊
events {
...
}
# http 塊
http {
# http 全域塊
...
# server 塊
server {
# 全域 server 塊
...
# location 塊
location /uri-string {
...
}
}
...
}
- 全域塊:從組態檔到 events 塊之間的內容,主要會設定一些影響 nginx 服務器整體運行的配置指令,主要包括配置運行 Nginx 服務器的用戶(組)、允許生成的 worker process 數,行程 PID 存放路徑、日志存放路徑和型別以及組態檔的引入等
- events 塊:主要影響 Nginx 服務器與用戶之間的網路連接,常用的設定包括是否開啟對多 work process 下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等
- http 塊:配置最頻繁的部分,代理、快取和日志定義等絕大多數和第三方模塊配置都在這里,http 塊也包括 http 全域塊和 server 塊
- http 全域塊:配置指令包括檔案引入、MINE-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數上限等
- server 塊:和虛擬主機密切相關,虛擬主機從用戶角度看,和一臺獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網服務器硬體成本,每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當于一個虛擬主機,每個 server 塊也分為全域 server 塊,以及可以同時包含多個 location 塊
- 全域 server 塊:最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或 IP 配置
- location 塊:一個 server 塊可以配置多個 location 塊,這塊的主要作用是基于 Nginx 服務器接收到的請求字串(例如 server_name/uri-string),對虛擬主機名稱(也可以是 IP 別名)之外的字串(例如前面的 /uri-string)進行匹配,對特定的請求進行處理、地址定向、資料快取和應答控制等功能,還有許多第三方模塊也在這里配置
Nginx 配置實體
1. 反向代理
啟動 Tomcat 并開發對外埠,配置 nginx.conf
server {
...
server_name [IP地址]
...
location / {
...
proxy_pass http://127.0.0.1:8080
...
}
}
啟動兩個 Tomcat 并分發不同的對外埠,根據訪問路徑跳轉到不同埠的服務
server {
listen 9001 # 監聽埠
server_name [IP地址]
location ~/edu/ { # 正則運算式寫法,匹配符合條件的路徑
...
proxy_pass http://127.0.0.1:8080
...
}
location ~/vod/ { # 正則運算式寫法,匹配符合條件的路徑
...
proxy_pass http://127.0.0.1:8081
...
}
}
2. 負載均衡
啟動兩個 Tomcat 并分發不同的對外埠,配置 nginx.conf
http {
...
upstream myserver {
# ip_hash
# fair
server 192.168.17.219:8080 # 第一個ip:port
# server 192.168.17.219:8080 weight=1 # 分配權重
server 192.168.17.219:8081 # 第二個ip:port
}
...
server {
listen 80 # 監聽埠
server_name 192.168.17.219 # IP地址
location / {
...
proxy_pass http://myserver
...
}
}
}
分配方式:
- 輪詢(默認):每個請求按時間順序逐一分配到不同的后端服務器,能自動剔除宕機的服務器
- weight:代表權重,默認為 1,權重越高被分配的客戶端越多
- ip_hash:每個請求按照 ip 的 hash 結果分配,這樣每個 ip 固定訪問一個后端服務器,可以解決 session 問題
- fair:按后端服務器的回應時間來分配請求,回應時間短的優先分配
3. 分配方式
配置 nginx.conf
server {
listen 80 # 監聽埠
server_name 192.168.17.219 # IP地址
location /www/ { # 正則運算式
...
root /data/; # 靜態資源路徑
index index.htm index.html
...
}
location /image/ {
root /data/;
autoindex on # 回傳檔案目錄內容
}
}
Nginx 原理決議
1. master-workers
每個 worker 都是獨立的行程,不需要加鎖,不會影響其他 worker,每個 worker 都可以把 cpu 的性能發揮到極致,因此 worker 數量最好與 cpu 數相同
可以熱部署,正在作業的 worker 完成作業后再加載,其他 worker 立即重新加載

2. 連接數 worker-connection
一個請求占用 worker 兩個(一去一回)或四個連接數(需要訪問 Tomcat),每個 worker 支持最大的連接數是 1024,支持的最大并發數是 4*1024/2 或者 4*1024/4
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555445.html
標籤:其他
下一篇:返回列表
