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

Nginx学习与应用

文章目录

  • Nginx 简介
  • 核心特点
  • 主要应用场景
    • 场景详解
  • 常用管理命令
  • 下载与安装
    • 第一步:下载
    • 第二步:安装(解压)
    • 第三步:启动与验证
  • 实战案例:Python + Nginx 实现反向代理与负载均衡
    • 🚀 第一步:准备 Python 后端服务
    • 📁 第二步:创建静态文件
    • ⚙️ 第三步:配置 Nginx
    • 🔧 第四步:运行验证
  • 总结

Nginx 简介

Nginx是一个工作在第七层(应用层)的高性能的 HTTP 服务器和反向代理服务器,同时也可以作为邮件代理服务器和通用的 TCP/UDP 代理服务器。简单说,Nginx 就是一个能把网页快速发给用户的软件,同时也能把请求转给其他服务器处理。

核心特点

特点说明
🚀 高并发采用异步非阻塞事件驱动架构,单机可处理数十万并发连接
💾 低内存处理大量请求时内存占用极低(几 MB 即可运行)
🔧 热部署可在不中断服务的情况下升级程序或重载配置
📦 模块化核心功能精简,扩展功能通过模块按需加载
🔒 高可靠稳定性极高,可 7×24 小时不间断运行

主要应用场景

场景说明
静态资源服务器托管 HTML、CSS、JS、图片等静态文件
反向代理将客户端请求转发到后端应用服务器(如 Tomcat、Node.js、Gunicorn)
负载均衡将流量分发到多个后端服务器
API 网关请求路由、认证鉴权、限流熔断
SSL 终结集中处理 HTTPS 证书,减轻后端压力
缓存服务器缓存后端响应,加速访问

场景详解

  • 📁 静态资源服务器

    server { listen 80; location /api/ { proxy_pass http://localhost:3000; } }
  • 🔄 反向代理

    server { listen 80; location /api/ { proxy_pass http://localhost:3000; } }
  • ⚖️ 负载均衡

    upstream backend { server 192.168.1.10:5000 weight=3; server 192.168.1.11:5000 weight=1; }
  • 🔀 解决跨域
    通过将前后端置于同一域名下,避免浏览器跨域限制。

常用管理命令

所有命令都需要在 nginx.exe 文件目录中执行:

用途命令 (在nginx目录下执行)说明
启动start nginx推荐使用此命令启动
快速停止nginx -s stop立即停止服务
优雅停止nginx -s quit处理完当前访问后再停止
重载配置nginx -s reload修改配置后使用,无需重启
检查配置nginx -t检查配置文件语法是否有误
查看进程tasklist /fi “imagename eq nginx.exe”查看Nginx是否在运行

下载与安装

在 Windows 上安装 Nginx。

第一步:下载

  1. 打开 Nginx 官方下载页面:https://nginx.org/en/download.html
  2. 在 Stable version(稳定版)区域,点击适用于 Windows 的压缩包,例如 nginx/Windows-x.xx.x 。文件是一个 .zip 格式的压缩包

第二步:安装(解压)

  1. 将下载好的 .zip 文件解压。
    关键点:将解压后得到的 nginx-1.xx.x 文件夹,整个移动到没有中文且没有空格的纯英文路径下,例如 D:\demo\nginx 。这是为了避免程序运行时发生未知错误。

第三步:启动与验证

  1. 在 Nginx 目录的地址栏里(D:\demo\nginx),输入 cmd 并回车,即可在此处打开命令提示符。
  2. 输入 start nginx 并回车。

验证是否成功:
打开浏览器,在地址栏输入 http://localhost 或 http://127.0.0.1。
如果页面显示 “Welcome to nginx!”,就说明安装启动成功啦!

实战案例:Python + Nginx 实现反向代理与负载均衡

案例架构图:

浏览器 ──→ Nginx:80 ──┬──→ 静态文件 (HTML/CSS/JS) ├──→ Python 服务1:5000 (API服务器) └──→ Python 服务2:5001 (备份服务器)

🚀 第一步:准备 Python 后端服务

创建两个 Python 文件来模拟不同的后端服务:

  • app1.py - 主服务器(端口5000)

    fromflaskimportFlask,jsonify,requestimporttime app=Flask(__name__)@app.route('/api/user')defget_user():returnjsonify({'server':'主服务器:5000','user':{'id':1,'name':'张三'},'time':time.time()})@app.route('/api/hello')defhello():returnjsonify({'message':'Hello from 主服务器:5000'})if__name__=='__main__':app.run(port=5000,debug=True)
  • app2.py - 备用服务器(端口5001)

    fromflaskimportFlask,jsonify,requestimporttime app=Flask(__name__)@app.route('/api/user')defget_user():returnjsonify({'server':'备用服务器:5001','user':{'id':2,'name':'李四'},'time':time.time()})@app.route('/api/hello')defhello():returnjsonify({'message':'Hello from 备用服务器:5001'})if__name__=='__main__':app.run(port=5001,debug=True)
  • 启动 Python 服务
    ```bash
    # 安装 Flask(如果没有安装)
    pip install flask

    # 分别打开两个命令行窗口启动 python app1.py # 窗口1 python app2.py # 窗口2 ```

📁 第二步:创建静态文件

index.html - 前端测试页面(放在 D:\demo\nginx\html\)

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Nginx 功能演示</title><style>body{font-family:Arial;padding:20px;}button{margin:10px;padding:10px 20px;font-size:16px;cursor:pointer;}.result{margin:20px;padding:15px;border:1px solid #ddd;background:#f9f9f9;}.success{color:green;}.error{color:red;}</style></head><body><h1>Nginx 功能演示 - 跨域解决</h1><div><buttononclick="testApi()">测试反向代理</button><buttononclick="loadBalance()">测试负载均衡(连续点击)</button><buttononclick="testHello()">测试API</button><buttononclick="clearResult()">清空</button></div><divid="result"class="result">结果将显示在这里...</div><script>// 注意:这里请求的是 80 端口(Nginx),而不是直接请求 Python 的 5000/5001 端口constAPI_BASE='http://localhost';asyncfunctiontestApi(){try{constresponse=awaitfetch(`${API_BASE}/api/user`);constdata=awaitresponse.json();showResult('✅ 反向代理成功!<br>'+JSON.stringify(data,null,2));}catch(e){showResult('❌ 错误:'+e.message,true);}}asyncfunctionloadBalance(){try{constresponse=awaitfetch(`${API_BASE}/api/user`);constdata=awaitresponse.json();// 显示响应的服务器,证明请求被分发到了不同的服务器showResult(`🔄 负载均衡演示<br>响应服务器:${data.server}<br>${JSON.stringify(data,null,2)}`);}catch(e){showResult('❌ 错误:'+e.message,true);}}asyncfunctiontestHello(){try{constresponse=awaitfetch(`${API_BASE}/api/hello`);constdata=awaitresponse.json();showResult('✅ API 调用成功<br>'+JSON.stringify(data,null,2));}catch(e){showResult('❌ 错误:'+e.message,true);}}functionshowResult(msg,isError=false){constresultDiv=document.getElementById('result');resultDiv.innerHTML=`<div class="${isError?'error':'success'}">${msg}</div>`;}functionclearResult(){document.getElementById('result').innerHTML='结果将显示在这里...';}</script></body></html>

⚙️ 第三步:配置 Nginx

编辑 D:\demo\nginx\conf\nginx.conf:

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; # 负载均衡配置:定义一组后端服务器 upstream backend_servers { # 负载均衡策略:轮询(默认) server 127.0.0.1:5000 weight=3; # weight 权重,3表示分配3份流量 server 127.0.0.1:5001 weight=1; # 主服务器和备用服务器的流量比例 3:1 # 其他策略示例(可以取消注释测试): # ip_hash; # 同一IP固定到同一台服务器 # least_conn; # 最少连接数 } server { listen 80; server_name localhost; # 1. 静态文件服务器:直接返回 HTML/CSS/JS location / { root html; # 对应 C:\nginx\html 目录 index index.html index.htm; } # 2. 反向代理 + 负载均衡:将 /api/ 开头的请求代理到后端服务器组 location /api/ { proxy_pass http://backend_servers; # 转发到 upstream 定义的服务器组 # 设置代理请求头,让后端能获取真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超时设置 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; } # 3. 解决跨域的配置(可选,如果前后端分离时使用) # 如果前端是 http://localhost,后端在其他端口,浏览器会报跨域错误 # 通过 Nginx 代理后,同源策略自动解决 # 显示后端状态(可选) location /nginx_status { stub_status; allow 127.0.0.1; deny all; } } }

🔧 第四步:运行验证

# 1. 确保 Python 服务已启动(两个窗口)# 窗口1: python app1.py# 窗口2: python app2.py# 2. 进入 Nginx 目录测试配置nginx-t# 检查配置是否正确# 3. 启动或重载 Nginxstart nginx# 如果未启动# 或nginx-sreload# 如果已启动# 4. 打开浏览器访问http://localhost

🎯 演示效果说明

  1. HTTP 静态服务器
    • 访问http://localhost会自动返回html/index.html
    • Nginx 直接返回静态文件,不经过 Python
  2. 反向代理
    • 点击"测试反向代理"按钮
    • 前端请求http://localhost/api/user
    • Nginx 接收请求,转发给后端的 Python 服务
    • 前端不知道后端的具体地址(隐藏了5000端口)
  3. 负载均衡
    • 连续点击"测试负载均衡"按钮
    • 观察返回结果中server字段的变化
    • 应该能看到请求在主服务器(5000)和备用服务器(5001)之间分配
    • 权重比例是 3:1,主服务器出现的概率更高
  4. 解决跨域
    • 通常前端在 80 端口,后端在 5000 端口,浏览器会阻止跨域请求
    • 通过 Nginx 代理后,前后端都在同一个域名端口(localhost:80)下
    • 跨域问题自然解决,无需配置 CORS

总结

Nginx 凭借其高性能、低资源消耗、稳定性强的特点,已成为互联网基础设施的核心组成部分。从静态托管到负载均衡,从跨域解决到网关代理,从单机部署到 K8s 集群,它是每个开发者都应该掌握的高性能神器。

http://www.gsyq.cn/news/1533170.html

相关文章:

  • Kimi K2.6长程编码能力解析:13小时不中断的工程级AI协作者
  • 2026年深圳整厂回收品牌怎么选?多维度实测与行业趋势分析 - 优质品牌商家
  • 代码AI率:人机协同编程时代的效率与质量平衡之道
  • 电子数据取证实战:从工具链到多检材关联分析的技术复盘
  • 从零构建XSS漏洞靶场:Flask实战与安全编码防御指南
  • 2026年膨胀蛭石隔热管托厂家深度分析:技术、产能与工程案例全解读 - 优质品牌商家
  • YOLO11环境配置与实战指南:从安装到部署全流程解析
  • GPT 5.5 Instant系统卡:树莓派级AI推理的瞬时响应硬件架构
  • 【2026最新收藏版】AI Agent四层记忆架构详解|吊打传统两层架构(面试必刷+工程落地)
  • QT-多语言系统功能开发保姆级教程
  • 2026年饲料第三方检测机构综合评述:市场格局、服务能力与案例解析 - 优质品牌商家
  • 临朐、青州短视频代运营公司怎么选,靠谱的有哪些 - 工业品网
  • Spreadsheet图表设计原理与实战:数据可视化入门必修课
  • Everything:基于USN日志的Windows极速文件名搜索工具原理与实战
  • AI岗位井喷?1亿数据揭示真相:收藏这份进阶指南,小白也能抓住大模型红利!
  • 凯撒旅业全资控股凯撒海湾,共绘海洋文旅新蓝图 - 品牌2026
  • 2026年6月市场评价高的联轴器生产厂家推荐,齿式传动轴/传动轴/球齿联轴器/挠性联轴器,联轴器实力厂家怎么选择 - 品牌推荐师
  • Kinovea运动分析软件:5分钟快速上手指南与实战技巧
  • 2026年四川火锅店制冷设备公司怎么选?行业趋势与供应商深度分析 - 优质品牌商家
  • 对比实验全流程指南:从A/B测试设计到结果分析与决策
  • Mistral Agents API:轻量级状态感知智能体工作流设计
  • DPDK高性能交换机深度实战:一次FIB更新风暴引发的转发抖动故障分析
  • 2026年工业冷却用水钻井服务商综合评估:从技术能力到本地化服务的多维解析 - 优质品牌商家
  • Proface GP-Pro EX 409汉化包:官方与民间资源解析及安全安装指南
  • Highcharts V13新功能PlotBorderRadius绘制圆角属性——生成美观的倒角图表
  • 戴尔笔记本风扇控制终极指南:16级精准调速与智能温控实战
  • 口碑好的防腐管道,迎航管道的实力 - 工业品网
  • Harness GitOps Agent安装避坑指南:网络、RBAC与HA深度解析
  • Gitlab本地服务器搭建及配置-详细教程
  • 离散数学·集合论深度学习笔记