Nginx實戰(安裝部署、常用命令、反向代理、負載均衡、動靜分離)

文章目錄

  • 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運行原理

image-20220429201217315

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 配置。

img

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 每個請求按訪問 iphash 結果分配,這樣每個訪客固定訪問一個后端服務器
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、效果:訪問靜態資源

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16099.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構和算法|排序算法系列(三)|插入排序(三路排序函數std::sort)

首先需要你對排序算法的評價維度和一個理想排序算法應該是什么樣的有一個基本的認知: 《Hello算法之排序算法》 主要內容來自:Hello算法11.4 插入排序 插入排序的整個過程與手動整理一副牌非常相似。 我們在未排序區間選擇一個基準元素,將…

移動云以深度融合之服務,令“大”智慧貫穿云端

移動云助力大模型,開拓創新領未來。 云計算——AI模型的推動器。 當前人工智能技術發展的現狀和趨勢,以及中國在人工智能領域的發展策略和成就。確實,以 ChatGPT 為代表的大型語言模型在自然語言處理、文本生成、對話系統等領域取得了顯著的…

項目管理:敏捷實踐框架

一、初識敏捷 什么是敏捷(Agile)?敏捷是思維方式。 傳統開發模型 央企,國企50%-60%需求分析。整體是由文檔控制的過程管理。 傳統軟件開發面臨的問題: 交付周期長:3-6個月甚至更長溝通效果差:文檔化溝通不及時按時發布低:技術債增多無法發版團隊士氣弱:死亡行軍不關注…

Vmware 17安裝 CentOS9

前言 1、提前下載好需要的CentOS9鏡像,下載地址,這里下載的是x86_64 2、提前安裝好vmware 17,下載地址 ,需要登錄才能下載 安裝 1、創建新的虛擬機 2、在彈出的界面中選擇對應的類型,我這里選擇自定義,點…

python command亂碼怎么解決

python command亂碼怎么解決?具體方法如下: 先引入import sys 再加一句:typesys.getfilesystemencoding() 然后在輸出亂碼的數據的后面加上“.decode(utf-8).encode(type)”。 比如輸入“ss”亂碼。 就寫成print ss.decode(utf-8).encode(typ…

USB - Host controller類型介紹

USB 主機控制器類型 USB 主機控制器是計算機系統中的重要組件,負責管理計算機與連接的 USB 設備之間的通信。多年來,針對不同的 USB 標準和數據傳輸速率,開發了多種類型的 USB 主機控制器。以下是主要 USB 主機控制器類型的概述: …

【話題】AIGC行業現在適合進入嗎

大家好,我是全棧小5,歡迎閱讀小5的系列文章,這是《話題》系列文章 目錄 引言AIGC的發展階段市場需求時機是否合適優勢挑戰 文章推薦 引言 在撰寫關于當前是否適合進入AIGC(人工智能生成內容)行業的文章之前&#xff0…

從零實現Llama3中文版

1.前言 一個月前,Meta 發布了開源大模型 llama3 系列,在多個關鍵基準測試中優于業界 SOTA 模型,并在代碼生成任務上全面領先。 此后,開發者們便開始了本地部署和實現,比如 llama3 的中文實現、llama3 的純 NumPy 實現…

數據結構——鏈式二叉樹知識點以及鏈式二叉樹數據操作函數詳解!!

引言:該博客將會詳細的講解二叉樹的三種遍歷方法:前序、中序、后序,也同時會講到關于二叉樹的數據操作函數。值得一提的是,這些函數幾乎都是建立在一個函數思想——遞歸之上的。這次的代碼其實寫起來十分簡單,用不了幾…

告別紅色波浪線:tsconfig.json 配置詳解

使用PC端的朋友,請將頁面縮小到最小比例,閱讀最佳! tsconfig.json 文件用于配置 TypeScript 項目的編譯選項。如果配不對,就會在項目中顯示一波又一波的紅色波浪線,警告你這些地方的類型聲明存在問題。 一般我們遇到這…

在沒有dubbo-admin情況下如何判斷zk中注冊的dubbo服務是否注冊成功

通常我們都是通過dubbo-admin來查看dubbo服務是否注冊成功,那么如果沒有部署dubbo-admind的情況下,我們如何來判斷dubbo服務是否注冊成功: 一、首先我們進入到zookeeper bin目錄下使用以下指令連接到zk: ./zkCli.sh -server ip:port ip&…

Linux文件系統原理

Linux文件系統 馮諾依曼在1945年提出計算機的五大組成部分 運算器:CPU 控制器:CPU 存儲器:內存和硬盤 輸入設備:鼠標、硬盤 輸出設備:顯示器一、硬盤結構 機械硬盤結構 扇區:硬盤的最小存儲單位&#xff…

Transformer講解大綱,寫PPT的可參考

前言 在這個信息如星辰般璀璨的時代,我們被無數的語言和文字包圍。它們如同夜空中閃爍的繁星,每一顆都蘊藏著獨特的故事和知識。然而,如何解讀這些星辰的秘密,如何將它們的光芒匯聚成智慧的海洋,成為了我們這個時代的挑戰。今天,我們將一起探索一種名為Transformer的神秘…

【路徑規劃】基于遺傳算法GA實現最短距離 多起點多終點多旅行商問題求解附Matlab代碼

基于遺傳算法GA實現最短距離 多起點多終點多旅行商問題求解 研究背景:研究步驟:研究方法和技術路線:代碼研究背景: 多起點多終點多旅行商問題是旅行商問題(TSP)的一個擴展,該問題要求確定多個旅行商從各自的起點出發,分別經過一系列目標點最終回到各自的終點,使得總路…

IOT技術怎么落地?以寶馬,施耐德為例

物聯網技術 物聯網(IoT)技術正逐漸成為數字化工廠轉型的核心驅動力。本文將通過實際案例,探討IoT技術如何促進制造業的數字化轉型,提高生產效率,降低成本,并提升產品質量。 1. 物聯網技術簡介 物聯網技術通…

vue 模擬隨機經緯度(小數點后保留6位),直接可用

1.隨機生成經緯度 // 隨機生成經緯度的方法function generateRandomLatLng(latitudeRange, longitudeRange) {const randomLat (Math.random() * latitudeRange.max latitudeRange.min).toFixed(6)const randomLng (Math.random() * longitudeRange.max longitudeRange.mi…

MySQL數據庫基礎:使用、架構、SQL語句、存儲引擎

文章目錄 什么是數據庫CS模式 基本使用安裝鏈接服務器服務器、數據庫、表關系簡單使用數據庫在Linux下的體現 MySQL架構連接器層客戶端層服務層存儲引擎層物理存儲層 SQL分類存儲引擎 什么是數據庫 mysql:數據庫服務的客戶端mysqld:數據庫服務的服務器端…

PLC_博圖系列?R_TRIG:檢測信號上升沿

PLC_博圖系列?R_TRIG:檢測信號上升沿 文章目錄 PLC_博圖系列?R_TRIG:檢測信號上升沿背景介紹R_TRIG: 檢測信號上升沿說明參數示例 關鍵字: PLC、 西門子、 博圖、 Siemens 、 R_TRIG 背景介紹 這是一篇關于PLC編程的文章&a…

[ C++ ] 類和對象( 中 ) 2

目錄 前置和后置重載 運算符重載和函數重載 流插入流提取的重載 全局函數訪問類私有變量 友員 const成員 取地址及const取地址操作符重載 前置和后置重載 運算符重載和函數重載 流插入流提取的重載 重載成成員函數會出現順序不同的情況(函數重載形參順序必須相…

數據結構(五)樹與二叉樹

2024年5月26日一稿(王道P142) 基本概念 術語 性質 二叉樹 5.2.2 二叉樹存儲結構