当前位置: 首页 > ops >正文

Nginx基础知识

在这里插入图片描述

Nginx是什么?

Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例:


1. 核心概念
• 配置文件位置:通常为 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf

• 配置文件结构:

# 全局配置(影响整体运行)
user nginx;
worker_processes auto;# 事件模块配置(连接处理)
events {worker_connections 1024;
}# HTTP模块配置
http {# 服务器块(虚拟主机)server {listen 80;server_name example.com;# 具体路由规则location / {root /var/www/html;}}
}

2. 常见配置示例

示例 1:静态文件服务

server {listen 80;server_name example.com;# 根目录配置location / {root /var/www/html;  # 静态文件存放路径index index.html;     # 默认首页}# 处理 404 错误error_page 404 /404.html;location = /404.html {internal;}
}

示例 2:反向代理
将请求代理到后端应用(如 Node.js/Python 服务):

server {listen 80;server_name api.example.com;location / {proxy_pass http://localhost:3000;  # 转发到本地的 3000 端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

示例 3:负载均衡
使用 upstream 模块分配流量到多个后端服务器:

http {upstream backend {server 192.168.1.100:8080;  # 后端服务器 1server 192.168.1.101:8080;  # 后端服务器 2server 192.168.1.102:8080 backup;  # 备用服务器}server {listen 80;server_name app.example.com;location / {proxy_pass http://backend;}}
}

在这里插入图片描述

3. 常用指令
listen:监听的端口(如 listen 80;)。

server_name:域名或 IP(如 server_name example.com;)。

root:静态文件根目录。

location:定义 URL 匹配规则(支持正则)。

proxy_pass:反向代理到指定地址。

try_files:按顺序尝试返回文件(如 try_files $uri $uri/ /index.html;)。


4. 常用命令

  1. 检查配置语法:
    nginx -t
    
  2. 重新加载配置(不重启服务):
    nginx -s reload
    
  3. 启动/停止 Nginx:
    systemctl start nginx   # 启动
    systemctl stop nginx    # 停止
    

5. 典型应用场景
• 静态资源托管:快速响应 HTML/CSS/JS 文件。

• API 网关:反向代理到多个微服务。

• 负载均衡:分配流量到多台服务器。

• SSL 终结:通过配置 HTTPS 证书(如 Let’s Encrypt)。

通过灵活配置,Nginx 可以满足高并发、高可用性的 Web 服务需求。

在这里插入图片描述

Nginx 是适用场景

Nginx 是一个高性能的HTTP和反向代理服务器,同时也可以作为邮件代理服务器。它最初是为了解决高并发访问问题而设计的,具有占用内存小、并发能力强等特点。以下是 Nginx 的一些典型应用场景:

  1. 静态内容服务:Nginx 可以非常高效地提供静态文件(如HTML、图片、CSS和JavaScript)。它能够处理大量并发请求,使得它成为托管静态资源的理想选择。

  2. 反向代理服务器:Nginx 常用作反向代理服务器,用于将客户端请求转发给后端服务器,并将响应返回给客户端。这种方式可以隐藏实际处理请求的服务器,增加安全性。此外,还可以实现负载均衡,提高系统的可用性和扩展性。

  3. 负载均衡:Nginx 支持多种负载均衡算法(如轮询、最少连接、IP哈希等),可以将请求分发到多个后台服务器上,从而提高应用的响应速度和可用性,尤其是在分布式系统中。

  4. 虚拟主机:通过 Nginx 可以很方便地配置基于名称或基于IP的虚拟主机,允许在同一台物理服务器上托管多个不同的域名网站。

  5. SSL/TLS 终结:Nginx 能够充当SSL/TLS终结点,这意味着它可以处理加密的HTTPS请求,解密它们并将未加密的请求发送到后端服务器。这减少了后端服务器的负载,提高了性能。

  6. 缓存加速:Nginx 可以配置为缓存后端服务器的响应结果,减少重复请求对后端服务器的压力,提高响应速度。

  7. 微服务架构中的API网关:在微服务架构中,Nginx 可以用作API网关,提供诸如认证、限流、日志记录等功能,帮助管理不同服务之间的通信。

  8. WebSocket 代理:Nginx 支持 WebSocket 协议,可以用来代理 WebSocket 连接,支持长连接的应用场景。

总之,Nginx 凭借其灵活性和高性能,在现代网络架构中有广泛的应用,无论是小型网站还是大型企业级应用,都可以看到它的身影。
在这里插入图片描述

Nginx和Apache的区别

Apache 和 Nginx 是两个流行的开源Web服务器软件,它们在设计、性能和应用场景上都有所不同。以下是它们之间的一些主要区别:

设计架构

  • Apache 使用进程驱动的方法,并为每个请求创建一个新线程或进程(取决于使用的MPM,即多处理模块)。这可能导致在高并发情况下资源消耗较大。
  • Nginx 使用事件驱动的体系结构来处理一个线程中的多个请求。这种方式使其能够更有效地处理大量并发连接,尤其是在资源受限的环境中。

并发处理

  • Apache 在处理大量并发请求时可能会遇到瓶颈,因为每个连接都需要一个独立的线程或进程,随着并发连接数增加,内存使用量也会线性增长。
  • Nginx 能够在一个工作进程中异步、非阻塞地处理数千个并发连接,因此其内存使用更加高效,适合高流量网站。

静态与动态内容

  • 静态内容:Nginx 在提供静态内容方面表现优异,通常比 Apache 更快且占用更少的系统资源。
  • 动态内容:Apache 可以直接处理动态内容(如通过 mod_php),而 Nginx 通常需要将 PHP 请求传递给外部处理器(如 PHP-FPM)。

配置系统

  • Apache 支持分布式配置,允许通过 .htaccess 文件在目录级别进行配置,这对共享主机环境非常有用,但可能会影响性能。
  • Nginx 使用集中式配置,不支持 .htaccess 文件,这可以提高性能,因为服务器不需要检查每个目录下的配置文件。

模块系统

  • Apache 的模块可以在运行时动态加载,这意味着你可以在不停止服务器的情况下添加或移除功能。
  • Nginx 的大多数模块必须在编译时加入,尽管也有一些第三方模块可以通过插件形式动态加载。
    在这里插入图片描述

应用场景

  • Apache 更适合复杂的动态网站,特别是那些需要特定功能模块的应用程序。
  • Nginx 更加适用于高并发环境和需要高性能静态内容服务的场合,也常被用作反向代理、负载均衡器和HTTP缓存。

性能对比

  • 在相同硬件条件下,Nginx 对于高并发连接通常表现得更好,特别是在处理静态内容时效率极高。
  • Apache 在处理动态内容时可能与 Nginx 相当,但它的资源消耗会随着并发连接数的增长而增加。

选择哪一个 Web 服务器应该基于具体的需求、技术栈以及团队对相应技术的熟悉程度。对于某些情况,结合两者的优势(例如使用 Nginx 作为前端代理服务器,Apache 处理后端动态内容)可能是最佳实践。

http://www.xdnf.cn/news/7352.html

相关文章:

  • 学习BI---QuickBI介绍
  • 【find / -name “xxx“】为什么有时候搜索范围扩大之后,就无法找到
  • 预训练、指令微调与RLHF如何塑造LLM
  • 【AI论文】端到端视觉标记器调优
  • Typora编写Markdown文档(支持Mermaid)
  • 客户体验数据使用的三种视角——旅程视角
  • python-判断闰年( 极其简单的python)
  • ubuntu sh安装包的安装方式
  • 关于摄像头模块的红外截止滤光片
  • Pichome 任意文件读取漏洞复现(CVE-2025-1743)
  • 技术解码 | 玩转视频播放,自适应码流技术
  • Google设置app-ads.txt
  • 技术架构缺乏灵活性,如何应对变化需求?
  • 油烟净化设备维护保养的科学方法与实践
  • python使用jsonpath-ng库操作json数据
  • 创建型:抽象工厂模式
  • 【RAG系统高效召回2】[特殊字符] 提升 RAG 系统检索质量的六大策略:从 top-k 到索引扩展
  • SpringBoot-1-入门概念介绍和第一个Spring Boot项目
  • 如何在LVGL之外的线程更新UI内容
  • 《Linux服务与安全管理》| DNS服务器安装和配置
  • 进程退出 和 僵尸进程、孤儿进程
  • 电子电路原理第十六章(负反馈)
  • 打卡第二十二天
  • 鸿蒙PC操作系统:从Linux到自研微内核的蜕变
  • Vue 3 项目开发 MinIO 文件管理模块
  • 数字图像处理——图像压缩
  • ai agent(智能体)开发 python高级应用8:crawl4ai 对用 LLMExtractionStrategy 和 python的 re 如何选择
  • 【C++】19. set和map的使用
  • Vue.js---立即执行的watch与回调执行时机
  • 【PhysUnits】4.4 零类型(Z0)及其算术运算(zero.rs)