Java學習第六十四部分——Nginx

目錄

一、前言提要

二、核心特點

三、核心作用

四、架構優勢

五、應用場景

六、常用命令

七、性能對比——Nginx vs Apache

八、典型用戶

九、配置示例

十、Java應用需配合的配置

十一、性能優化策略

十二、常見問題排查

十三、文件結構配置

十四、總結歸納概述


一、前言提要

? ? ? ?Nginx(發音是 :“engine-x")是一款開源、高性能的Web 服務器、反向代理服務器和負載均衡器。由俄羅斯工程師 Igor Sysoev 于 2004 年首次發布,現已成為全球最流行的 Web 服務器之一(占據約34%的活躍網站份額,來源:W3Techs)。在Java應用部署中,Nginx常作為反向代理、負載均衡器和靜態資源服務器使用。

二、核心特點

1. 高性能 & 高并發?
? ?- 采用 **事件驅動架構**(非阻塞 I/O 模型),單機可輕松支持 **10萬+ 并發連接**。 ?
? ?- 內存消耗極低(靜態資源請求僅需 2.5MB/萬連接)。

2. 輕量級 & 模塊化??
? ?- 核心代碼精簡,通過模塊擴展功能(如 HTTP/2、gzip、SSL 等)。

3. 反向代理??
? ?- 將客戶端請求轉發至后端服務器(如 Tomcat、Node.js),隱藏真實服務器 IP。

4. 負載均衡?
? ?- 支持輪詢、加權輪詢、IP 哈希、最少連接等策略分發流量。

5. 靜態內容服務?
? ?- 高效處理 HTML/CSS/JS/圖片等靜態文件,響應速度遠超傳統服務器。

三、核心作用

1. 反向代理
? ?- 將客戶端請求轉發給后端的Java應用(如Tomcat、Spring Boot)
? ?- 隱藏后端服務器細節,提升安全性
2. 負載均衡
? ?- 分發請求到多個Java應用實例,提高并發能力
3. 靜態資源處理
? ?- 直接處理CSS/JS/圖片等靜態文件,減輕Java應用壓力
4. SSL終結
? ?- 處理HTTPS加密/解密,后端用HTTP通信

四、架構優勢


? ? A[客戶端] --> B[Nginx]
? ? B -->|靜態請求| C[本地磁盤]
? ? B -->|動態請求| D[Tomcat 集群]
? ? B -->|API 請求| E[Spring Cloud 微服務]
? ? D & E --> F[(數據庫)]

- 單線程事件循環:避免進程/線程切換開銷 ?
- Master-Worker 模式: ?
? - `Master`:管理進程(讀取配置、綁定端口) ?
? - `Worker`:工作進程(處理請求,數量 = CPU 核心數)

五、應用場景

場景說明
Web 服務器直接托管靜態網站(替代 Apache)
反向代理將請求轉發給 Java/Python/PHP 等后端應用
API 網關路由、限流、認證微服務請求
SSL/TLS 終端統一管理 HTTPS 證書,減輕后端壓力
內容緩存緩存動態內容,降低后端負載
動靜分離靜態資源由 Nginx 處理,動態請求轉發至應用服務器

六、常用命令

nginx ? ? ? ? ? ? ? # 啟動
nginx -s reload ? ? # 重載配置(不中斷服務)
nginx -s stop ? ? ? # 立即停止
nginx -t ? ? ? ? ? ?# 測試配置語法
tail -f /var/log/nginx/access.log ?# 查看訪問日志

七、性能對比——Nginx vs Apache

指標NginxApache
并發連接處理事件驅動(高效)進程/線程(較重)
靜態文件響應速度? 快 3x+█ 較慢
內存占用★ 極低▲ 較高
動態內容支持需反向代理原生支持
.htaccess不支持支持

八、典型用戶

- Netflix、Dropbox、Cloudflare ?
- 國內:淘寶、騰訊、百度 ?
- 適用于高并發場景:直播、電商大促、API 網關 ?

九、配置示例

1. 反向代理(單應用)
//nginx

server {listen 80;server_name your-domain.com;location / {proxy_pass http://localhost:8080; ?# 轉發到Java應用proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

2. 負載均衡(多實例)
//nginx

upstream java_servers {server 192.168.1.10:8080 weight=3; ?# 權重3server 192.168.1.11:8080; ? ? ? ? ? # 默認權重1server 192.168.1.12:8080 backup; ? ?# 備用節點
}server {listen 80;location / {proxy_pass http://java_servers;}
}

3. 動靜分離
//nginx

server {location / {proxy_pass http://tomcat_app; ?# 動態請求轉Java}location ~* \.(jpg|css|js)$ {root /data/static/; ?# 靜態資源由Nginx直接處理expires 30d; ? ? ? ? # 客戶端緩存30天}
}

十、Java應用需配合的配置

1. 獲取真實客戶端IP
? ?- Nginx設置頭信息:
? ? ?proxy_set_header X-Real-IP $remote_addr;
? ?- Java代碼獲取IP:
? ? ?String clientIP = request.getHeader("X-Real-IP");

2. 會話保持
? ?- 使用`ip_hash`(基于客戶端IP):
//nginx

upstream java_servers {ip_hash;server 192.168.1.10:8080;server 192.168.1.11:8080;}

十一、性能優化策略

1. 調整連接池參數
? ?proxy_http_version 1.1;
? ?proxy_set_header Connection "";
? ?keepalive 32; ?# 連接池大小
2. 啟用Gzip壓縮
? ?gzip on;
? ?gzip_types text/plain application/json;
3. 緩存靜態資源
? ?location ~* \.(png|ico)$ {
? ? ? ?expires 365d;
? ? ? ?add_header Cache-Control "public";
? ?}

十二、常見問題排查

1. 502 Bad Gateway
? ?- 檢查后端Java應用是否運行
? ?- 查看Nginx錯誤日志:`/var/log/nginx/error.log`
2. 連接超時
? ?- 增加超時設置:
? ? ?proxy_connect_timeout 60s;
? ? ?proxy_read_timeout 120s;

十三、文件結構配置

Nginx 配置位于 `/etc/nginx/nginx.conf`,采用層次化語法:
//nginx

# 全局配置
user nginx;
worker_processes auto; ?# 工作進程數 = CPU 核心數events {worker_connections 1024; ?# 每個進程最大連接數
}http {# HTTP 通用配置include /etc/nginx/mime.types;# 服務器塊(虛擬主機)server {listen 80;server_name example.com;location / {root /var/www/html; ?# 網站根目錄}location /api {proxy_pass http://backend; ?# 轉發到后端}}# 上游服務器組(負載均衡)upstream backend {server 10.0.1.101:8080 weight=5;server 10.0.1.102:8080;}
}

十四、總結歸納概述

? ? ? Nginx 是現代化 Web 架構的基石,尤其適合需要高并發處理負載均衡反向代理的場景。其低資源消耗和高穩定性使其成為云原生時代的首選服務器。

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

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

相關文章

幾個常用的Oxygen編輯器插件

Oxygen XML Editor是羅馬尼亞的SyncroSoft公司開發的結構化文檔編輯和發布軟件。 除了Oxygen編輯器帶的功能,它還提供了豐富的插件來提供額外的功能來輔助資料開發人員更高效率、更低成本地開發結構化資料。 本文介紹幾個比較常用和有用的插件。 - 1 - Git Clie…

基于springboot的軟件缺陷管理跟蹤平臺

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了六年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

【LINUX】Centos 9使用nmcli更改IP

1. 查看連接名稱 nmcli connection show輸出類似: NAME UUID TYPE DEVICE Wired connection 1 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet enp1s02. 修改 IP 地址(以靜態 IP 為例&#xf…

ConvMixer模型:純卷積為何能夠媲美Transformer架構?深入淺出原理與Pytorch代碼逐行講解實現

ConvMixer 是一個簡潔的視覺模型,僅使用標準的卷積層,達到與基于自注意力機制的視覺 Transformer(ViT)相似的性能,由此證明純卷積架構依然很強大。核心原理:極簡的卷積設計:它摒棄了復雜的自注意…

教程:如何通過代理服務在國內高效使用 Claude API 并集成到 VSCode

對于許多開發者來說,直接訪問 Anthropic 的 Claude API 存在網絡障礙。本文將介紹一個第三方代理服務,幫助你穩定、高效地利用 Claude 的強大能力,并將其無縫集成到你的開發工作流中。 一、服務介紹 我們使用的是 open.xiaojingai.com 這個…

從零開始:Vue 3 + TypeScript 項目創建全記錄

一次完整的現代前端項目搭建經歷,踩坑與收獲并存 ?? 前言 最近創建了一個新的 Vue 3 項目,整個過程中遇到了不少有趣的選擇和決策點。作為一個技術復盤,我想把這次經歷分享出來,希望能幫助到其他開發者,特別是那些剛接觸 Vue 3 生態的朋友們。 ??? 項目初始化:選擇…

[spring6: @EnableWebSocket]-源碼解析

注解 EnableWebSocket Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Documented Import(DelegatingWebSocketConfiguration.class) public interface EnableWebSocket {}DelegatingWebSocketConfiguration Configuration(proxyBeanMethods false) public …

Nacos 封裝與 Docker 部署實踐

Nacos 封裝與 Docker 部署指南 0 準備工作 核心概念? 命名空間:用于隔離不同環境(如 dev、test、prod)或業務線,默認命名空間為public。? 數據 ID:配置集的唯一標識,命名規則推薦為{服務名}-{profile}.{擴…

Vue2——4

組件的樣式沖突 scoped默認情況:寫在組件中的樣式會 全局生效 → 因此很容易造成多個組件之間的樣式沖突問題。1. 全局樣式: 默認組件中的樣式會作用到全局2. 局部樣式: 可以給組件加上 scoped 屬性, 可以讓樣式只作用于當前組件原理:當前組件內標簽都被…

30天打好數模基礎-邏輯回歸講解

案例代碼實現一、代碼說明本案例針對信用卡欺詐檢測二分類問題,完整實現邏輯回歸的數據生成→預處理→模型訓練→評估→閾值調整→決策邊界可視化流程。數據生成:模擬1000條交易數據,其中欺詐樣本占20%(類不平衡)&…

CDH yarn 重啟后RM兩個備

yarn rmadmin -transitionToActive --forcemanual rm1 cd /opt/cloudera/parcels/CDH/lib/zookeeper/bin/ ./zkCli.sh -server IT-CDH-Node01:2181 查看是否存在殘留的ActiveBreadCrumb節點 ls /yarn-leader-election/yarnRM #若輸出只有[ActiveBreadCrumb](正常應…

HTML5音頻技術及Web Audio API深入解析

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;音頻處理在IT行業中的多媒體、游戲開發、在線教育和音樂制作等應用領域中至關重要。本文詳細探討了HTML5中的 <audio> 標簽和Web Audio API等技術&#xff0c;涉及音頻的嵌入、播放、控制以及優化。特別…

每日面試題13:垃圾回收器什么時候STW?

STW是什么&#xff1f;——深入理解JVM垃圾回收中的"Stop-The-World"在Java程序運行過程中&#xff0c;JVM會通過垃圾回收&#xff08;GC&#xff09;自動管理內存&#xff0c;釋放不再使用的對象以騰出空間。但你是否遇到過程序突然卡頓的情況&#xff1f;這可能與G…

【系統全面】常用SQL語句大全

一、基本查詢語句 查詢所有數據&#xff1a; SELECT * FROM 表名;查詢特定列&#xff1a; SELECT 列名1, 列名2 FROM 表名;條件查詢&#xff1a; SELECT * FROM 表名 WHERE 條件;模糊查詢&#xff1a; SELECT * FROM 表名 WHERE 列名 LIKE 模式%;排序查詢&#xff1a; SELECT *…

Spring之SSM整合流程詳解(Spring+SpringMVC+MyBatis)

Spring之SSM整合流程詳解-SpringSpringMVCMyBatis一、SSM整合的核心思路二、環境準備與依賴配置2.1 開發環境2.2 Maven依賴&#xff08;pom.xml&#xff09;三、整合配置文件&#xff08;核心步驟&#xff09;3.1 數據庫配置&#xff08;db.properties&#xff09;3.2 Spring核…

C++STL系列之set和map系列

前言 set和map都是關聯式容器&#xff0c;stl中樹形結構的有四種&#xff0c;set&#xff0c;map&#xff0c;multiset,multimap.本次主要是講他們的模擬實現和用法。 一、set、map、multiset、multimap set set的中文意思是集合&#xff0c;集合就說明不允許重復的元素 1……

Linux 磁盤掛載,查看uuid

lsblk -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT,SIZEsudo ntfsfix /dev/nvme1n1p1sudo mount -o remount,rw /dev/nvme1n1p1 /media/yake/Datasudo ntfsfix /dev/sda2sudo mount -o remount,rw /dev/sda2 /media/yake/MyData

【AJAX】XMLHttpRequest、Promise 與 axios的關系

目錄 一、AJAX原理 —— XMLHttpRequest 1.1 使用XMLHttpRequest 二、 XMLHttpRequest - 查詢參數 &#xff08;就是往服務器后面拼接要查詢的字符串&#xff09; 三、 地區查詢 四、 XMLHttpRequest - 數據提交 五、 認識Promise 5.1 為什么 JavaScript 需要異步&#…

C++中的stack和queue

C中的stack和queue 前言 這一節的內容對于stack和queue的使用介紹會比較少&#xff0c;主要是因為stack和queue的使用十分簡單&#xff0c;而且他們的功能主要也是在做題的時候才會顯現。這一欄目暫時不會寫關于做題的內容&#xff0c;后續我會額外開一個做題日記的欄目的。 這…

Spring Bean生命周期七步曲:定義、實例化、初始化、使用、銷毀

各位小猿&#xff0c;程序員小猿開發筆記&#xff0c;希望大家共同進步。 引言 1.整體流程圖 2.各階段分析 1??定義階段 1.1 定位資源 Spring 掃描 Component、Service、Controller 等注解的類或解析 XML/Java Config 中的 Bean 定義 1.2定義 BeanDefinition 解析類信息…