目录

一、前言提要

二、核心特点

三、核心作用

四、架构优势

五、应用场景

六、常用命令

七、性能对比——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 解析类信息…