Nginx 入门与进阶玩法指南

一、什么是 Nginx?

Nginx(Engine X)是一个高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 邮件代理服务器。它最初由俄罗斯程序员 Igor Sysoev 开发,用于解决高并发下 Apache 性能瓶颈问题。如今,它已成为 Web 服务中最主流的服务器之一。

核心特点:

  • 异步事件驱动架构,适合处理大量并发连接。
  • 内存占用小,稳定性高。
  • 支持热部署、热加载配置。
  • 模块化设计,便于扩展。

二、Nginx 能做什么?

  1. 静态资源服务器:用于服务 HTML、CSS、JS、图片、音视频等文件。
  2. 反向代理服务器:将请求转发给后端应用服务,比如 Node.js、Java、Python 程序。
  3. 负载均衡器:支持多种策略(轮询、IP 哈希、最少连接等)。
  4. 缓存服务器:作为前端缓存层,大大减轻后端压力。
  5. HTTPS 网关:用作 TLS 终端代理,配合 Let’s Encrypt 实现免费证书自动续期。
  6. API 网关/限流器:结合 Lua、OpenResty 实现接口限流、鉴权等功能。
  7. WebSocket 代理:支持持久连接转发,适用于实时通信场景。

三、如何快速开始使用 Nginx?

1. 安装

Ubuntu:
sudo apt update
sudo apt install nginx
macOS(通过 Homebrew):
brew install nginx

2. 启动与基本命令

# 启动 Nginx
sudo nginx# 重载配置(热更新)
sudo nginx -s reload# 停止 Nginx
sudo nginx -s stop# 检查配置文件语法
nginx -t

默认配置文件路径:

  • Linux: /etc/nginx/nginx.conf
  • macOS (Homebrew): /opt/homebrew/etc/nginx/nginx.conf

四、实用玩法案例

1. 将本地应用暴露给公网:静态站点部署

server {listen 80;server_name mydomain.com;location / {root /var/www/html;index index.html;}
}

2. 反向代理 Node.js 后端

server {listen 80;server_name mydomain.com;location /api/ {proxy_pass http://localhost:3000/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

3. 配置 HTTPS

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/ssl/certs/example.crt;ssl_certificate_key /etc/ssl/private/example.key;location / {proxy_pass http://localhost:8080;}
}

可以使用 Let’s Encrypt + Certbot 自动申请和续期 HTTPS 证书。


五、进阶玩法

1. 负载均衡配置

upstream backend {server 127.0.0.1:8080;server 127.0.0.1:8081;
}server {listen 80;location / {proxy_pass http://backend;}
}

支持多种策略:

  • round-robin(默认)
  • least_conn(最少连接)
  • ip_hash(IP 绑定)

2. 访问控制

location /admin {allow 192.168.1.0/24;deny all;
}

3. 限流控制

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location /api/ {limit_req zone=one burst=5 nodelay;}}
}

六、结合 OpenResty 实现更强功能

Nginx + Lua(OpenResty) 提供超强的可编程能力,可用于:

  • 接口限流
  • 动态路由
  • A/B 测试
  • 用户鉴权
  • 日志上报
location /api/check_token {content_by_lua_block {local token = ngx.var.arg_tokenif not token or token ~= "123456" thenngx.status = 403ngx.say("Forbidden")returnendngx.say("OK")}
}

七、调试和性能优化建议

  • 使用 access_logerror_log 调试问题。
  • 配置 worker_processes auto; 合理利用 CPU。
  • 开启缓存、Gzip 提升性能。
  • 调整 client_max_body_size 限制上传大小。

八、Nginx 玩出花的建议方向

  • 本地搭建 CDN 服务(结合缓存和负载均衡)
  • 构建 HTTPS 加密的 WebSocket 通信代理
  • 写 Lua 插件完成防爬虫、防刷接口逻辑
  • 将 Nginx 容器化部署,实现微服务网关(结合 Docker/K8s)
  • Nginx + Prometheus + Grafana 实现监控面板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89663.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89663.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89663.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPM组件 alan-baileys 等窃取主机敏感信息

【高危】NPM组件 alan-baileys 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 alan-baileys 组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-wkyd-5v7r处置建议强烈建议修复发现时间2025-07-02投毒仓库npm…

Python爬虫实战:研究httplib2库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的信息量呈爆炸式增长。如何从海量的网页中高效地获取有价值的数据,成为了当前信息技术领域的一个重要研究课题。网络爬虫作为一种自动获取互联网信息的程序,能够按照一定的规则,自动地抓取网页内容并提取和整理信…

【C++】简单学——模板初阶

模板(template) 泛型编程,让编译器把我们不想干的事情给干了 类似于typedef,解决了typedef使用不方便地原因(虽然看似写少了,其实只是编译器做多了) 例如: 生成两个栈,…

X-Search:Spring AI实现的AI智能搜索

X-Search AI智能搜索 X-Search使用Spring AI和Spring AI Alibab Graph实现的AI智能搜索系统。 gitee:https://gitee.com/java-ben/x-search github:https://github.com/renpengben/x-search 核心功能 快速开始 git clone https://github.com/renpengben/x-search.git 1.申请…

一台香港原生ip站群服务器多少钱?

一台香港原生ip站群服务器多少钱?在香港地区租用原生 IP 站群服务器的价格受多重因素影响,不同配置和服务的组合会导致费用差异显著。以下是详细分析:一、影响香港原生 IP 站群服务器价格的核心因素IP 资源成本:原生 IP 由于其注册…

JavaScript性能优化实战:从理论到实践的全方位指南

Hi,我是布兰妮甜 !JavaScript作为现代Web开发的核心语言,其性能直接影响用户体验、转化率和搜索引擎排名。本文将深入探讨JavaScript性能优化的各个方面,从基础原则到高级技巧,提供一套完整的实战指南。 文章目录 一、…

MCU的晶振匹配测试,是否匹配跟哪些因素相关?

晶振能否与目标电路良好匹配,取决于多个相互作用的因素。这些因素可归纳为以下四大类: 【】一、晶振自身特性(核心基础) 标称频率与公差:晶振的基频精度(如 10ppm)是匹配起点。 负载电容 (CL)&…

前端单元测试覆盖率工具有哪些,分别有什么优缺点

以下是主流的前端单元测试覆盖率工具及其优缺点对比,帮助你在项目中根据需求选择合适的工具:1. Istanbul(NYC) 类型:JavaScript 覆盖率工具适用框架:通用(React/Vue/Node.js 等)原理…

C语言常用转换函数实现原理

编程时,经常用到进制转换、字符转换。比如软件界面输入的数字字符串,如何将字符串处理成数字呢?今天就和大家分享一下。01 字符串转十六进制 代码实现: void StrToHex(char *pbDest, char *pbSrc, int nLen) {char h1,h2;char s…

办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。

办公文档批量打印器是一款可以批量打印文档的工具,其是绿色单文件版,支持添加文件、文件夹。 我之前也介绍过批量打印的软件,但是都是只支持Office的文档打印,详情可移步至——>>大小只有700K的软件,永久免费&am…

大事件项目记录13-文章管理接口开发-总

一、文章管理接口。 共有5个,分别为: 1.新增文章; 2.文章列表(条件分页) ; 3.获取文章详情; 4.更新文章; 5.删除文章。 二、详解。 1.新增文章。 ArticleController.java: PostMappingpublic R…

如何防止内部威胁:服务器访问控制与审计策略

内部威胁是指来自组织内部的用户或设备对服务器和数据的潜在安全威胁。这些威胁可能是由于恶意行为、疏忽或配置错误造成的。为了防止内部威胁,必须建立强大的访问控制和审计策略,确保服务器的安全性和数据完整性。 1. 什么是内部威胁? 1.1 …

科技赋能电网安全:解析绝缘子污秽度在线监测装置的核心技术与应用价值

绝缘子是电力系统中保障输电线路安全运行的关键设备,其表面污秽积累可能引发闪络事故,导致线路跳闸甚至电网瘫痪。传统的人工巡检方式存在效率低、时效性差等问题,而绝缘子污秽度在线监测装置通过实时数据采集与分析,为电网安全运…

实际开发如何快速定位和解决死锁?

一、死锁的本质与常见场景 1. 死锁的四大必要条件 互斥:资源同一时间只能被一个线程持有。占有并等待:线程持有资源的同时请求其他资源。不可抢占:资源只能被持有者主动释放。循环等待:多个线程形成资源的循环依赖链。2. 常见死锁场景 数据库事务死锁:-- 事务1 BEGIN; UP…

uniapp实现图片预览,懒加载,下拉刷新等

实现的功能 懒加载 lazy-load --对小程序起效果图片预览下拉刷新触底加载更多底下设置安全距离env(safe-area-inset-bottom)右下角固定图标置顶及刷新功能 效果如图&#xff1a; 预览 代码 <template><view class"image-classify"><uni-segmente…

FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“第 12 章 FFmpeg的移动开发”介绍了如何使用FFmpeg在手机上剪辑视频&#xff0c;方便开发者更好地开发类似剪映那样的视频剪辑软件。那么在Android系统上还有一款国产的开源视频剪辑框架RxFFmpeg&#xff0c;通过该…

小测一下笔记本电脑的VMXNET3和E1000e网卡性能

正文共&#xff1a;999 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 通过上次操作&#xff0c;我们已经实现了将笔记本电脑的ESXi版本从6.0升级到了6.7&#xff08;VMware ESXi 6.7可以成功识别机械硬盘了&#xff09;&#xff0c;并且测得以电脑中的虚拟机作为server…

K8S初始化master节点不成功kubelet.service failed(cgroup driver配置问题)

一、背景 安装k8s集群&#xff0c;初始化master节点一直不成功。 二、排查 查看日志 ps -ef | grep kube-apiserver [rootzjy01 home]# ps -ef | grep kube-apiserver root 85663 4637 0 12:41 pts/1 00:00:00 grep --colorauto kube-apiserver [rootzjy01 home…

C++ 标准模板库算法之 transform 用法

目录 1. 说明 2. 用法示例 1. 说明 std::transform 是一种多功能算法&#xff0c;用于将已知函数应用于一个或多个范围内的元素&#xff0c;并将结果存储在输出范围内。它主要有两种形式&#xff1a;一元运算和二元运算。具体来说是在 <algorithm> 标头中。函数声明&am…

开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程

文章的目的为了记录.net mvc学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发文件系统&#xff0c;临时进行学习开发&#xff0c;系统上线3年未出没有大问题。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 嵌入式 .net mvc 开发&#xff…