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

Nginx的使用教程以及用途

Nginx的使用教程以及用途

一、什么是Nginx

Nginx是一款轻量级、高性能的开源 HTTP 服务器和反向代理服务器,同时也支持邮件代理、TCP/UDP 代理等功能。它由俄罗斯程序员 Igor Sysoev 于 2004 年首次公开发布,设计初衷是解决传统服务器在高并发场景下的性能瓶颈,也是当下web开发中热门的web服务器

二、和Apache有什么区别

Nginx 和 Apache 是目前最主流的两款 Web 服务器,两者在设计理念、架构和适用场景上有显著差异,核心区别可以从以下几个维度对比:

1. 核心架构:并发处理方式不同

这是两者最本质的区别,直接决定了性能表现:

  • Apache:采用 “多进程 / 多线程模型”。简单说,每处理一个客户端连接,就会创建一个独立的进程(或线程)来专门负责。这种模型逻辑直观,但资源消耗高 —— 每个进程 / 线程会占用独立的内存和 CPU,当并发连接数激增(比如超过 1 万)时,容易出现内存耗尽、上下文切换频繁的问题,难以应对 “高并发” 场景。
  • Nginx:采用 “事件驱动的异步非阻塞模型”。它通过一个(或少量)工作进程,基于事件循环机制同时处理大量连接(无需为每个连接创建独立进程)。这种设计让 Nginx 能以极低的资源(几 MB 内存)支撑数万甚至数十万并发连接,尤其适合高负载场景。
2.性能与资源占用
  • 高并发场景:Nginx 优势明显。例如,同样配置的服务器,Apache 在并发连接数超过几千时可能出现响应变慢,而 Nginx 处理数万连接仍能保持稳定。
  • 资源消耗:Nginx 更轻量。运行时内存占用通常只有几 MB 到几十 MB,而 Apache 因进程 / 线程开销,内存占用会随并发数增长显著上升。
  • 静态资源处理:Nginx 对静态文件(HTML、CSS、图片等)的处理效率远高于 Apache,因为它的架构更适合 “快速读取 - 返回” 的短连接场景。
3. 功能与灵活性
  • 模块生态:Apache 的模块更丰富且成熟,尤其是针对动态内容处理(如 PHP、Python)的模块(如mod_php),可以直接嵌入服务器进程中运行,配置简单。但模块大多是 “静态编译”,新增模块可能需要重新编译服务器。
  • Nginx 模块:更轻量,且支持 “动态加载”(部分模块),配置更简洁。但它对动态内容的处理通常不直接嵌入,而是通过反向代理转发给后端服务(如 FastCGI、uWSGI),这种 “分离” 设计反而让架构更灵活(比如方便扩展后端应用服务器)。
  • 热部署:Nginx 支持 “不重启服务” 更新配置或升级程序,而 Apache 修改核心配置后通常需要重启(或重载进程),可能短暂影响服务。
4. 适用场景
  • Apache 更适合
    • 动态内容为主的中小型网站(如传统 PHP 博客、企业官网),依赖mod_php等模块快速部署;
    • 对模块兼容性要求高,需要使用特定 Apache 专属模块的场景;
    • 并发量中等(几千以内),对资源消耗不敏感的场景。
  • Nginx 更适合
    • 高并发场景(如电商秒杀、大型门户网站),需要支撑数万级并发连接;
    • 作为前端代理服务器(反向代理、负载均衡),分发流量到后端多台应用服务器;
    • 静态资源密集型服务(如图片 CDN、静态网站托管);
    • 需要轻量、稳定、低资源消耗的场景(如微服务网关、API 服务器)。

三、Nginx的用途

Nginx 凭借其高性能、轻量灵活的特性,用途极为广泛,从基础的 Web 服务到复杂的分布式架构,都能看到它的身影。以下是其核心用途及典型场景:

1. 作为 Web 服务器,直接托管网站

Nginx 最基础的功能是作为 HTTP 服务器,直接托管静态网站(如 HTML、CSS、JavaScript、图片、视频等静态资源)。

  • 优势:对静态资源的处理效率极高(基于异步非阻塞架构),能快速读取文件并返回给客户端,且内存占用极低。
  • 场景:个人博客、企业官网、静态文档站点(如使用 Hexo、Hugo 生成的静态网站)、图片 / 视频资源库等。
2. 反向代理服务器,隐藏后端服务

反向代理是 Nginx 最常用的功能之一:客户端请求先发送到 Nginx,再由 Nginx 转发到后端的应用服务器(如 Tomcat、Node.js、Python 服务等),最终将后端的响应返回给客户端。

  • 作用:
    • 隐藏后端服务器的真实 IP 和端口,提高安全性(客户端只能看到 Nginx 的地址);
    • 统一入口(比如用api.example.com转发到多个后端 API 服务);
    • 实现 “前后端分离” 架构(Nginx 处理前端静态资源,同时转发 API 请求到后端)。
  • 场景:几乎所有动态网站(如电商平台、社交应用)都会用 Nginx 做反向代理,比如前端页面由 Nginx 直接返回,用户登录、下单等请求由 Nginx 转发给后端 Java/Python 服务。
3. 负载均衡,分发流量到多台服务器

当后端服务需要支撑高并发(如秒杀活动、大促)时,单台服务器可能扛不住压力,此时可部署多台相同的应用服务器,由 Nginx 作为 “调度中心”,将客户端请求均匀分发到这些服务器,实现负载均衡。

  • 常见策略:
    • 轮询(默认):按顺序依次分发到后端服务器;
    • 权重(weight):给性能好的服务器分配更高权重,接收更多请求;
    • IP 哈希(ip_hash):同一客户端 IP 始终转发到同一服务器(解决会话保持问题);
    • 最少连接数(least_conn):优先转发到当前连接最少的服务器。
  • 场景:大型网站(如淘宝、京东)的后端服务集群、微服务架构中同一服务的多实例部署等,通过负载均衡避免单台服务器过载,提高系统可用性。
4. 静态资源加速与 CDN 节点

Nginx 对静态资源(图片、视频、JS/CSS 等)的处理效率远高于动态服务器,因此常被用来专门托管静态资源,或作为 CDN(内容分发网络)的边缘节点。

  • 优化手段:通过配置缓存策略(如expires设置缓存过期时间)、启用 Gzip 压缩、支持断点续传等,进一步减少传输带宽、加速资源加载。
  • 场景:短视频平台的封面图 / 视频片段分发、电商网站的商品图片存储、前端静态资源(如 Vue/React 打包后的文件)的快速分发。
5. API 网关,管理接口请求

在微服务架构中,后端会拆分为多个独立服务(如用户服务、订单服务、支付服务),Nginx 可作为 API 网关,统一处理所有客户端的接口请求:

  • 功能:路由(根据 URL 将请求转发到对应微服务)、认证授权(验证 Token/API 密钥)、限流(限制单 IP 的请求频率,防止恶意攻击)、日志监控(记录所有接口调用情况)等。
  • 优势:相比专门的网关工具(如 Spring Cloud Gateway),Nginx 更轻量、性能更高,适合中小规模微服务架构。
6. 缓存服务,减轻后端压力

Nginx 可缓存后端服务的响应结果(如 API 返回的 JSON 数据、数据库查询结果),当后续有相同请求时,直接返回缓存内容,无需再次请求后端。

  • 适用场景:非实时更新的数据(如商品分类列表、热门文章),通过缓存减少后端数据库或 API 服务的压力,提升响应速度。
7. SSL 终结,处理 HTTPS 加密

HTTPS 通信需要进行 SSL/TLS 握手和加密解密,这一过程对服务器资源消耗较高。Nginx 可作为 “SSL 终结点”,在前端完成 HTTPS 的解密(将 HTTPS 请求转为 HTTP),再转发给后端服务器;后端响应则由 Nginx 加密后以 HTTPS 返回给客户端。

  • 作用:减轻后端服务器的加密解密负担,同时集中管理 SSL 证书(只需在 Nginx 配置一次,无需每个后端服务单独配置)。
8. 邮件代理服务器

Nginx 还支持作为邮件代理(SMTP、POP3、IMAP 协议),用于邮件服务器的负载均衡或邮件转发。虽然这一用途不如 Web 相关功能普及,但在邮件服务集群中仍有应用。

四、Nginx使用教程

1、安装 Nginx

Nginx 支持 Linux、Windows、macOS 等系统,这里以最常用的Linux(Ubuntu/CentOS)Windows为例。

1.1 Linux 系统安装(推荐)

Linux 是 Nginx 的主要运行环境,安装方式简单且稳定。

  • Ubuntu/Debian:用apt包管理器直接安装:

    # 更新软件源
    sudo apt update
    # 安装Nginx
    sudo apt install nginx -y
    # 检查是否安装成功(显示版本即成功)
    nginx -v
    
  • CentOS/RHEL:用yumdnf安装:

    # 安装EPEL源(Nginx在EPEL仓库中)
    sudo yum install epel-release -y
    # 安装Nginx
    sudo yum install nginx -y
    # 检查版本
    nginx -v
    

安装完成后,Nginx 默认会自动启动,配置文件路径:

  • 主配置文件:/etc/nginx/nginx.conf
  • 站点配置文件(推荐存放处):/etc/nginx/conf.d/(新建.conf文件即可)
1.2 Windows 系统安装

适合本地测试,生产环境建议用 Linux。

  • 下载地址:Nginx 官方下载页,选择稳定版(Stable version)的nginx-x.x.x.zip

  • 解压到任意目录(如D:\nginx),目录结构如下:

    nginx/
    ├─ conf/        # 配置文件(核心是nginx.conf)
    ├─ html/        # 默认静态文件(index.html、50x.html)
    ├─ logs/        # 日志文件(access.log、error.log)
    └─ nginx.exe    # 启动程序
    

2、Nginx 基本操作(启动 / 停止 / 重载)

无论哪种系统,核心操作类似,以下以 Linux 为例(Windows 用nginx.exe替换nginx命令,在解压目录的 cmd 中执行)。

操作Linux 命令Windows 命令(cmd 中)
启动服务sudo systemctl start nginxsudo nginxstart nginx 或直接双击nginx.exe
停止服务sudo systemctl stop nginxsudo nginx -s stopnginx -s stop
重启服务sudo systemctl restart nginxnginx -s reload(热重载,推荐)
热重载配置(推荐)sudo nginx -s reloadnginx -s reload(修改配置后无需停服)
查看服务状态sudo systemctl status nginx查看logs/error.log或进程(`tasklistfindstr nginx`)
检查配置文件语法sudo nginx -t (关键!修改配置后必做)nginx -t

3、配置文件解析(核心)

Nginx 的功能通过配置文件实现,理解配置结构是关键。主配置文件nginx.conf的基本结构如下(简化版):

# 1. 全局块:配置影响Nginx整体的参数
user nginx;          # 运行Nginx的用户(Linux)
worker_processes auto;  # 工作进程数(建议设为CPU核心数,auto自动适配)
error_log /var/log/nginx/error.log;  # 错误日志路径
pid /run/nginx.pid;   # 进程ID文件路径# 2. events块:配置网络连接相关参数
events {worker_connections 1024;  # 每个工作进程的最大连接数(总并发≈worker_processes * 1024)use epoll;  # Linux下推荐用epoll模型(高效处理事件)
}# 3. http块:配置HTTP服务器的核心参数(可包含多个server块)
http {include /etc/nginx/mime.types;  # 支持的文件类型(如html、css等)default_type application/octet-stream;  # 默认文件类型# 日志格式定义(可自定义)log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;  # 访问日志路径sendfile on;  # 开启高效文件传输(推荐开启)tcp_nopush on;  # 配合sendfile使用,提高网络效率tcp_nodelay on;keepalive_timeout 65;  # 长连接超时时间(秒)gzip on;  # 开启Gzip压缩(减少传输带宽)# 引入其他配置文件(如conf.d目录下的站点配置)include /etc/nginx/conf.d/*.conf;# 4. server块:配置一个虚拟主机(网站)server {listen 80;  # 监听端口(默认80,HTTP)server_name localhost;  # 域名(如www.example.com)# 5. location块:匹配URL路径,配置具体路由规则location / {root /usr/share/nginx/html;  # 静态资源根目录index index.html index.htm;  # 默认首页文件}# 错误页面配置(如404、500)error_page 404 /404.html;location = /404.html {root /usr/share/nginx/html;}}
}

核心逻辑http块包含多个server(虚拟主机),每个server通过listenserver_name区分,location块根据 URL 路径匹配并执行具体规则(如返回静态文件、转发请求等)。

4、常用场景配置示例

以下是实际开发中最常用的场景,直接修改配置文件后执行nginx -t检查语法,再nginx -s reload生效。

4.1 静态资源托管(部署静态网站)

适合托管 HTML、CSS、JS、图片等静态文件(如个人博客、企业官网)。

步骤

  • 准备静态文件,比如放在/var/www/myblog(Linux)或D:\myblog(Windows)。
  • /etc/nginx/conf.d/(Linux)或conf/(Windows)新建myblog.conf,配置如下:
server {listen 80;  # 监听80端口server_name blog.example.com;  # 绑定域名(本地测试可用localhost)# 静态资源根目录(替换为你的文件路径)root /var/www/myblog;  # 默认首页(访问域名时自动加载)index index.html index.htm;# 配置缓存(可选,加速静态资源加载)location ~* \.(jpg|jpeg|png|gif|css|js)$ {expires 30d;  # 图片、CSS、JS缓存30天}
}

效果:访问http://blog.example.com(或http://localhost)即可看到静态网站。

4.2 反向代理(转发请求到后端服务)

场景:前端静态资源由 Nginx 托管,API 请求转发到后端服务(如 Node.js、Java 服务)。

例如:后端服务运行在127.0.0.1:3000,希望通过http://api.example.com访问。

配置api.conf

server {listen 80;server_name api.example.com;# 所有请求转发到后端服务location / {proxy_pass http://127.0.0.1:3000;  # 后端服务地址proxy_set_header Host $host;  # 传递主机名到后端proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

效果:访问http://api.example.com/user会自动转发到http://127.0.0.1:3000/user

4.3 负载均衡(分发流量到多台后端服务器)

场景:后端有 3 台服务(192.168.1.10:8080192.168.1.11:8080192.168.1.12:8080),通过 Nginx 分发请求。

配置loadbalance.conf

# 定义后端服务器集群(upstream块)
upstream backend_servers {# 轮询策略(默认,按顺序分发)server 192.168.1.10:8080;server 192.168.1.11:8080 weight=2;  # 权重2(接收更多请求)server 192.168.1.12:8080;# 可选:其他策略# ip_hash;  # 同一IP固定转发到同一服务器(解决会话问题)# least_conn;  # 转发到连接最少的服务器
}# 前端Nginx配置
server {listen 80;server_name www.example.com;location / {proxy_pass http://backend_servers;  # 转发到上面定义的集群proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

效果:请求会按权重分发(1.11 接收的请求是 1.10 和 1.12 的 2 倍),避免单台服务器过载。

4.4 配置 HTTPS(加密访问)

需要先申请 SSL 证书(如 Let’s Encrypt 免费证书),假设证书文件为cert.pem(公钥)和key.pem(私钥)。

配置https.conf

server {listen 443 ssl;  # 监听443端口(HTTPS默认)server_name www.example.com;# SSL证书配置ssl_certificate /etc/nginx/cert/cert.pem;  # 公钥路径ssl_certificate_key /etc/nginx/cert/key.pem;  # 私钥路径# 可选:SSL优化(增强安全性)ssl_protocols TLSv1.2 TLSv1.3;  # 支持的TLS版本ssl_ciphers HIGH:!aNULL:!MD5;  # 加密套件# 静态资源或反向代理配置(同前面的示例)location / {root /var/www/html;index index.html;}
}# 可选:HTTP自动跳转HTTPS
server {listen 80;server_name www.example.com;return 301 https://$host$request_uri;  # 强制跳转HTTPS
}

5、日志管理

Nginx 日志是排查问题的关键,默认分为两种:

  • 错误日志:记录启动、运行中的错误(如配置错误、后端服务不可达),路径在error_log指令中配置(如/var/log/nginx/error.log)。
  • 访问日志:记录所有客户端请求(IP、时间、URL、状态码等),路径在access_log指令中配置,格式由log_format定义。

查看日志示例

# 查看错误日志(最后10行)
tail -10 /var/log/nginx/error.log# 实时查看访问日志
tail -f /var/log/nginx/access.log

6、常见问题解决

  1. 启动失败:执行nginx -t检查配置文件语法错误,或查看error.log找具体原因(如端口被占用,用netstat -tulpn | grep 80检查)。
  2. 修改配置不生效:忘记执行nginx -s reload,或配置文件路径错误(需放在conf.d目录并被include)。
  3. 静态文件 403 错误:Nginx 用户(如nginx)没有静态文件目录的读取权限,执行chmod -R 755 /var/www/myblog授权。
http://www.dtcms.com/a/578825.html

相关文章:

  • 个人网站开发项目报告什么是网站
  • 呼伦贝尔寰宇网站建设网站界面设计方案
  • 青少年机器人技术等级考试理论综合试卷(一级)2018年12月
  • SnapShot备份还原丨系统引导修复
  • 典型岛屿问题全解析:DFS 与 BFS 的思路与代码实现(ACM输入输出)
  • 欢迎访问陕西省交通建设集团公司网站阿里巴巴网站优化怎么做
  • 山东网站建设企业公司修改wordpress文章发布时间
  • 浙江汉农建设有限公司网站wordpress和dede区别
  • 硬件工程师-基础知识电阻(三)
  • 杭州web前端开发目前流行的CSS样式库
  • 详解不同场景下的服务降级手段
  • BuildingAI 充值中心页面详细开发计划
  • 网站封了给个能用的朗读者外国人做的汉字网站
  • C语言中的sizeof和strlen
  • Y迷宫刺激器 MG-3S型Y迷宫刺激器
  • 弹幕网站开发代码公众号网页源码
  • 微信外链网站开发网络推广运营推广
  • 矩阵的运算(二)
  • 专业的单位网站开发开发企业管理网站建设
  • 泰安网站建设制作电话号码机械设备怎样做网络推广
  • 移动硬盘灯亮但不读取无法识别的解决方法
  • 制作销售网站有哪些规划一个电子商务网站
  • flash+xml地图网站奉贤做网站价格
  • 微信小程序开发:详细解读onLoad生命周期函数
  • 太平洋手机上海网站制作 优化
  • 使用chrony配置时间同步
  • 管理公司网站一般做什么做网站需要源码
  • 品牌官方网站建设中国防疫政策马上要变化了
  • wrk 压测工具教程(Ubuntu22 实战版)
  • 郑州金水区网站建设动漫双人互动模板