前言
Nginx 作为高性能开源 Web 服务器和反向代理工具,凭借轻量级架构、高并发处理能力和灵活的模块化设计,成为现代 Web 架构的核心组件。从全球顶尖网站到微服务架构,Nginx 在负载均衡、缓存加速、安全防护、流量调度等场景中发挥着不可替代的作用。
本文将聚焦 Nginx 的四大核心功能 ------正向代理 、反向代理(七层 / 四层) 、缓存机制 、Rewrite 与正则表达式 ,通过理论解析 + 实操步骤的形式,手把手教你掌握 Nginx 核心配置技巧,实现从基础安装到高级配置的全流程落地,为构建高效、稳定的 Web 服务奠定基础。
一、正向代理:客户端的 "中间人"
1.1 正向代理核心概念
正向代理(Forward Proxy)是位于客户端和原始服务器之间的代理服务器,核心作用是转发客户端请求至目标服务器,并将响应结果返回给客户端。Nginx 正向代理可隐藏客户端真实 IP,是企业内网管控、匿名访问、资源缓存加速的核心工具。
典型应用场景:
- 内网访问控制:限制员工访问社交媒体、非工作类网站;
- 匿名访问:通过代理服务器隐藏用户真实 IP 地址;
- 资源缓存加速:缓存软件包、镜像文件等公共资源,降低外网带宽消耗。
正向代理访问流程:浏览器 / 客户端 → 代理服务器 → 目标服务器,代理服务器作为客户端的 "代言人" 完成请求转发。
1.2 Nginx 编译安装(含正向代理 HTTPS 支持)
Nginx 默认不支持 HTTPS 正向代理,需编译安装并添加第三方模块ngx_http_proxy_connect_module,以下为OpenEuler/CentOS环境下的完整安装步骤。
1.2.1 安装依赖软件包
[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar
1.2.2 创建运行用户、组及日志目录
为 Nginx 创建独立运行用户,降低安全风险,同时创建日志目录并授权:
[root@localhost ~]# useradd -M -s /sbin/nologin nginx # 不创建宿主目录、禁止Shell登录
[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx:nginx /var/log/nginx
1.2.3 编译安装 Nginx(添加 HTTPS 代理模块)
解压 Nginx 源码包,配置编译选项(启用核心模块 + 第三方 HTTPS 代理模块),执行编译安装:
# 解压源码包
[root@localhost ~]# tar zxf nginx-1.26.3_http_proxy.tar.gz
[root@localhost ~]# cd nginx-1.26.3
# 配置编译选项(关键:添加ngx_http_proxy_connect_module模块)
[root@localhost nginx-1.26.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-http_ssl_module --with-http_v2_module --with-http_realip_module \
--with-http_stub_status_module --with-http_gzip_static_module --with-pcre \
--with-stream --with-stream_ssl_module --with-stream_realip_module \
--add-module=./ngx_http_proxy_connect_module
# 编译并安装
[root@localhost nginx-1.26.3]# make && make install
核心编译参数说明:
表格
| 参数 | 功能说明 |
|---|---|
| --prefix=/usr/local/nginx | 指定 Nginx 安装目录 |
| --user/--group=nginx | 指定运行用户 / 组 |
| --with-http_ssl_module | 支持 HTTPS 协议 |
| --with-http_realip_module | 支持 IP 透传 |
| --with-stream | 支持四层 TCP/UDP 代理 |
| --add-module=xxx | 加载第三方 HTTPS 正向代理模块 |
1.2.4 创建软链接 + 添加系统服务
创建软链接实现nginx命令全局调用,编写 systemd 服务文件实现 Nginx 开机自启、便捷管理:
# 创建软链接
[root@localhost nginx-1.26.3]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
# 编写系统服务文件
[root@localhost ~]# vi /lib/systemd/system/nginx.service
服务文件内容如下:
ini
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/sbin/nginx -t
ExecStart=/usr/local/sbin/nginx
ExecReload=/usr/local/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
User=root
Group=root
[Install]
WantedBy=multi-user.target
重新加载服务配置并启动 Nginx:
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable nginx --now
[root@localhost ~]# systemctl status nginx # 验证启动状态
1.3 正向代理核心配置
编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,添加正向代理配置,支持 HTTP/HTTPS 请求转发:
nginx
server {
listen 8080; # 代理监听端口
server_name proxy.example.com; # 代理服务器域名
# 配置DNS解析器,多个DNS用空格分隔
resolver 8.8.8.8 1.1.1.1;
# 启用CONNECT方法,支持HTTPS代理
proxy_connect;
proxy_connect_allow 443 80; # 允许代理的端口
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
# 处理所有HTTP/HTTPS请求
location / {
proxy_pass $scheme://$http_host$request_uri; # 动态协议转发
proxy_set_header Host $http_host;
proxy_buffers 256 4k; # 优化缓冲区
proxy_max_temp_file_size 0; # 关闭临时文件
proxy_http_version 1.1; # 启用HTTP/1.1长连接
proxy_set_header Connection "";
}
}
配置完成后,检查配置文件语法并重载 Nginx:
[root@localhost ~]# nginx -t # 语法检查
[root@localhost ~]# nginx -s reload # 重载配置
1.4 正向代理验证
1.4.1 Windows 客户端验证(火狐浏览器)
- 打开火狐浏览器 → 设置 → 网络设置 → 选择手动配置代理;
- 配置 HTTP/HTTPS 代理为 Nginx 服务器 IP + 端口:
192.168.10.101:8080,勾选也将此代理用于 HTTPS; - 访问任意网站,可通过 Nginx 访问日志
/var/log/nginx/access.log查看请求记录,验证代理生效。
1.4.2 Linux 客户端验证(curl 命令)
使用curl -x参数指定代理服务器,访问目标网站验证:
[root@localhost ~]# curl -x http://192.168.10.101:8080 www.baidu.com
若正常返回百度页面源码,说明正向代理配置成功,客户端真实 IP 已被代理服务器隐藏。
二、反向代理:服务端的 "智能调度器"
反向代理(Reverse Proxy)是位于服务端前端 的代理服务器,客户端仅需访问代理服务器,由代理服务器将请求分发至后端应用服务器。Nginx 反向代理分为七层(应用层)和四层(网络层),是实现负载均衡、动静分离、安全隔离的核心手段。
核心特点 :后端应用服务器对客户端隐藏,代理服务器代理的对象是服务端 ;典型应用场景:负载均衡、动静分离、SSL 终端、灰度发布、数据库代理、SSH 跳板机等。
2.1 七层反向代理(HTTP/HTTPS 协议)
七层反向代理基于HTTP/HTTPS 协议,可深度解析 URL、Header、Cookie 等应用层内容,实现精准的请求分发,是 Web 服务最常用的代理方式。
2.1.1 实验环境准备
本次实验需两台主机,配置如下:
表格
| 操作系统 | 配置 | 服务器 IP | 运行服务 |
|---|---|---|---|
| OpenEuler | 2C4G | 192.168.10.101 | Nginx(反向代理) |
| OpenEuler | 2C4G | 192.168.10.102 | Httpd(后端应用) |
2.1.2 后端 Httpd 服务部署(192.168.10.102)
# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
# 安装Httpd并启动
[root@localhost ~]# dnf install httpd -y
[root@localhost ~]# echo "这是后端主机 192.168.10.102" > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd && systemctl enable httpd
2.1.3 Nginx 七层反向代理配置(192.168.10.101)
编辑 Nginx 主配置文件,通过upstream定义后端服务器地址池,proxy_pass实现请求转发:
nginx
http {
# 定义后端服务器地址池
upstream backend {
server 192.168.10.102:80; # 可添加多台主机实现负载均衡
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend; # 转发请求至后端地址池
proxy_set_header Host $host; # 传递客户端请求的Host头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
}
}
}
检查配置并重载 Nginx:
[root@localhost ~]# nginx -t && nginx -s reload
2.1.4 验证七层反向代理
在 Nginx 服务器或任意客户端执行 curl 命令,访问 Nginx 服务器 IP,验证请求转发至后端
[root@localhost ~]# curl 192.168.10.101
这是后端主机 192.168.10.102
返回后端 Httpd 的页面内容,说明七层反向代理配置成功。
2.2 四层反向代理(TCP/UDP 协议)
四层反向代理基于TCP/UDP 协议,不解析应用层内容,直接转发原始数据流,具有高性能、低延迟的特点,适用于数据库、SSH、游戏服务器等非 HTTP 服务。
2.2.1 Nginx 四层反向代理配置(SSH 代理示例)
四层代理需通过stream模块实现,stream 模块需与 http 模块平级,不能嵌套在 http 模块内。配置实现通过 Nginx 的 2222 端口代理至后端 192.168.10.102 的 22 端口(SSH):
nginx
# stream模块与http平级
stream {
# 定义后端SSH服务器地址池
upstream ssh_cluster {
server 192.168.10.102:22;
}
# 监听2222端口,转发SSH请求
server {
listen 2222;
proxy_pass ssh_cluster;
proxy_connect_timeout 5s; # 连接超时时间
proxy_timeout 1h; # 长连接保持时间
}
}
# 原有http模块配置不变
http {
...
}
检查配置并重载 Nginx:
[root@localhost ~]# nginx -t && nginx -s reload
# 验证2222端口监听状态
[root@localhost ~]# ss -nlpt | grep 2222
2.2.2 验证四层反向代理
通过 SSH 连接 Nginx 服务器的 2222 端口,验证是否成功登录后端 192.168.10.102 服务器:
[root@localhost ~]# ssh root@192.168.10.101 -p2222
# 登录后查看服务器IP,验证是否为后端主机
[root@localhost ~]# ifconfig
若显示 IP 为192.168.10.102,说明四层 SSH 代理配置成功,可实现通过 Nginx 作为跳板机安全访问内网服务器。
2.3 反向代理核心应用场景
表格
| 代理类型 | 应用场景 | 核心价值 |
|---|---|---|
| 七层反向代理 | 负载均衡、动静分离、SSL 终端、灰度发布 | 解析应用层内容,精准调度,降低后端服务压力 |
| 四层反向代理 | 数据库代理(MySQL/Redis)、SSH 跳板机、游戏服务器、MQTT 服务 | 高性能低延迟,适配非 HTTP 服务,实现端口映射与安全隔离 |
三、Nginx 缓存:提升响应速度,降低后端负载
Nginx 缓存功能主要基于反向代理缓存(Proxy Cache),核心作用是缓存后端服务器的响应内容,当客户端再次请求相同资源时,Nginx 直接返回缓存内容,无需转发至后端服务器,大幅提升响应速度、降低后端服务器负载和外网带宽消耗。
3.1 缓存核心类型与原理
Nginx 支持多种缓存类型,适用于不同场景,核心为代理缓存(Proxy Cache),其余为扩展类型:
表格
| 缓存类型 | 作用场景 | 核心说明 |
|---|---|---|
| 代理缓存(Proxy Cache) | 反向代理模式下,缓存 Tomcat/Apache 等后端服务器的响应内容 | 服务端缓存,核心缓存类型,本文重点讲解 |
| FastCGI 缓存 | 缓存 PHP/Python 等通过 FastCGI 协议处理的动态内容 | 需配合 PHP-FPM 使用,适用于动态脚本服务 |
| uWSGI/SCGI 缓存 | 缓存通过 uWSGI/SCGI 协议处理的后端内容 | 类似 FastCGI 缓存,适配小众后端协议 |
| 静态资源缓存 | 缓存图片、CSS、JS 等静态资源 | 客户端浏览器缓存,通过 expires 指令设置 |
3.1.1 代理缓存核心原理
- 客户端第一次请求资源 A,Nginx 检查缓存,未命中(MISS)则转发请求至后端服务器;
- 后端服务器返回资源 A 至 Nginx,Nginx 将资源 A 缓存至本地磁盘;
- Nginx 将资源 A 返回给客户端;
- 客户端再次请求资源 A,Nginx 检查缓存,命中(HIT)则直接返回本地缓存的资源 A,无需访问后端服务器。
3.2 代理缓存实战配置
代理缓存需基于七层反向代理实现,需先完成七层反向代理配置(参考 2.1 节),再添加缓存相关配置,以下为完整配置步骤。
3.2.1 创建缓存目录并授权
创建 Nginx 缓存存储目录,将目录所属用户 / 组设置为 nginx,避免权限问题:
[root@localhost ~]# mkdir -p /data/nginx/cache
[root@localhost ~]# chown -R nginx:nginx /data/nginx/cache
3.2.2 配置 Nginx 代理缓存
编辑 Nginx 主配置文件/usr/local/nginx/conf/nginx.conf,在http模块定义缓存全局参数,在location模块启用缓存:
nginx
http {
# 定义缓存全局参数(http模块内)
proxy_cache_path /data/nginx/cache # 缓存文件存储路径
levels=1:2 # 缓存目录层级结构(1级目录+2级子目录)
keys_zone=my_cache:10m # 共享内存区(my_cache为名称,10m为大小)
inactive=60m # 缓存闲置有效期(60分钟未访问则删除)
max_size=1g # 缓存最大磁盘空间(1GB,超出则触发LRU清理)
use_temp_path=off; # 关闭临时文件路径,提升性能
# 后端服务器地址池
upstream backend {
server 192.168.10.102:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 启用代理缓存
proxy_cache my_cache; # 关联上述定义的my_cache内存区
proxy_cache_key "$scheme$request_method$host$request_uri"; # 缓存键(唯一标识缓存资源)
# 不同状态码设置不同缓存有效期
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
proxy_cache_valid any 5s; # 其他状态码缓存5秒
# 添加缓存状态响应头(调试用,可查看缓存命中/未命中)
add_header X-Cache-Status $upstream_cache_status;
}
}
}
核心缓存参数解析:
表格
| 参数 | 功能说明 |
|---|---|
| keys_zone=my_cache:10m | 共享内存区用于存储缓存键和元数据,1MB 约存储 8000 个键 |
| inactive=60m | 缓存资源闲置 60 分钟未被访问,自动清理 |
| max_size=1g | 缓存最大磁盘容量,超出后按 **LRU(最近最少使用)** 算法清理旧缓存 |
| proxy_cache_key | 缓存唯一标识,避免相同资源重复缓存 |
| X-Cache-Status | 缓存状态响应头,值包括 MISS(未命中)、HIT(命中)、EXPIRED(过期)等 |
配置完成后,检查语法并重载 Nginx:
[root@localhost ~]# nginx -t && nginx -s reload
3.3 代理缓存验证
使用curl -I命令访问 Nginx 服务器,查看响应头中的X-Cache-Status字段,验证缓存命中状态:
第一步:首次请求(缓存未命中)
[root@localhost ~]# curl -I 192.168.10.101
HTTP/1.1 200 OK
Server: nginx/1.26.3
X-Cache-Status: MISS # 未命中,Nginx向后端请求资源
...
第二步:再次请求(缓存命中)
[root@localhost ~]# curl -I 192.168.10.101
HTTP/1.1 200 OK
Server: nginx/1.26.3
X-Cache-Status: HIT # 命中,Nginx直接返回本地缓存
...
第三步:验证缓存文件
查看缓存目录,确认 Nginx 已将后端资源缓存至本地:
[root@localhost ~]# ls /data/nginx/cache
# 可看到生成的缓存目录和文件
四、Nginx Rewrite 与正则:URL 的 "规则引擎"
Rewrite 是 Nginx 的URL 重写模块 ,结合正则表达式可实现 URL 路径美化、旧链接迁移、强制 HTTPS、动态路由等功能,是实现流量灵活调度的核心工具。Rewrite 通常与location指令配合使用,实现更精细的路径控制。
4.1 必备基础:Nginx 正则表达式
Rewrite 的核心是正则表达式匹配,Nginx 支持常用的正则元字符,以下为开发中最常用的正则语法,建议熟记:
表格
| 正则元字符 | 描述 | 示例 |
|---|---|---|
| ^ | 匹配输入字符串的起始位置 | ^/api:匹配以 /api 开头的 URL |
| $ | 匹配输入字符串的结束位置 | /$:匹配以 / 结尾的 URL |
| * | 匹配前面的字符零次或多次 | ol*:匹配 o、ol、oll 等 |
| + | 匹配前面的字符一次或多次 | ol+:匹配 ol、oll 等,不匹配 o |
| ? | 匹配前面的字符零次或一次 | do (es)?:匹配 do、does |
| . | 匹配除 \n 外的任意单个字符 | .php:匹配任意以.php 结尾的文件 |
| \ | 转义字符,匹配原义字符 | :匹配 符号 |
| \d | 匹配纯数字 | \d+:匹配 1 个及以上数字 |
| {n} | 重复 n 次 | \d {3}:匹配 3 位数字 |
| {n,} | 重复 n 次及以上 | \d {2,}:匹配 2 位及以上数字 |
| [a-z] | 匹配小写字母任意一个 | [a-z]+:匹配小写字母组合 |
| [a-zA-Z] | 匹配大小写字母任意一个 | [a-zA-Z]:匹配单个字母 |
4.2 必备基础:Nginx location 指令
location用于匹配请求 URI (域名后的路径,不含参数),定义不同的请求处理逻辑,Rewrite 通常在location内执行,二者协作实现精准的 URL 控制。
4.2.1 location 语法与匹配模式
nginx
location [匹配模式] /uri {
# 处理逻辑(rewrite、proxy_pass、return等)
}
location 匹配模式(按优先级从高到低排序):
表格
| 匹配模式 | 语法 | 说明 | 优先级 |
|---|---|---|---|
| 精确匹配 | location = /uri | 仅匹配与 uri 完全一致的请求 | 最高 |
| 精确前缀匹配 | location ^~ /uri | 匹配以 uri 开头的请求,不触发后续正则匹配 | 次高 |
| 正则匹配(区分大小写) | location ~ /uri | 按正则匹配 uri,区分大小写 | 中等 |
| 正则匹配(不区分大小写) | location ~* /uri | 按正则匹配 uri,不区分大小写 | 中等(与~按文件顺序优先) |
| 普通前缀匹配 | location /uri | 匹配以 uri 开头的请求,触发后续正则匹配 | 次低 |
| 通用匹配 | location / | 匹配所有未被上述模式匹配的请求 | 最低 |
4.2.2 location 优先级验证
配置不同匹配模式的 location,通过 curl 请求验证匹配结果:
nginx
server {
listen 80;
server_name example.com;
default_type text/plain; # 纯文本返回,避免浏览器下载
location = /abc { return 200 "精确匹配"; }
location ^~ /abcdef { return 200 "精确前缀匹配"; }
location ~ /test/abcdef { return 200 "区分大小写正则"; }
location ~* /test/abc { return 200 "不区分大小写正则"; }
location /abc { return 200 "普通前缀匹配"; }
location / { return 200 "通用匹配"; }
}
重载配置后,执行 curl 请求验证:
[root@localhost ~]# curl 192.168.10.101/abc # 精确匹配
精确匹配
[root@localhost ~]# curl 192.168.10.101/abcdef # 精确前缀匹配
精确前缀匹配
[root@localhost ~]# curl 192.168.10.101/test/ABC # 不区分大小写正则
不区分大小写正则
[root@localhost ~]# curl 192.168.10.101/xxx # 通用匹配
通用匹配
4.3 Rewrite 核心语法与 flag 标记
4.3.1 Rewrite 基本语法
nginx
rewrite <regex> <replacement> [flag];
- regex:正则表达式,匹配需要重写的 URL(仅匹配域名后的路径,不含参数);
- replacement:重写后的目标 URL;
- flag:重写标记,控制重写后的请求行为(核心)。
4.3.2 Rewrite 核心 flag 标记
flag 是 Rewrite 的核心,决定了重写后的请求是否继续匹配 location、是否跳转等,以下为 4 个最常用的 flag:
表格
| flag 标记 | 功能说明 | 适用场景 |
|---|---|---|
| last | 重写后重新触发 location 匹配,执行新 location 的逻辑 | 内部 URL 重写,路径美化、动态路由 |
| break | 重写后不重新匹配 location,直接在当前 location 处理 | 简单重写,避免循环匹配 |
| redirect | 返回 302 临时重定向,浏览器地址栏显示新 URL | 临时链接迁移,无需爬虫更新 URL |
| permanent | 返回 301 永久重定向,浏览器地址栏显示新 URL | 永久链接迁移,爬虫会更新 URL 至新地址 |
4.3.3 flag 标记实战验证
1. last 标记:重写后重新匹配 location
nginx
server {
listen 80;
default_type text/plain;
location /abc {
rewrite ^/abc /def last; # 重写/abc为/def,重新匹配location
}
location /def {
return 200 "this is def"; # 新location的处理逻辑
}
}
验证:curl 192.168.10.101/abc → 返回this is def,说明重写后匹配了 /def 的 location。
2. break 标记:重写后不重新匹配 location
nginx
server {
listen 80;
default_type text/plain;
location /abc {
rewrite ^/abc /def break; # 重写后不匹配新location
}
location /def {
return 200 "this is def";
}
}
验证:curl 192.168.10.101/abc → 返回 404,说明重写后未匹配 /def 的 location,直接访问 /def 物理路径(不存在)。
3. redirect 标记:302 临时重定向
nginx
server {
listen 80;
default_type text/plain;
location /abc {
rewrite ^/abc /def redirect; # 302临时跳转
}
location /def {
return 200 "this is def";
}
}
验证:浏览器访问http://192.168.10.101/abc,地址栏跳转为/def,返回 200,网络面板显示 302 状态码。
4. permanent 标记:301 永久重定向
nginx
server {
listen 80;
default_type text/plain;
location /abc {
rewrite ^/abc /def permanent; # 301永久跳转
}
location /def {
return 200 "this is def";
}
}
验证:浏览器访问http://192.168.10.101/abc,地址栏跳转为/def,网络面板显示 301 状态码,爬虫会将旧 URL 更新为新 URL。
4.4 Rewrite 高级用法
4.4.1 捕获组:提取 URL 中的参数
通过 ** 小括号 ()** 定义正则捕获组,将匹配的内容存入$1、$2、$3等变量,在重写后的 URL 中引用,实现动态 URL 重写。
示例 :将/category/tech/123重写为/archive/tech/123,提取分类和 ID:
server {
listen 80;
default_type text/plain;
# 匹配/category/分类/ID,捕获组1为分类,捕获组2为ID
location /category/ {
rewrite /category/(.+)/(\d+)$ /archive/$1/$2 last;
}
# 重写后匹配/archive,返回捕获的参数
location /archive/ {
return 200 "Category:$1, ID:$2";
}
}
验证:
[root@localhost ~]# curl 192.168.10.101/category/tech/456
Category:tech, ID:456
4.4.2 set 指令:自定义变量
set指令用于定义自定义变量,赋值后可在 Rewrite、return、日志等场景中引用,处理复杂的请求逻辑,语法:
set $variable value;
示例:定义变量并在返回内容中引用:
server {
listen 80;
default_type text/plain;
location /demo {
set $name "Nginx"; # 定义变量$name,值为Nginx
set $version "1.26.3"; # 定义变量$version
return 200 "Hello, $name! Version: $version"; # 引用变量
}
}
验证:
[root@localhost ~]# curl 192.168.10.101/demo
Hello, Nginx! Version: 1.26.3
4.5 Rewrite 典型应用场景
- 路径美化 :将
/index.php?id=123美化为/product/123; - 强制 HTTPS:将所有 HTTP 请求重定向至 HTTPS;
- 域名统一 :将
www.xxx.com和xxx.com统一为一个域名; - 旧链接迁移 :将过期的
/old/*永久重定向至/new/*; - SPA 单页应用路由 :将所有非静态资源请求重定向至
/index.html; - 灰度发布:按 IP/Header 将部分流量重写至新版本服务。
经典示例:强制 HTTPS + 域名统一
nginx
server {
listen 80;
server_name xxx.com www.xxx.com;
# 将http://xxx.com和http://www.xxx.com永久重定向至https://www.xxx.com
rewrite ^(.*)$ https://www.xxx.com$1 permanent;
}
五、总结
Nginx 的四大核心功能围绕代理 、缓存 、流量调度展开,各自承担着不同的角色,协同实现 Web 服务的高性能、高可用和高灵活性:
- 正向代理:作为客户端的 "中间人",实现内网管控、匿名访问和资源缓存,隐藏客户端真实 IP;
- 反向代理:作为服务端的 "智能调度器",七层代理解析应用层内容实现 Web 服务调度,四层代理转发数据流适配非 HTTP 服务,是负载均衡、动静分离的核心;
- 缓存机制:基于反向代理缓存,大幅提升资源响应速度,降低后端服务器负载,通过 LRU 算法实现缓存智能管理;
- Rewrite 与正则:作为 URL 的 "规则引擎",实现路径美化、链接迁移、强制 HTTPS 等功能,结合 location 实现精细化的流量调度。
掌握这四大核心功能,能够满足绝大多数企业级 Web 服务的配置需求,从基础的服务器代理到高级的流量调度和性能优化,Nginx 都能提供轻量级、高性能的解决方案。在实际生产环境中,需根据业务场景灵活组合配置,同时注重 Nginx 的性能调优和安全防护,构建更稳定、高效的 Web 架构。
后续拓展:Nginx 负载均衡、动静分离、SSL 证书配置、安全防护(防盗链、限流)、高可用(Keepalived+Nginx)等内容,将在后续文章中持续更新,敬请关注!