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

Nginx 基础教程:从安装到核心配置(视频教程)

Nginx 基础教程:从安装到核心配置

  • Nginx(发音 “engine x”)是一款高性能的 HTTP 服务器、反向代理服务器、负载均衡器 和静态资源服务器,以轻量、高并发、低内存占用著称,广泛用于生产环境。
  • 视频资料:https://pan.quark.cn/s/9f93644f30d3https://pan.quark.cn/s/63db8f41c5c9

一、环境准备:安装 Nginx

1. 主流系统安装方式

(1)CentOS/RHEL(YUM 仓库)
# 安装 EPEL 仓库(CentOS 默认无 Nginx 源)
yum install epel-release -y# 安装 Nginx
yum install nginx -y# 启动 Nginx 并设置开机自启
systemctl start nginx
systemctl enable nginx
(2)Ubuntu/Debian(APT 仓库)
# 更新软件源
apt update# 安装 Nginx
apt install nginx -y# 启动并设置开机自启(Ubuntu 16.04+ 自动启动)
systemctl start nginx
systemctl enable nginx
(3)Windows 安装
  1. 从 Nginx 官网 下载稳定版(Stable version)的 Windows 压缩包;
  2. 解压到任意目录(如 D:\nginx-1.24.0);
  3. 打开命令行,进入解压目录,执行 nginx.exe 启动。

2. 验证安装

启动后,浏览器访问 http://服务器IPhttp://localhost(本地),若看到 Nginx 默认欢迎页,说明安装成功。

二、Nginx 核心概念与目录结构

1. 核心角色

  • HTTP 服务器:直接提供静态资源(HTML、CSS、JS、图片)访问;
  • 反向代理:接收客户端请求,转发到后端应用(如 Tomcat、Node.js),隐藏后端服务地址;
  • 负载均衡:将多客户端请求分发到多个后端服务器,提高并发能力;
  • 动静分离:静态资源(图片、JS)由 Nginx 直接处理,动态请求(接口)转发给后端。

2. 关键目录结构(Linux 为例)

目录/文件作用
/etc/nginx/核心配置目录
/etc/nginx/nginx.conf主配置文件(入口配置)
/etc/nginx/conf.d/子配置目录(推荐将站点配置放在这里)
/usr/share/nginx/html/默认静态资源根目录(欢迎页存放处)
/var/log/nginx/日志目录(access.log 访问日志、error.log 错误日志)
/usr/sbin/nginxNginx 可执行文件(命令行工具)

三、Nginx 常用命令

所有命令需在 Linux 终端(或 Windows 命令行,去掉 sudo)执行:

# 1. 启动 Nginx
sudo systemctl start nginx  # 系统服务方式(推荐)
# 或直接执行二进制文件
sudo nginx# 2. 停止 Nginx(强制停止:-s stop;优雅停止:-s quit)
sudo systemctl stop nginx
# 或
sudo nginx -s stop/quit# 3. 重启 Nginx(配置修改后生效)
sudo systemctl restart nginx
# 或优雅重启(不中断服务)
sudo nginx -s reload# 4. 查看 Nginx 状态
sudo systemctl status nginx# 5. 检查配置文件语法是否正确(修改配置后必做!)
sudo nginx -t# 6. 查看 Nginx 版本
nginx -v  # 简单版本
nginx -V  # 详细版本(含编译参数)

四、核心配置:nginx.conf 详解

Nginx 配置采用 块级结构,核心块包括 main(全局)、httpserverlocation,层级关系:main -> http -> server -> location

1. 主配置文件示例(简化版)

# ==================== main 全局块(影响整个 Nginx 服务)====================
worker_processes  1;  # 工作进程数(推荐设为 CPU 核心数,如 2、4)
error_log  /var/log/nginx/error.log warn;  # 错误日志路径+级别(debug/warn/error/crit)
pid        /var/run/nginx.pid;  # Nginx 进程 PID 文件# ==================== events 块(影响 Nginx 与客户端的网络连接)====================
events {worker_connections  1024;  # 每个工作进程最大连接数(默认 1024,高并发可调至 10000+)use epoll;  # 事件驱动模型(Linux 推荐 epoll,性能最优)
}# ==================== http 块(HTTP 服务器核心配置,可包含多个 server)====================
http {include       /etc/nginx/mime.types;  # 引入 MIME 类型映射(识别文件后缀对应的 Content-Type)default_type  application/octet-stream;  # 默认 MIME 类型(未知文件下载)# 日志格式定义(name: main)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 目录下所有 .conf 后缀的子配置(推荐站点配置分离)include /etc/nginx/conf.d/*.conf;
}

2. server 块(站点配置)

server 块定义一个独立的站点(虚拟主机),通过 listen(端口)和 server_name(域名)区分不同站点。

示例 1:静态资源服务器(直接访问 HTML/图片)

/etc/nginx/conf.d/ 新建 static.conf

server {listen       80;  # 监听 80 端口(HTTP 默认端口)server_name  static.test.com;  # 绑定域名(本地测试可修改 hosts 文件映射)# 静态资源根目录(所有请求从这里查找文件)root   /usr/share/nginx/static;index  index.html index.htm;  # 默认索引文件(访问域名时优先找这些文件)# location 块(匹配请求路径,精细化配置)location / {# 当请求路径匹配 / 时,使用上面的 root 和 index 配置try_files $uri $uri/ /index.html;  # 找不到文件时 fallback 到 index.html(SPA 应用必备)}# 匹配所有图片文件(优化缓存)location ~* \.(jpg|jpeg|png|gif|ico)$ {expires 30d;  # 浏览器缓存 30 天add_header Cache-Control "public";}# 匹配 JS/CSS 文件(优化缓存)location ~* \.(js|css)$ {expires 7d;  # 缓存 7 天}
}
示例 2:反向代理(转发请求到后端服务)

比如将 api.test.com 的请求转发到本地 8080 端口的 Java/Node.js 服务:
新建 /etc/nginx/conf.d/proxy.conf

server {listen       80;server_name  api.test.com;# 所有请求转发到后端location / {proxy_pass http://127.0.0.1:8080;  # 后端服务地址proxy_set_header Host $host;  # 传递原始主机名proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递代理链 IP}
}
示例 3:负载均衡(分发请求到多台后端)

http 块中添加 upstream 定义后端集群,再通过 proxy_pass 引用:

http {# 定义后端集群(名称:backend_servers)upstream backend_servers {server 192.168.1.100:8080;  # 后端服务器 1server 192.168.1.101:8080;  # 后端服务器 2server 192.168.1.102:8080 backup;  # backup:主服务器故障时启用}# 站点配置server {listen 80;server_name app.test.com;location / {proxy_pass http://backend_servers;  # 引用 upstream 集群proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
  • 负载均衡策略(默认是 轮询):
    • weight=数值:权重(如 server 192.168.1.100:8080 weight=5;,权重越高,分配到的请求越多);
    • ip_hash:按客户端 IP 哈希分配,同一客户端始终访问同一台后端(解决会话保持问题);
    • fair:按后端响应时间分配,响应快的优先(需额外模块)。

五、关键配置说明

1. location 匹配规则

location 用于匹配请求路径,语法:location [匹配模式] 路径 { ... },匹配优先级从高到低:

匹配模式示例说明
精确匹配location = /login { }只匹配 /login 路径(完全相等)
前缀匹配location ^~ /static { }匹配以 /static 开头的路径(不正则)
正则匹配`location ~* .(jpgpng)$ { }`
普通前缀location /api { }匹配以 /api 开头的路径(优先级最低)

2. 静态资源优化核心配置

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {root /usr/share/nginx/static;expires 15d;  # 浏览器缓存(减少重复请求)gzip on;  # Gzip 压缩(减小文件体积)gzip_types text/css application/javascript image/png;  # 指定压缩类型etag on;  # 启用 ETag 缓存验证(避免重复下载未修改文件)add_header Cache-Control "public, max-age=1296000";  # 缓存控制头
}

3. 跨域配置(解决前端跨域问题)

如果 Nginx 作为反向代理,需允许前端跨域请求,在 location 中添加:

location / {add_header Access-Control-Allow-Origin *;  # 允许所有域名(生产环境建议指定具体域名,如 https://xxx.com)add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";  # 允许的请求方法add_header Access-Control-Allow-Headers "Content-Type, Authorization";  # 允许的请求头# 处理 OPTIONS 预检请求(跨域必加)if ($request_method = 'OPTIONS') {return 204;}
}

六、常见问题排查

1. 配置文件语法错误

# 检查语法(必做!)
nginx -t
# 若报错,根据提示修改配置文件(如括号不匹配、端口被占用、路径不存在)

2. 端口被占用

# 查看 80 端口占用情况(CentOS)
netstat -tulpn | grep 80
# 或(Ubuntu)
ss -tulpn | grep 80
# 停止占用端口的进程,或修改 Nginx 监听端口(如 listen 8081;)

3. 403 权限错误

  • 原因:Nginx 工作进程(默认 nginx 用户)没有访问静态资源目录/文件的权限;
  • 解决:
    # 给资源目录授权(示例目录 /usr/share/nginx/static)
    chmod -R 755 /usr/share/nginx/static
    # 或修改目录所有者为 nginx 用户
    chown -R nginx:nginx /usr/share/nginx/static
    

4. 502 Bad Gateway

  • 原因:反向代理的后端服务未启动、端口错误、网络不通;
  • 解决:
    1. 检查后端服务是否正常运行(如 curl 127.0.0.1:8080);
    2. 确认 proxy_pass 地址正确;
    3. 查看 Nginx 错误日志(/var/log/nginx/error.log)定位具体原因。

七、进阶方向

  1. HTTPS 配置:通过 Let’s Encrypt 申请免费 SSL 证书,配置 listen 443 ssl; 启用 HTTPS;
  2. 缓存配置:使用 Nginx 缓存后端响应,减少后端压力;
  3. 限流配置:限制单 IP 访问频率,防止恶意请求;
  4. 日志分析:结合 ELK 栈或 GoAccess 分析访问日志;
  5. Docker 部署:使用 Docker 快速部署 Nginx,简化环境配置。
http://www.dtcms.com/a/600939.html

相关文章:

  • 实战指南:使用 CAN FD LIN网关进行嵌入式开发与协议转换
  • Excel插件:学校成绩统计与排名介绍
  • IBMS三维可视化集成系统产品介绍
  • 网站负责人核验现场拍摄照片电子件网站建设总结经验
  • 宇宙膨胀速度的光速极限:基于张祥前统一场论的第一性原理推导与观测验证
  • Custom SRP - 14 Multiple Cameras
  • QT开发汇总(更新2025.11.12)
  • HTML5 MathML:现代网页中的数学表达利器
  • wordpress admin head简述搜索引擎优化
  • DeepSeek-OCR实战(05):DeepSeek-OCR-WebUI部署(Docker)
  • CI/CD自动化部署革命:“三分钟流水线“背后的工程实践
  • 【工具】PixPin 电脑实用截图工具!带免费OCR截图/贴图/录屏/文字识别
  • 京东关键字搜索接口逆向:从动态签名破解到分布式请求调度
  • 第三章 大语言模型基础学习笔记
  • 莱芜网站设计公司制作图片文字的软件
  • 自己做本地视频网站商城网站开发的任务书
  • 通过 API 与 Gradio 构建 AI 应用
  • 【C++进阶】二叉树进阶
  • 【C++】多态(2):纯虚函数多态底层原理
  • C++/Linux小项目:自主shell命令解释器
  • MEMS振荡器MST8012抗冲击设计应对严苛振动环境
  • 【数据结构】常见的排序算法 -- 交换排序
  • Rust与主流编程语言的深度对比分析
  • NebulaChat 框架学习笔记:深入理解 Reactor 与多线程同步机制
  • 网站开发接口网站建设需要什么
  • 聚焦新“新双高计划”,高职学校如何进行数字化转型?
  • 全志V853视频输入驱动框架详解:从VIN模块到虚通道实战
  • 网站建设需要英语吗wordpress笑话主题模板
  • Azure OpenAI GPT-5 PTU 容量规划与弹性配置实践
  • [linux仓库]多线程同步:基于POSIX信号量实现生产者-消费者模型[线程·柒]