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

Nginx 学习总结

蛟龙未遇,潜水于鱼鳖之间;君子失时,拱手于小人之下。

导航

  • 1 工具介绍
  • 2 配置结构
  • 3 模块指令
  • 4 应用场景
    • 4.1 Web 服务器
    • 4.2 文件服务器
    • 4.3 反向代理
    • 4.4 负载均衡
    • 4.5 FastCGI
    • 4.6 四层代理
  • 5 杂七杂八

1、工具介绍

Nginx 是一款轻量级的 Web 服务器、反向代理服务器、邮件代理服务器,它的出现完美地解决了“传统 Web 服务器在高并发连接下性能不足”的问题。

而相比于 Apache 这个老牌对手,它最大的优势便是高并发、内存占用少,除此之外在文档完善方面和模块丰富方面,它还是不及 Apache。

2、配置结构

Nginx 默认的配置文件只需一个 /etc/nginx/nginx.conf 文件即可,但一些 Linux 发行商为了方便参数维护,故一般会对其进行分割以形成模块化结构的配置文件,如下面的 Debian 系统:【注意:不同发行版的模块化结构各有所不同。】

/etc/nginx
├── nginx.conf				#主配置的入口点
├── conf.d/					#可在 HTTP 区域内配置的参数,亦可在此处单独添加配置
├── mime.types
├── sites-available/		#可用的虚拟主机
├── sites-enabled/			#启用的虚拟主机
├── modules-available/		#可用的模块配置
├── modules-enabled/		#启用的模块配置
├── snippets/				#启用 SSL 证书

上面介绍了配置文件的目录结构,下面则介绍 nginx.conf 文件整体的用法结构:

# Nginx 全局配置区域events {#Event 全局配置区域
}http {# HTTP 全局配置区域upstream backend {#代理池区域}server {# 虚拟主机全局配置区域location / {# URI 路由配置区域}}
}stream {# 流代理全局配置(基于 TCP 四层的代理)upstream backend {#代理池区域}server {# 代理主机全局配置区域}
}

注意:在 Nginx 的配置文件中,http、stream 块指令只能存在一次,不能像 server 那样可以同时存在多个。

3、模块指令

Nginx 最核心的设计之一就是它的模块体系,几乎所有功能都是由模块提供的。可以理解成:Nginx 本体很小,功能全靠模块拼装。 通常我们把常用模块分成 核心模块、HTTP 模块、Stream 模块 三类来看最清晰。

  • 核心模块

    • Core functionality:提供 Nginx 最基本的功能,即上述 Nginx 全局配置区域 的指令。
  • HTTP 模块

    • ngx_http_core_module:提供 HTTP 服务最 基本 的功能。【相关指令:listen、server、location、root
    • ngx_http_ssl_module:为 HTTP 服务提供 传输加密 的功能。【相关指令:listen 443 ssl
    • ngx_http_index_module:为 HTTP 服务提供 默认页面加载 的功能。【相关指令:index
    • ngx_http_rewrite_module:为 HTTP 服务提供 链接重定向 的功能。【相关指令:if、rewrite、return
    • ngx_http_access_module:为 HTTP 服务提供 访问日志记录 的功能。【相关指令:access_log、log_format。注意,该模块不包括错误日志记录的功能,该功能属于 Nginx Core 模块的功能,而非 HTTP Core 模块。】
    • ngx_http_auth_basic_module:为 HTTP 服务提供 基本身份认证 的功能。【相关指令:auth_basic
    • ngx_http_access_module:为 HTTP 服务提供 基于 IP 的访问控制 功能。【相关指令:deny、allow
    • ngx_http_geoip_module:为 HTTP 服务提供 基于城市的访问控制 功能,但需配合 rewrite 模块实现。【相关指令:geoip_country、geoip_city,该模块提供更多的其实是一些变量。】
    • ngx_http_limit_conn_module:为 HTTP 服务提供 限制并发连接 的功能,以保护多线程下载时引发的带宽问题。【相关指令:limit_conn、limit_conn_zone,以 Web 为主,推荐值 10 个;若以文件下载为主,推荐值 5 个。】
    • ngx_http_limit_req_module:为 HTTP 服务提供 限制请求速率 的功能,以防止 CC 攻击。【相关指令:limit_req、limit_req_zone,推荐值 10r/s】
    • ngx_http_stub_status_module:为 HTTP 服务提供 请求状态统计页面 的功能。【相关指令:stub_status
    • ngx_http_autoindex_module:为 HTTP 服务提供 文件服务器 的功能。【相关指令:autoindex
    • ngx_http_proxy_module:为 HTTP 服务提供 反向代理 的功能。【相关指令:proxy_pass
    • ngx_http_upstream_module:为 HTTP 服务提供 负载均衡 的功能。【相关指令:upstream
    • ngx_http_fastcgi_module:为 HTTP 服务提供 支持 FastCGI 协议 的功能。【相关指令:fastcgi_pass、fastcgi_index
  • Stream 模块

    • ngx_stream_core_module:提供 TCP/UDP 流量代理服务最 基本 的功能。【相关指令:stream
    • ngx_stream_proxy_module:为 Stream 服务提供 反向代理 的功能。【相关指令:proxy_pass
    • 其它模块与上面为 HTTP 提供的模块功能类似,故此处不再赘述。

4、应用场景

以下 Nginx 的各种使用场景中,提供的参数信息仅为能实现功能所需的最基本要求,忽略了更多的参数配置、以及模块加载配置。

4.1、Web 服务器

(1)在一个虚拟主机下,开设不同的网页功能。

#在一个虚拟主机下,开设不同的网页功能。【即,路由匹配功能】
http {#......server {listen       80;server_name  www.test.com;location / {root /var/www/html;index index.html;}location /test2 {root /var/www/html2;index index.html;}}
}

(2)创建了两个虚拟主机,需分别使用不同的域名进行访问。

#创建了两个虚拟主机,需分别使用不同的域名进行访问。
http {#......server {listen       80;server_name  www.test.com;location / {root /var/www/html;index index.html;}}server {listen       8080;server_name  www.test2.com;location / {root /var/www/html2;index index.html;}}
}

(3)开启 HTTPS 服务,以及 HTTP 重定向至 HTTPS 服务。

#开启 HTTPS 服务,以及 HTTP 重定向至 HTTPS 服务。
http {#......server {listen       443 ssl;server_name  www.test.com;#证书通过 make-ssl-snake 命令去制作会更方便,起码在实验环境下这是可行的。ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;location / {root /var/www/html;index index.html;}}server {listen      80;server_name .test.com;		#此处的匹配方式颇有讲究,如 *.test.com 和 .test.com 效果大不相同。 location / {return 301 https://www.test.com$request_uri;}}
}

4.2、文件服务器

http {autoindex on;# 显示目录autoindex_exact_size on;# 显示文件大小autoindex_localtime on;# 显示文件时间server {listen       80;root         /var/www;}
}

4.3、反向代理

http {#......server {listen       80;server_name  www.test.com;location / {proxy_pass http://www.test2.com;}}
}

4.4、负载均衡

http {#......upstream load_balance_server {#weigth参数表示权值,权值越高被分配到的几率越大server 192.168.1.11:80   weight=1;server 192.168.1.12:80   weight=2;server 192.168.1.13:80   weight=3;
}server {listen       80;server_name  www.test.com;location / {proxy_pass http://load_balance_server;}}
}

注:(1)负载均衡支持的策略有:轮询、加权、Hash,权重相同即为轮询,均来自同一个主机的请求则均发往相同的服务器即为 Hash。(2)负载均衡其实和反向代理非常像,区别仅在于负载均衡必须要有代理池,即 upstream 指令。

4.5、FastCGI

暂待

4.6、四层代理

#实现 SSH 代理转发
stream {upstream tcp_proxy {hash $remote_addr consistent;  #远程地址做个hashserver 1.1.1.1:22;}server {listen 2222;proxy_pass tcp_proxy;}
}

5、杂七杂八

(1)Nginx 常用命令。

nginx -s stop       快速关闭 Nginx,可能不保存相关信息,并迅速终止 web 服务。
nginx -s quit       平稳关闭 Nginx,保存相关信息,有安排的结束 web 服务。
nginx -s reload     因改变了 Nginx 相关配置,需要重新加载配置而重载。
nginx -s reopen     重新打开日志文件。
nginx -c filename   为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t            不运行,仅仅测试配置文件。
nginx -T            不运行,仅将 Nginx 启动时所加载的所有配置、模块等信息全部显示出来。
nginx -v            显示 nginx 的版本。
nginx -V            显示 nginx 的版本,编译器版本和编译时的配置参数。

(2)Nginx 模块管理。

  • nginx -V 输出的模块信息中:(1)--with-compat 表示该 nginx 主体程序支持动态加载模块,否则就是纯静态编译版本;(2)--with-*_module 代表将该模块编译进 nginx 主体程序;(3)--with-*_module = dynamic 代表将模块编译为动态模块,而不是直接编进主程序,启用它需要手动加载。
  • nginx -T 能够看到 nginx 在运行时的配置情况,加载了哪些模块都能够准确的看到;而通过 nginx -V 是无法看到当前加载的模块信息的,它只能看到当初编译 nginx 时使用的命令参数。
  • apt search libnginx-mod- 能够搜索到 APT 软件仓库都提供了哪些 nginx 动态模块,如有需要可随时下载,以便使用。

(3)Nginx 的 Stream 功能平时用的较少,但他实际上和 HAProxy 的功能类似,都是为了实现 TCP/UDP 四层的流量代理转发功能。

(4)Nginx 参考手册:Nginx 中文文档、Nginx 极简教程、Nginx 中文手册、二丫讲梵。

(5)辅助工具:Nginx 配置在线生成器。

http://www.jsqmd.com/news/550610/

相关文章:

  • 基于本机配置的 YOLO26 Conda ss‘安装教程:Windows 11 + RTX 3050 Ti 实战版
  • AIVideo一键部署指南:开箱即用的AI视频创作平台
  • DFT入门指南:手把手配置Synopsys DFT工具实现Core Wrapping(含三种Test Mode详解)
  • wsl 导出与导入
  • 风丘电动汽车高压测试方案 助力电动汽车性能评估与优化
  • SDMatte常见问题排查手册:从部署失败到抠图异常的解决方案
  • 飞机表面缺陷识别分割数据集labelme格式4612张5类别
  • 外卖党必备智能工具:美团神券自动抢,每月多省200元的效率提升方案
  • Umi-OCR:如何用免费开源工具批量处理上百张图片的文字识别?
  • ai辅助开发:让快马智能解析你的需求,自动生成最优homebrew环境配置方案
  • Kubernetes集群证书有效期延长实战:从1年到100年的kubeadm源码修改指南
  • 3步突破显卡壁垒:OptiScaler让所有GPU焕发新生
  • coze-loop在代码审查中的应用:快速定位问题,生成优化方案
  • 十进制与二进制的相互转换
  • OpCore-Simplify:零代码黑苹果配置革命,从复杂到简单的3步自动化指南
  • Hearthstone-Script:革新性炉石传说自动化工具全方位指南
  • 实战演练:DDoS攻击工具解析与高效防护方案
  • Vue+SpringBoot全栈项目搭建:手把手教你实现一个带分页和Swagger的CRUD应用
  • OpenClaw多账户管理:ollama-QwQ-32B区分处理工作与个人任务
  • OpenClaw自动化办公实战:用nanobot处理Excel与邮件
  • FastAPI GraphQL接口缓存:Response Cache优化完整指南
  • Ozon子账号创建|新手必看!5分钟搞定,多人运营零风险、高效率
  • 实战演练:基于Spring Boot的个人博客系统,用快马AI一键生成完整后端代码
  • 2026论文写作工具红黑榜:AI论文工具怎么选?一篇看懂
  • ANPC-VSG(虚拟同步机)控制,基于有源中点钳位三电平的VSG构网型逆变器控制,采用LCL...
  • Janus-Pro-7B企业级部署架构设计:高可用与弹性伸缩方案
  • 2026年毕业论文生存指南:9款AI神器深度测评,百考通AI成为全流程MVP
  • 从线负载模型到SPEF:我的数字后端设计寄生参数建模演进笔记
  • 提升备课效率:用快马AI快速生成标准化生物繁殖教学案例与应用
  • Qwen3-TTS-12Hz-1.7B-VoiceDesign音色克隆效果对比