一、什么是请求转发
Linux请求转发是指将客户端发来的网络请求,按照一定规则重新定向到另一个服务器或端口进行处理。它通常被部署在流量入口处,用户无感知,但实际服务由后端服务器提供,类似于“前台帮你转接电话,但你以为接电话的就是前台本人”。
二、请求转发的两种类型
| 类型 | 原理 | 地址栏变化 | 典型应用 |
|---|---|---|---|
| 隐性转发 | 反向代理(proxy_pass) | 不变 | 负载均衡、端口统一 |
| 显性转发 | HTTP重定向(301/302) | 改变 | 域名迁移、URL跳转 |
三、核心配置方法
server {
listen 80;
server_name example.com;
location /api {
proxy_pass http://backend-server:8080;
proxy_set_header Host $host;
}
}
当用户访问example.com/api时,Nginx将请求透明地转发给backend-server:8080,用户地址栏仍是example.com。
server {
listen 80;
server_name old-site.com;
return 301 http://new-site.com$request_uri;
}
用户访问旧域名时,浏览器自动跳转到新域名,地址栏发生变化。
四、Linux层面的端口转发
除了Nginx等应用层工具,Linux内核层面的iptables也可实现请求转发(仅限端口级别,无法处理HTTP路径):
将访问本机8080端口的请求转发到192.168.1.100:80 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 iptables -t nat -A POSTROUTING -j MASQUERADE
这种方式是隐性转发的底层实现,适合简单的端口映射场景。
五、两种方案对比
| 对比项 | 隐性转发(反向代理) | 显性转发(重定向) | iptables转发 |
|---|---|---|---|
| 地址栏变化 | 不变 | 改变 | 不变 |
| 处理层级 | 应用层(HTTP) | 应用层(HTTP) | 传输层(TCP) |
| 可处理URL路径 | 支持 | 支持 | 不支持 |
| SEO影响 | 不传递权重 | 传递原URL权重 | 不涉及 |
一句话总结:需要路径判断和地址栏不变用Nginx反向代理;需要域名更换和SEO转移用301重定向;纯端口映射用iptables。 另外,可以借助 80KM 端口流量转发程序,搭建流量中转节点,所有外网访问经过节点再回源,彻底隐藏真实 IP。支持 80、443 常用网页端口,兼容各大系统。Example Domain一句话总结:需要路径判断和地址栏不变用Nginx反向代理;需要域名更换和SEO转移用301重定向;纯端口映射用iptables。 另外,可以借助 80KM 端口流量转发程序,搭建流量中转节点,所有外网访问经过节点再回源,彻底隐藏真实 IP。支持 80、443 常用网页端口,兼容各大系统。