Nginx 學習筆記

来源:https://www.cnblogs.com/Yee-Q/archive/2023/06/17/17487736.html
-Advertisement-
Play Games

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


概述

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好家伙,爬蟲來了 爬蟲,這玩意,不會怎麼辦, 誒,先抄一份作業回來 1.別人的爬蟲 Python爬蟲史上超詳細講解(零基礎入門,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -*- codeing = utf-8 -*- from bs4 import BeautifulSoup ...
  • ## 一、創建宿主機物理路徑 新建/mydata/mysql/data、log和conf三個文件夾 ```bash mkdir -p /mnt/mysql/log mkdir -p /mnt/mysql/data mkdir -p /mnt/mysql/config ``` 或者 ```bash m ...
  • 某日二師兄參加XXX科技公司的C++工程師開發崗位第17面: > 面試官:聊一聊指針? > > 二師兄:好的。 > > 面試官:你覺得指針本質上是什麼? > > 二師兄:這要從記憶體地址開始說起了。如果有一塊容量是1G的記憶體,假設它的地址是從`0x00000000` 到`0x3fffffff`,每一個 ...
  • # Java 註釋、絕對路徑、相對路徑、基本Dos命令 # 1. Java的三種註釋方式 ## 註釋能增加代碼的可讀性,習慣寫註釋能提升我們編寫代碼的能力 > ### 單行註釋:用//註釋一些代碼提示 > > ### 多行註釋:以/*為開頭 以 */為結束 > > ### 文檔註釋:/* > > # ...
  • # 1.Java 發展歷史 ### 由高斯林創建 1995年由甲骨文公司收購併發出第一版本,目前使用最多是Java8 及 Java11 原因是這兩個版本都是長期支持維護的,企業用的也比較多。 # 2.Java的一些特點 > ### 跨平臺性:主要是因為每個平臺都裝有 JVM > ### Java 是 ...
  • #### 1. 跳出/執行下一次迴圈。 ``` {標簽名}: for true { ... for true { ... break/continue {標簽名} //預設不加標簽,則跳出最近一層迴圈。加了標簽可以跳出標簽定義處所在迴圈 } } ``` #### 2. map的使用註意項。 因為ma ...
  • 最近在弄文件上傳、下載、線上預覽時經常需要設置請求標頭或者響應標頭的Content-Type 屬性。所以研究了一下spring支持哪些Content-Type,通過研究MediaTypeFactory.getMediaType的源碼,可以得知spring是將支持的Content-Type 維護在/o... ...
  • # Go 語言之在 gin 框架中使用 zap 日誌庫 ### gin 框架預設使用的是自帶的日誌 #### `gin.Default()`的源碼 Logger(), Recovery() ```go func Default() *Engine { debugPrintWARNINGDefault ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...