Nginx入门教程
1.Nginx 简介
Nginx 是一个高性能的 web 服务器和反向代理服务器,同时也可以用作负载均衡器、邮件代理等。特点:高并发处理能力、低资源消耗和模块化设计。

2.Nginx 与网站
Nginx 是网站与用户之间的“中间人”,负责接收用户请求,并将请求转发给网站的后端服务(比如 PHP、Node.js、Java 等应用),再把响应结果返回给用户。

大多数网站使用 Nginx 处理网站请求。
3.Nginx 学习资源

4.Nginx 安装部署
4.1 安装
Debian/Ubuntu:
sudo apt update
sudo apt install nginx
CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx
Fedora:
sudo dnf install nginx
mac:
brew install nginx
sudo nginx
4.2 启动
sudo systemctl enable nginx
sudo systemctl start nginx
5.Nginx 配置目录
安装目录:$ whereis nginx
配置目录:$ tree -F /etc/nginx
/etc/nginx/ # Nginx 主配置目录
├── conf.d/ # 额外配置文件目录,自动包含 *.conf
├── fastcgi.conf # FastCGI 配置(用于 PHP 等)
├── fastcgi_params # FastCGI 参数(旧版格式)
├── koi-utf # KOI8 到 UTF 编码转换(俄语支持)
├── koi-win # KOI8 到 Windows 编码转换
├── mime.types # 文件扩展名与 MIME 类型映射表
├── modules-available/ # 可用的动态模块(可能为空)
├── modules-enabled/ # 启用的动态模块(通常是软链接)
├── nginx.conf # 主配置文件,Nginx 的入口配置
├── proxy_params # 反向代理的默认参数
├── scgi_params # SCGI 服务参数
├── sites-available/ # 可用站点配置目录(不自动生效)
│ └── default # 默认站点配置文件
├── sites-enabled/ # 启用站点配置(软链接指向 available)
│ └── default -> /etc/nginx/sites-available/default
├── snippets/ # 公共配置片段目录
│ ├── fastcgi-php.conf # PHP FastCGI 配置片段
│ └── snakeoil.conf # 示例 SSL 配置(伪造测试证书)
├── uwsgi_params # uWSGI 服务参数
└── win-utf # Windows 编码支持文件
7 directories, 14 files
最重要的是 sites-available 和 sites-enabled 目录:在 sites-available 目录下创建每个网站的配置文件,链接到 sites-enabled 启用配置。
6.Nginx 配置域
6.1 主配置文件与 http 块
user www-data; # 指定 Nginx 以哪个用户身份运行(通常是低权限用户)
worker_processes auto; # 自动设置工作进程数量(等于 CPU 核心数)
pid /run/nginx.pid; # 指定存放 Nginx 主进程的 PID 文件路径
error_log /var/log/nginx/error.log; # 错误日志文件路径
include /etc/nginx/modules-enabled/*.conf; # 引入已启用的动态模块配置
events {
worker_connections 768; # 每个工作进程的最大连接数
}
http {
sendfile on; # 启用高效的 sendfile 系统调用(用于静态文件传输)
tcp_nopush on; # 减少网络包数量,提高效率(与 sendfile 搭配)
types_hash_max_size 2048; # MIME 类型哈希表的最大大小
include /etc/nginx/mime.types; # 包含 MIME 类型映射表
default_type application/octet-stream; # 默认的 MIME 类型(找不到类型时使用)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 启用的 SSL 协议(禁用不安全的 SSLv2/3)
ssl_prefer_server_ciphers on; # 使用服务器端指定的加密算法优先
access_log /var/log/nginx/access.log; # 访问日志文件路径
gzip on; # 启用 gzip 压缩,提升传输效率
include /etc/nginx/conf.d/*.conf; # 引入 conf.d 目录下的所有配置(通常用于服务段落)
include /etc/nginx/sites-enabled/*; # 引入启用的虚拟主机配置文件
}
主配置文件包含 全局配置 和 http 块。http 块主要负责配置 与 HTTP 协议相关的所有内容。
6.2 Server 块
server
块负责配置一个 虚拟主机(网站实例) 的相关信息,主要用于定义如何响应特定的请求(如域名、端口、路径等)。
server {
listen 80 default_server; # 监听 IPv4 的 80 端口,作为默认站点
listen [::]:80 default_server; # 监听 IPv6 的 80 端口,作为默认站点
root /var/www/html; # 网站根目录
index index.html index.htm index.nginx-debian.html; # 默认首页文件
server_name _; # 匹配所有未被其他 server 捕获的请求
location / {
try_files $uri $uri/ =404; # 如果文件或目录不存在,则返回 404
}
}
以上是默认 Nginx 默认 server 块配置文件,处理所有来自 80 端口的默认请求:

用户可以添加多个 server 块配置文件到 sites-available 目录下。
7.Nginx 静态网站
7.1 配置 server 块
问:用户访问 www.zxzsk.com 时,Nginx 服务器是如何处理请求的?
答:Nginx 根据 Server 块中的配置进行处理,配置如下:
server {
listen 80;
listen [::]:80;
server_name www.zxzsk.com; #指定域名
root /var/www/www.zxzsk.com; #网站目录
index index.html index.htm; #首页可识别文件
charset utf-8;
location / {
try_files $uri $uri/ =404;
}
# 错误页面配置
error_page 404 /404.html;
location = /404.html {
internal;
}
# 访问日志和错误日志路径
access_log /var/log/nginx/www.zxzsk.com.access.log;
error_log /var/log/nginx/www.zxzsk.com.error.log;
}
前提:已将域名 www.zxzsk.com 解析到 Nginx 服务器。
效果:通过 http://www.zxzsk.com 访问网站
位置:添加配置文件到 sites-available 目录,通过符号链接到 sites-enabled 目录启用配置;删除链接则禁用配置。
# 符号链接
sudo ln -s /etc/nginx/sites-available/www.zxzsk.com.conf /etc/nginx/sites-enabled/
# 重载配置前检查语法错误
sudo nginx -t
# 重载配置
sudo systemctl reload nginx
7.2 前端地址使用 SSL 证书(Certbot 自动申请和配置 SSL)
前提:完成了 http 配置
安装 Certbot
sudo apt update
sudo apt install certbot
申请和配置 SSL 证书
sudo certbot --nginx -d blog.zxzsk.com -d www.example.com
-d 域名
申请证书,可以同时申请多个域名的证书。如果使用的是 Apache 服务器,则将 --nginx
改为 --apache
。获取证书成功后,自动添加 SSL 证书配置到配置文件。
效果:通过 https://www.zxzsk.com 访问网站,更加安全!
关于 SSL 证书自动续期
证书由 Let's Encrypt 颁发,效期为 90 天。默认情况下 Certbot 自动创建证书效期监测和续期服务。你可以通过以下命令测试证书续期:
sudo certbot renew --dry-run
8.Nginx 反向代理
8.1 代理后端地址
# /etc/nginx/sites-available/a.zxzsk.com
server {
listen 80;
server_name a.zxzsk.com; # 前端地址
location / {
proxy_pass http://10.10.10.33:8080;
# 将客户端请求信息中的host信息传递给后端服务器
proxy_set_header Host $host;
# 客户端的ip传递给后端服务器
proxy_set_header X-Real-IP $remote_addr;
# 记录代理服务器ip,并传递给后端服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
场景:通过前端地址 http://a.zxzsk.com 访问后端地址 http://10.10.10.33:8080
SSL 证书的申请和获取参照 7.2 Certbot 。
8.2 后端地址使用 SSL 证书
# /etc/nginx/sites-available/b.zxzsk.com
server {
listen 80;
server_name a.zxzsk.com;
location / {
proxy_pass https://soulio.cn; # ✅ 使用 https 协议
# 开启 SNI 支持(TLS 多域名识别)
proxy_ssl_server_name on;
# 如果后端是自签证书,可关闭验证(建议生产开启验证)
proxy_ssl_verify off;
# 保留客户端请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
效果:通过 http://b.zxzsk.com 访问 https://soulio.cn
同样 SSL 证书的配置参照 7.2 Certbot 。
9.Nginx 负载均衡
用途:启用多个后端地址,部分后端服务器宕机也不影响服务。
9.1 一对多
# /etc/nginx/sites-available/zxzsk.com
server {
listen 80;
server_name zxzsk.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 定义上游后端服务器池
upstream backend_pool {
server 10.10.10.33:8080 weight=3;
server 10.10.10.33:8081 weight=1;
}
权重:默认是 1,后端地址被访问概率 = 单权重/总权重。
9.2 多对多
# a.example.com 和 b.example.com 都使用 backend_pool
server {
listen 80;
server_name a.example.com b.example.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 定义后端服务器池,自动轮询、负载均衡
upstream backend_pool {
server 192.168.10.2:8080 weight=3;
server 192.168.10.2:8081 weight=2;
}