文章目錄
- 1. nginx安裝部署
- 1.1 windows安裝包
- 1.2 linux-源碼編譯
- 1.3 linux-docker安裝
- 2. nginx介紹
- 2.1 簡介
- 2.2 常用命令
- 2.3 nginx運行原理
- 2.3.1 mater和worker
- 2.3.3 Nginx 的工作原理
- 2.4 nginx的基本配置文件
- 2.4.1 location指令說明
- 3. nginx案例
- 3.1 nginx-反向代理案例01
- 3.2 nginx-反向代理案例02
- 3.3 nginx-負載均衡
- 3.4 nginx-動靜分離
1. nginx安裝部署
1.1 windows安裝包
下載到本地E:\nginx-1.24.0,直接解壓,啟動即可
參考: https://blog.csdn.net/weixin_44251179/article/details/129700793
./nginx 啟動
./nginx -s stop 快速停止
./nginx -s quit 優雅關閉,在退出前完成已經接受的連接請求
./nginx -s reload 重新加載配置
1.2 linux-源碼編譯
參考: https://www.yuque.com/wexiao/nginx/aprmou#oVdwh
1、下載源碼包.tar.gz放到linux操作系統 … 目錄下,使用tar -zxvf解壓縮
2、安裝Nginx需要C語言編譯器等環境
安裝 gcc yum install -y gcc安裝perl庫 yum install -y pcre pcre-devel 安裝zlib庫 yum install -y zlib zlib-devel
3、編譯執行
./configure --prefix=/usr/local/nginx
make
make install
4、查看 /usr/local目錄,確定安裝成功
5、啟動Nginx
cd /usr/local/nginx/sbin
./nginx
默認監聽80端口,如果被占用,要么該端口,要么殺對應進程
1.3 linux-docker安裝
1、下載鏡像docker pull nginx
2、啟動容器docker run -d --name=mynginx --restart=always -p 80:80 nginx
3、停止容器docker stop 容器名稱或容器id
# 查看nginx安裝位置which nginx /usr/sbin/nginx
# 查找nginx配置文件的位置nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# 從 / 根目錄下查找文件名為 nginx.conf 的文件find / -name nginx.conf
2. nginx介紹
2.1 簡介
Nginx是高性能的HTTP和反向代理的web服務器,處理高并發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
- 正向代理
如果把局域網外的 Internet想象成一個巨大的資源庫,則局域網中的客戶端要訪問Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理。簡單一點:通過代理服務器來訪問服務器的過程 就叫 正向代理。需要在客戶端配置代理服務器進行指定網站訪問 - 反向代理
反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問。我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據后,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器 IP 地址。
2.2 常用命令
./nginx 啟動 nginx
./nginx -s stop 快速停止
./nginx -s quit 優雅關閉,在退出前完成已經接受的連接請求
./nginx -s reload 重新加載 nginx(在目錄:/usr/local/nginx/sbin 下執行命令,不需要重啟服務器,自動編譯)
which nginx 查看nginx安裝位置(/usr/sbin/nginx)
nginx -t 查找nginx配置文件的位置(nginx: the configuration file /etc/nginx/nginx.conf syntax is ok)
2.3 nginx運行原理
2.3.1 mater和worker
nginx 啟動后,是由兩個進程組成的。master(管理者)和worker(工作者)。一個nginx 只有一個master。但可以有多個worker
Nginx 采用事件驅動架構,其主要組件包括:
? Master 進程(Master Process):負責管理 Worker 進程,接受來自管理員的信號,并處理配置文件的加載和重新加載。
? Worker 進程(Worker Processes):實際處理客戶端請求的進程。Nginx 通常有多個 Worker 進程,每個進程都能夠獨立地處理連接和請求。這種多進程的設計使得 Nginx 能夠充分利用多核處理器和多線程的優勢。
? 配置文件(Configuration Files):Nginx 使用簡潔而靈活的配置文件來定義服務器的行為。配置文件通常包括全局配置、HTTP 模塊配置、Server 配置以及 Location 配置。
2.3.3 Nginx 的工作原理
當客戶端發送請求到 Nginx 服務器時,Nginx 的工作過程可以分為以下幾個步驟:
? 接受連接(Accept Connections):Master 進程負責監聽端口并接受客戶端的連接請求。
? 選擇 Worker 進程(Choose Worker Processes):Master 進程會將新連接分配給空閑的 Worker 進程,或者根據一定的負載均衡策略分配連接。
? 處理請求(Process Request):Worker 進程接收到連接后,會從連接讀取請求并將其傳遞給相應的處理模塊。根據配置,Nginx 可以處理靜態文件、代理請 求、負載均衡以及其他各種任務。
? 生成響應(Generate Response):處理模塊根據請求生成相應的響應,并將其發送回客戶端。
? 關閉連接(Close Connection):一旦請求完成,連接可以保持活動狀態以便復用,或者被關閉以釋放資源。
2.4 nginx的基本配置文件
/usr/local/nginx/conf/nginx.conf
nginx 配置文件有三部分組成
第一部分:全局塊
從配置文件開始到 events 塊之間的內容,主要會設置一些影響nginx 服務器整體運行的配置指令,主要包括配 置運行 Nginx 服務器的用戶(組)、允許生成的 worker process 數,進程 PID 存放路徑、日志存放路徑和類型以 及配置文件的引入等。
比如上面第一行配置的:worker_processes 1;
第二部分:events塊
? events 塊涉及的指令主要影響 Nginx 服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work process 下的網絡連接進行序列化,是否 允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等。
上述例子就表示每個 work process 支持的最大連接數為 1024,這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。
第三部分:http塊
? 這算是 Nginx 服務器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數功能和第三方模塊的配置都在這里。
需要注意的是:http 塊也可以包括 http全局塊、server 塊。
#允許進程數量,建議設置為cpu核心數或者auto自動檢測,注意Windows服務器上雖然可以啟動多個processes,但是實際只會用其中一個
worker_processes 1; events {#單個進程最大連接數(最大連接數=連接數*進程數)#根據硬件調整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。worker_connections 1024;
}http {#文件擴展名與文件類型映射表(是conf目錄下的一個文件)include mime.types;#默認文件類型,如果mime.types預先定義的類型沒匹配上,默認使用二進制流的方式傳輸default_type application/octet-stream;#sendfile指令指定nginx是否調用sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,必須設為on。如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡IO處理速度。sendfile on; #長連接超時時間,單位是秒keepalive_timeout 65;server { #虛擬主機的配置listen 80; #監聽端口server_name localhost; #域名,可以有多個,用空格隔開location / { #配置根目錄以及默認頁面root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html; #出錯頁面配置location = /50x.html { #/50x.html文件所在位置root html;}}
}
2.4.1 location指令說明
該指令用于匹配 URL,lcation 是有順序的,會根據不同請求配置的優先級來匹配的location 處理。
語法如下:
location [=|~|~*|^~|@] pattern{……}= # 表示精確匹配,優先級也是最高的【精確匹配】 ^~ # 表示uri以某個常規字符串開頭,只匹配普通字符串,不匹配正則表達式 【前綴匹配】~ # 表示區分大小寫的正則匹配 【正則表達式匹配】~* # 表示不區分大小寫的正則匹配 【正則表達式匹配】!~ # 表示區分大小寫不匹配的正則 【正則表達式匹配取反】!~* # 表示不區分大小寫不匹配的正則【正則表達式匹配取反】/ # 通用匹配,任何請求都會匹配到@ # 內部服務跳轉注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~*標識。匹配優先級:1、匹配優先級為:從上(=)至下(@)優先級依次遞減,也就是說“=”的優先級最高,“@”優先級最低。2、多個location配置的情況下匹配順序為:首先匹配 =,其次匹配^~, 其次是按正則匹配,最后是交給 通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。案例1:
location = /abc/ { # 內容要同表達式完全一致才匹配成功.....
}
# http://abc.com/abc [匹配成功]
# http://abc.com/abc/index [匹配失敗]案例2:
location ~ /Abc/ { # 執行正則匹配,區分大小寫.....
}
# http://abc.com/Abc/ [匹配成功]
# http://abc.com/abc/ [匹配失敗]案例3:
location ~* /Abc/ { # 執行正則匹配,忽略大小寫.....
}
# http://abc.com/Abc/ [匹配成功]
# http://abc.com/abc/ [匹配成功]案例4:
location ^~ /index/ { # 以 /index/ 開頭的請求,都會匹配上.....
}
# http://abc.com/index/index.page [匹配成功]
# http://abc.com/error/error.page [匹配失敗]案例5:
location /index/ { # 不加任何規則時,默認是大小寫敏感,前綴匹配,相當于加了“~”與“^~”......
}
# http://abc.com/index [匹配成功]
# http://abc.com/index/index.page [匹配成功]
# http://abc.com/test/index [匹配失敗]
# http://abc.com/Index [匹配失敗]案例6:
location /index/ { # “@”,nginx內部跳轉error_page 404 @index_error;
}
location @index_error {.....
}
# 以 /index/ 開頭的請求,如果鏈接的狀態為 404。則會匹配到 @index_error 這條規則上。
3. nginx案例
3.1 nginx-反向代理案例01
實現效果:在本地打開瀏覽器,在瀏覽器地址欄輸入地址 www.zp.com,跳轉到 liunx 系統 tomcat 主頁面
1、服務器安裝tomcat
docker search tomcat
docker pull tomcat
docker run --name mytomcat -d -p 18080:8080 tomcat # 對外提供18080端口
外網訪問404:原因是查tomcat目錄下的webapps文件夾下為空,但是多了個webapps.dist,解決辦法詳見:https://blog.csdn.net/mo_sss/article/details/131878812
保證外網直接可訪問:
2、windows 系統的 host 文件進行域名和 ip 對應關系的配置
3、在 nginx 進行請求轉發的配置(反向代理配置)
4、最終效果
3.2 nginx-反向代理案例02
實現效果:服務器統一對外提供接口8001,通過nginx 反向代理實現根據訪問的路徑跳轉到不同端口的tomcat服務
訪問 http://172.21.231.207:8001/edu/ 直接跳轉到 127.0.0.1:18080的訪問頁
訪問 http://172.21.231.207:8001/vod/ 直接跳轉到 127.0.0.1:28080的訪問頁
1、部署2個tomcat服務,指定2個不同的端口18080、28080,并準備好測試a.html,放到不同tomcat服務的目錄下,分別是 18080的/webapp/vod、 28080的/webapp/edu,達到外網可以訪問的效果。
2、修改nginx的配置文件
3、最終效果
3.3 nginx-負載均衡
實現效果: 瀏覽器地址欄輸入地址 http://172.21.231.207:8001/vod/a.html,實現負載均衡效果,平均18080 和 28080 端口中
1、準備條件:2臺tomcat部署不同端口的服務,分別18080、28080端口,在webapps都建立/vod/a.html文件,外網可正常訪問
2、修改nginx配置文件,進行負載均衡的配置,對外統一提供接口8001
3、效果
4、nginx 分配服務器策略
a. 輪詢(默認)
upstream myserver {server 172.21.231.207:18080; server 172.21.231.207:28080 down;}
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,能自動剔除。b. weight
weight 代表權重, 默認為 1,權重越高被分配的客戶端越多
upstream myserver {server 172.21.231.207:18080 weight=10; server 172.21.231.207:28080 weight=10;}c. ip_hash
ip_hash 每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器
upstream myserver {ip_hash;server 172.21.231.207:18080 weight=10; server 172.21.231.207:28080 weight=10;}d. fair(第三方)
fair(第三方),按后端服務器的響應時間來分配請求,響應時間短的優先分配。upstream myserver { server 208.208.128.122:8081 ; server 208.208.128.122:8082 ;fair; }
3.4 nginx-動靜分離
Nginx 動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和 靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用 Nginx 處理靜態頁面,Tomcat 處理動態頁面。動靜分離從目前實現角度來講大致分為兩種:
1、一種是純粹把靜態文件獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;
2、另外一種方法就是動態跟靜態文件混合在一起發布,通過 nginx 來分開。
1、準備工作:在Linux 系統中準備 靜態資源,用于進行訪問。
2、nginx配置:
3、效果:訪問靜態資源