当前位置:首页 > 服务器技术 > 正文

Nginx反向代理重写规则详解(从零开始掌握URL转发与重写技巧)

在现代 Web 开发和运维中,Nginx 是一个非常流行的高性能 Web 服务器和反向代理工具。通过合理配置 Nginx 的反向代理重写规则,我们可以轻松实现请求转发、隐藏后端服务、优化 URL 结构等功能。本文将手把手教你如何配置 Nginx 实现反向代理,并结合 rewrite 指令完成 URL 重写,即使你是完全的新手,也能看懂并上手操作。

什么是反向代理?

简单来说,反向代理就是客户端请求先发送到 Nginx 服务器,Nginx 再把请求“代理”给后端真正的应用服务器(比如 Node.js、Python Flask、Java Spring 等),然后把后端的响应返回给客户端。这样做的好处包括:

  • 隐藏真实后端地址,提高安全性
  • 负载均衡,分发请求到多个后端实例
  • 统一入口,便于管理 HTTPS、缓存等
Nginx反向代理重写规则详解(从零开始掌握URL转发与重写技巧) Nginx反向代理 Nginx重写规则 反向代理配置 URL重写 第1张

基础反向代理配置

假设你有一个运行在 http://localhost:3000 的 Node.js 应用,你想通过访问 https://yourdomain.com 来使用它。只需在 Nginx 配置文件中添加如下内容:

server {    listen 80;    server_name yourdomain.com;    location / {        proxy_pass http://localhost:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}

保存配置后,执行 nginx -s reload 重载配置即可生效。现在所有访问 yourdomain.com 的请求都会被转发到本地 3000 端口的应用。

什么是 URL 重写(Rewrite)?

URL 重写是指在不改变用户看到的 URL 的前提下,内部将请求路径转换为另一个路径。这常用于 SEO 优化、旧链接跳转、API 路由调整等场景。

例如:用户访问 /api/users,但你的后端实际接口是 /v1/users,这时就可以用 rewrite 指令进行重写。

结合反向代理使用 rewrite 规则

下面是一个典型场景:前端访问 /app/xxx,我们希望将其重写为 /xxx 并代理到后端服务。

server {    listen 80;    server_name yourdomain.com;    location /app/ {        # 将 /app/xxx 重写为 /xxx        rewrite ^/app/(.*)$ /$1 break;        proxy_pass http://localhost:3000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}

这里的关键是 rewrite ^/app/(.*)$ /$1 break;

  • ^/app/(.*)$:匹配以 /app/ 开头的路径
  • /$1:将匹配到的部分(即 (.*))替换为根路径下的对应内容
  • break:表示重写后停止处理后续 rewrite 规则,并继续当前 location 块中的其他指令(如 proxy_pass)

常用 rewrite 标志说明

标志 作用
last 重写后重新匹配 location(类似 Apache 的 L 标志)
break 停止 rewrite 处理,继续当前 location 中的其他指令
redirect 返回 302 临时重定向(浏览器地址栏会变)
permanent 返回 301 永久重定向

实战小例子:旧页面跳转

如果你把网站从 /old-page.html 迁移到了 /new-page/,可以用以下规则自动跳转:

location = /old-page.html {    return 301 /new-page/;}

或者使用 rewrite:

rewrite ^/old-page\.html$ /new-page/ permanent;

总结

通过本文,你应该已经掌握了 Nginx 反向代理重写规则 的基本用法。无论是做 API 网关、前后端分离部署,还是处理 SEO 友好 URL,这些技能都非常实用。记住几个关键点:

  • 使用 proxy_pass 实现反向代理
  • 使用 rewrite 修改内部请求路径
  • 根据需求选择 breaklast 或重定向标志
  • 测试配置前先用 nginx -t 检查语法

希望这篇教程能帮助你顺利配置 Nginx!如果你在实践中遇到问题,欢迎查阅官方文档或在社区提问。

关键词:Nginx反向代理, Nginx重写规则, 反向代理配置, URL重写