Nginx 基础教程:从安装到核心配置(视频教程)
Nginx 基础教程:从安装到核心配置
- Nginx(发音 “engine x”)是一款高性能的 HTTP 服务器、反向代理服务器、负载均衡器 和静态资源服务器,以轻量、高并发、低内存占用著称,广泛用于生产环境。
- 视频资料:
https://pan.quark.cn/s/9f93644f30d3、https://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 安装
- 从 Nginx 官网 下载稳定版(Stable version)的 Windows 压缩包;
- 解压到任意目录(如
D:\nginx-1.24.0); - 打开命令行,进入解压目录,执行
nginx.exe启动。
2. 验证安装
启动后,浏览器访问 http://服务器IP 或 http://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/nginx | Nginx 可执行文件(命令行工具) |
三、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(全局)、http、server、location,层级关系: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 ~* .(jpg | png)$ { }` |
| 普通前缀 | 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
- 原因:反向代理的后端服务未启动、端口错误、网络不通;
- 解决:
- 检查后端服务是否正常运行(如
curl 127.0.0.1:8080); - 确认
proxy_pass地址正确; - 查看 Nginx 错误日志(
/var/log/nginx/error.log)定位具体原因。
- 检查后端服务是否正常运行(如
七、进阶方向
- HTTPS 配置:通过 Let’s Encrypt 申请免费 SSL 证书,配置
listen 443 ssl;启用 HTTPS; - 缓存配置:使用 Nginx 缓存后端响应,减少后端压力;
- 限流配置:限制单 IP 访问频率,防止恶意请求;
- 日志分析:结合 ELK 栈或 GoAccess 分析访问日志;
- Docker 部署:使用 Docker 快速部署 Nginx,简化环境配置。
