Nginx介紹及使用

1.Nginx介紹

Nginx是一款開源的、高性能的HTTP和反向代理服務器

1.正向代理和反向代理

正向代理(代理客戶端)是一種位于客戶端和目標服務器之間的中間服務器。客戶端通過正向代理服務器向目標服務器發送請求,代理服務器將請求轉發給目標服務器,并將目標服務器的響應返回給客戶端

反向代理(代理服務端)客戶端的請求首先發送到反向代理服務器,反向代理服務器再將請求轉發到后端的服務器。后端服務器處理請求后,將響應返回給反向代理服務器,反向代理服務器再將響應返回給客戶端。

2.負載均衡(Load Balancing)

負載均衡用于在多個服務器之間分配客戶端的請求,以優化資源利用、提高系統的可用性和可靠性。

主要功能
  1. 流量分配

    • 根據預設的算法(如輪詢、最少連接、加權等),將客戶端的請求分配到不同的服務器上,避免某一臺服務器過載。

    • 常見的算法包括:

      • 輪詢(Round Robin):按順序依次分配請求。

      • 最少連接(Least Connections):優先分配到當前連接數最少的服務器。

      • 加權輪詢(Weighted Round Robin):根據服務器的權重分配請求。

      • 加權最少連接(Weighted Least Connections):結合權重和連接數分配請求。

      • IP哈希(IP Hash):根據客戶端的IP地址進行哈希計算,將請求分配到固定的服務器。

  2. 故障轉移(Failover)

    • 當某一臺服務器出現故障時,能夠自動將流量切換到其他健康的服務器上,確保服務的持續可用。

    • 負載均衡器會定期檢查后端服務器的健康狀態,自動移除故障服務器,并重新分配流量。

3.Nginx

主要特點
  1. 高性能

    • Nginx采用事件驅動的異步非阻塞架構,能夠處理大量的并發連接,性能優于傳統的Apache服務器。

    • 它可以輕松處理數萬個并發連接,適合高流量的網站。

  2. 反向代理和負載均衡

    • Nginx可以作為反向代理服務器,將客戶端請求轉發到后端的多個服務器上,并根據配置的策略進行負載均衡。

    • 支持多種負載均衡算法,如輪詢、最少連接、IP哈希等。

  3. 靜態文件服務

    • Nginx對靜態文件(如HTML、CSS、JavaScript、圖片等)的處理非常高效,可以直接從磁盤讀取文件并返回給客戶端,減少后端服務器的負擔。

?2.Nginx啟動和停止

1.?啟動 Nginx

sudo systemctl start nginx
sudo nginx
  • 說明:啟動 Nginx 服務。

2.?停止 Nginx

bash復制

sudo systemctl stop nginx

或者

bash復制

sudo nginx -s stop
  • 說明:立即停止 Nginx 服務。

3.?重啟 Nginx

bash復制

sudo systemctl restart nginx

或者

bash復制

sudo nginx -s reload
  • 說明:重新加載 Nginx 配置文件而不中斷現有連接。

4.?重新加載配置文件

bash復制

sudo nginx -s reload
  • 說明:重新加載 Nginx 配置文件而不中斷現有連接。如果配置文件有語法錯誤,Nginx 會拒絕加載。

3.Nginx配置
/etc/nginx/nginx.conf

nginx.conf
├── 全局塊
├── events 塊
└── http 塊
? ? ├── 通用設置(日志、MIME等)
? ? ├── server 塊(一個網站)
? ? │ ? ├── listen / server_name
? ? │ ? ├── location /(靜態文件或反向代理)
? ? │ ? └── error_page
? ? └── ...
?

# 全局塊
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;# 事件塊
events {worker_connections  1024;
}# HTTP 塊
http {include       mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;keepalive_timeout  65;# 1?? 定義后端服務集群(upstream)upstream my_backend {server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=30s;server 127.0.0.1:8082 weight=1;}# 服務器塊server {listen       80;server_name  localhost;# 位置塊location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 錯誤頁error_page  404              /404.html;location = /404.html {root   /usr/share/nginx/html;}# 反向代理示例location /api/ {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
?proxy_set_header Host $host;
  • proxy_set_header 指令用于設置轉發請求時的 HTTP 頭。

  • Host $host; 表示在轉發請求時,將原始請求的 Host 頭設置為 $host(即客戶端請求的域名或 IP 地址)。這確保后端服務器能夠正確處理請求,因為它知道請求原本是針對哪個域名的。

proxy_set_header X-Real-IP $remote_addr;
  • 這行配置設置了 X-Real-IP 頭,值為 $remote_addr,即客戶端的真實 IP 地址。

  • 由于 Nginx 作為代理服務器,后端服務器看到的請求來源是 Nginx 的 IP 地址(通常是 127.0.0.1)。通過設置 X-Real-IP,后端服務器可以知道實際發起請求的客戶端 IP 地址。

用途配置示例
靜態文件服務location / { root /path/to/html; }
反向代理proxy_pass http://backend;
負載均衡upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; }
HTTPS 配置使用 listen 443 ssl;ssl_certificate 等參數

3.Nginx安裝

1. 什么是 --with-stream

這個參數是用來啟用 Nginx 的 Stream 模塊的。

  • 默認情況下,Nginx 只支持 HTTP、HTTPS 等基于應用層的協議。

  • 加上 --with-stream,你就可以讓 Nginx 作為 TCP 或 UDP 的反向代理使用,比如:

    • 代理 MySQL、Redis、FTP 等 TCP 服務

    • 或者代理 DNS、QUIC 等 UDP 服務

2. 源碼安裝 Nginx 并啟用 --with-stream

1 下載官方 Nginx 源碼包:

wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0

2. 配置編譯選項(重點是加上 --with-stream):

./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-stream \ --with-stream_ssl_module

3. 編譯并安裝:

make -j$(nproc) sudo make install

安裝完成后,nginx 會被裝在 /usr/local/nginx 下。

4.驗證安裝是否成功

/usr/local/nginx/sbin/nginx -V
#啟動 nginx:sudo /usr/local/nginx/sbin/nginx#然后查看是否啟動成功:ps aux | grep nginx

5.設置 nginx 命令軟鏈接(可選)

sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

以后就可以直接用 nginx 命令了。

4.Nginx使用

1.準備多個后端服務

方法1:使用?nc(netcat)模擬 TCP 服務

使用 nc 模擬兩個簡單的 TCP 服務,分別在端口 50015002 上監聽。

# 模擬兩個 TCP 后端服務器(不同端口)
nc -lk 5001 <<< "hello from backend 1"
nc -lk 5002 <<< "hello from backend 2"
  • -l:監聽模式。

  • -k:在連接關閉后繼續監聽。

  • <<<:將字符串作為輸入傳遞給 nc

這樣,你就有兩個簡單的 TCP 服務,分別在 50015002 上監聽。

2. 配置 Nginx 的?stream?負載均衡

編輯你的 Nginx 配置文件 /usr/local/nginx/conf/nginx.conf,添加如下內容(保留原來的 events {} 塊):

stream {upstream backend_group {least_conn;  # 負載均衡策略:最少連接,可改為 round-robin(默認)server 127.0.0.1:5001 weight=1 max_fails=2 fail_timeout=20s;server 127.0.0.1:5002 weight=2 max_fails=4 fail_timeout=40s;# fail_timeout 多長時間內允許服務器失敗的次數達到 max_fails}server {listen 6000;proxy_pass backend_group;proxy_connect_timeout 3s;  # 設置 Nginx 與后端服務器建立連接的超時時間tcp_nodelay on;  # 禁用 Nagle 算法}    
}
nginx -t
sudo nginx -s reload

3.測試負載均衡是否生效

使用 telnetnetcat 連接 Nginx 暴露的端口:

nc 127.0.0.1 6000

多次連接,或者從多個終端連接,你應該會輪流連接到 50015002,分別輸出不同的 "hello from backend"

for i in {1..10}; do nc 127.0.0.1 6000; done

觀察輸出是否輪流從兩個后端返回。

5.查看網絡連接狀態

sudo netstat -tanp 

是一個常用的 Linux 命令,用于顯示當前系統中所有網絡連接的狀態。這個命令可以幫助你查看哪些進程正在監聽特定端口,以及當前的網絡連接情況。

命令解釋

  • netstat:顯示網絡連接、路由表、接口統計等網絡相關信息。

  • -t:顯示 TCP 連接。

  • -a:顯示所有網絡連接(包括監聽和非監聽狀態)。

  • -n:顯示數字形式的地址和端口,而不是解析為域名或服務名稱。

  • -p:顯示每個連接的進程 ID 和進程名稱。

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

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

相關文章

復古未來主義屏幕輝光像素化顯示器反烏托邦效果PS(PSD)設計模板樣機 Analog Retro-Futuristic Monitor Effect

這款模擬復古未來主義顯示器效果直接取材于 90 年代賽博朋克電影中的黑客巢穴&#xff0c;將粗糙的屏幕輝光和像素化的魅力強勢回歸。它精準地模仿了老式陰極射線管顯示器&#xff0c;能將任何圖像變成故障頻出的監控畫面或高風險的指揮中心用戶界面。和……在一起 2 個完全可編…

[巴黎高師課程] 同步反應式系統(2024-2025)第三課 - Kind 2: 基于SMT的Lustre模型檢查器

在2024-2025學期的巴黎高師同步反應式系統(2024-2025)第三課中&#xff0c;詳細討論了基于SMT的Lustre模型檢查器Kind 2的工作。本文將提供對Kind 2的介紹。對課程的詳細內容&#xff0c;可參考同步反應式系統 簡介 本節課討論了基于SMT&#xff08;Satisfiability Modulo The…

軌道交通裝備三維檢測與輕量化設計

地鐵車身與車燈部件作為軌道交通裝備的核心組成部分&#xff0c;其制造精度和性能要求極高。由于它們體積龐大、曲面復雜&#xff0c;傳統檢測方法在面對這些大型、復雜部件時&#xff0c;不僅耗時費力&#xff0c;而且難以實現全面、精確的測量&#xff0c;難以滿足高效、準確…

2025大唐杯仿真1——車聯網

車聯網 V2N是指車輛與網絡 Uu接口是用戶設備&#xff08;UE&#xff09;與基站之間的通信接口&#xff0c;用于終端和基站之間的通信 Uu接口可用的是N41頻段&#xff0c;歸屬中國移動 車輛間交互是V2V&#xff0c;頻段是PCS PC5接口是一種用于設備間直接通信&#xff08;D2D…

網絡編程—TCP/IP模型(TCP協議)

上篇文章&#xff1a; 網絡編程—TCP/IP模型&#xff08;UDP協議與自定義協議&#xff09;https://blog.csdn.net/sniper_fandc/article/details/146923934?fromshareblogdetail&sharetypeblogdetail&sharerId146923934&sharereferPC&sharesourcesniper_fand…

python logging模塊

以下是 Python 中 logging 模塊的基礎使用示例和配置說明: 簡單配置版(適合快速使用) import logging as log# 基礎配置(輸出到控制臺) log.basicConfig(level=log.DEBUG, # 設置最低日志級別format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

HikariCP 源碼核心設計解析與 ZKmall開源商城場景調優實踐

HikariCP 作為 Spring Boot 默認數據庫連接池&#xff0c;其高性能源于獨特的無鎖設計、輕量級數據結構和精細化生命周期管理。以下從源碼解析與 ZKmall開源商城性能調優兩個維度展開&#xff1a; 一、HikariCP 源碼核心設計解析 ?無鎖并發控制與 ConcurrentBag 容器 ?Concur…

【模型量化】GPTQ 與 AutoGPTQ

GPTQ是一種用于類GPT線性最小二乘法的量化方法&#xff0c;它使用基于近似二階信息的一次加權量化。 本文中也展示了如何使用量化模型以及如何量化自己的模型AutoGPTQ。 AutoGPTQ&#xff1a;一個易于使用的LLM量化包&#xff0c;帶有用戶友好的API&#xff0c;基于GPTQ算法(僅…

如何部署DeepSeek企業知識庫:

一、核心部署流程 環境準備? 安裝Ollama框架:官網下載安裝包并完成基礎配置,需確保安裝路徑不含中文?; 硬件要求:根據企業規模選擇設備,如小微團隊建議i5十代+16GB內存,中大型企業需GPU集群(如NVIDIA A100/H100)?。 模型選擇與下載? 通過Ollama下載DeepSeek-R1…

FastAPI依賴注入:鏈式調用與多級參數傳遞

title: FastAPI依賴注入:鏈式調用與多級參數傳遞 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdragon excerpt: FastAPI的依賴注入系統通過鏈式調用和多級參數傳遞實現組件間的解耦和復用。核心特性包括解耦性、可復用性、可測試性和聲明式依賴解析…

前沿計組知識入門(四)

Training Large Networks in Parallel 計算機集群上高效訓練大型深度神經網絡&#xff08;DNN&#xff09;的方法和技術。從神經網絡的基本概念出發&#xff0c;逐步深入到并行訓練的具體實現策略&#xff0c;包括數據并行、模型并行以及參數服務器的設計等。 研究背景與動機…

Transformer+BO-SVM多變量時間序列預測(Matlab)

TransformerBO-SVM多變量時間序列預測&#xff08;Matlab&#xff09; 目錄 TransformerBO-SVM多變量時間序列預測&#xff08;Matlab&#xff09;效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 本期推出一期高創新模型&#xff0c;基于Transformer提取時序特征后輸入S…

SQL BETWEEN 語句詳解

SQL BETWEEN 語句詳解 概述 SQL BETWEEN 語句是一個用于在 SQL 查詢中指定查詢條件的重要工具。它允許用戶指定一個范圍&#xff0c;用于篩選符合特定條件的記錄。本文將詳細介紹 BETWEEN 語句的用法、示例以及注意事項。 BETWEEN 語句的基本用法 BETWEEN 語句的基本格式如…

AI Agent設計模式三:Routing

概念 &#xff1a;動態路徑選擇器 ? 優點&#xff1a;靈活處理不同類型輸入? 缺點&#xff1a;路由邏輯復雜度高 from typing import TypedDict from langchain_core.messages import SystemMessage, HumanMessage from langchain_openai import ChatOpenAI from langgraph.…

制造裝備物聯及生產管理ERP系統設計與實現(代碼+數據庫+LW)

摘 要 傳統辦法管理信息首先需要花費的時間比較多&#xff0c;其次數據出錯率比較高&#xff0c;而且對錯誤的數據進行更改也比較困難&#xff0c;最后&#xff0c;檢索數據費事費力。因此&#xff0c;在計算機上安裝制造裝備物聯及生產管理ERP系統軟件來發揮其高效地信息處理…

`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 筆記250405

use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 筆記250405 以下是 Linux 系統中與 IPv6 臨時隱私地址相關的三個關鍵參數 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的詳細說明及協作關系&#xff1a; &#x1f4dc; 參數定義與功能 參數作用默認值依賴關…

基于Spark的嗶哩嗶哩輿情數據分析系統

【Spark】基于Spark的嗶哩嗶哩輿情數據分析系統 &#xff08;完整系統源碼開發筆記詳細部署教程&#xff09;? 目錄 一、項目簡介二、項目界面展示三、項目視頻展示 一、項目簡介 本項目基于Python和Django框架進行開發&#xff0c;為了便于廣大用戶針對輿情進行個性化分析處…

南京大學與阿里云聯合啟動人工智能人才培養合作計劃,已將通義靈碼引入軟件學院課程體系

近日&#xff0c;南京大學與阿里云宣布啟動人工智能人才培養合作計劃&#xff0c;共同培養適應未來技術變革、具備跨學科思維的AI創新人才。 基于阿里云在云計算和AI大模型領域的技術優勢和南京大學在人工智能領域的學科優勢&#xff0c;雙方將共同設計兼具前瞻性和應用性的人…

用于解決個人使用的公網ip動態變化問題的解決方案

解決方案 靜態ip&#xff08;放棄&#xff09; 申請一個靜態ip價格較貴&#xff0c;只有公司可以申請 使用DDNS&#xff08;放棄&#xff09; 通過域名解析到公網ip通過域名訪問設備官方光貓不支持DDNS 使用腳本&#xff08;采用&#xff09; 通過腳本獲取公網ip通過腳本發送到…