我将从概念、为什么需要、如何设置、配置示例和最佳实践等多个角度,为您提供一个全面的指南。

1、前置机:
位置 部署在网络DMZ区(隔离区)或内外网边界。
角色 作为“中间人”或“代理”,是外部网络(如互联网)访问内部系统的唯一通道。
主要职能
安全隔离 屏蔽内部真实服务器IP和拓扑结构,防止直接攻击。

协议转换 将外部的通用协议(如HTTP/HTTPS)转换为内部系统专用的协议(如数据库协议、FTP等)。
请求预处理 完成身份认证、权限校验、日志记录、数据格式检查、流量控制、防SQL注入等安全清洗。
负载均衡 将接收到的请求分发给后方多台应用服务器。
2、服务器:
位置 部署在信任的内网区域,受到防火墙的严密保护。

角色 真正的业务逻辑处理者,如Web应用服务器、数据库服务器、文件服务器等。
主要职能
处理核心业务 执行计算、数据存取、事务处理等。
存储敏感数据 存放用户信息、交易数据等核心资产。
增强安全性 这是最主要的目的,即使前置机被攻破,内部网络和核心服务器仍然是安全的。
提高性能 前置机可以卸载SSL加解密、压缩、缓存等任务,让后端服务器专注于业务计算。
提升可扩展性 易于在后端添加更多的应用服务器,前置机充当统一的流量入口。
简化运维和管理 所有外部流量都从一个点进入,便于监控、审计和故障排查。
设置过程可以分为网络规划、硬件/软件准备、安装配置、联调测试四个阶段。
这是最关键的一步,一个典型的三层网络架构如下:
互联网 (Internet)
|
[ 外部防火墙 ]
|
DMZ 区 (非军事化区)
|
[ 前置机 ] (IP: 公网IP 或 DMZ IP)
|
[ 内部防火墙 ] (规则:只允许前置机IP访问内网特定端口)
|
信任内网区
|
[ 应用服务器群 ] (IP: 内网IP, 如 192.168.1.10, .11, .12)
[ 数据库服务器 ] (IP: 内网IP, 如 192.168.1.20)防火墙规则要点:
外部防火墙 只开放提供给外部的服务端口(如Web的80/443)到前置机的IP。
内部防火墙 设置严格的白名单规则,只允许前置机的IP地址访问内网应用服务器的特定业务端口(如8080),其他所有流量一律拒绝。
| 组件 | 前置机 | 应用服务器 |
| 硬件 | 根据流量,通常不需要顶级CPU,但需要多网卡和良好网络吞吐量。 | 根据业务需求,需要强大的CPU(计算密集型)或大内存(数据库)。 |
| 操作系统 | 稳定、安全的Linux发行版(如CentOS, Rocky Linux, Ubuntu Server)。 | 稳定、安全的Linux或Windows Server。 |
| 关键软件 | 反向代理软件:Nginx, Apache HTTPD, HAProxy。 安全软件:iptables/firewalld(主机防火墙)。 | 运行时环境:Java JDK, .NET Runtime, Node.js, Python等。 应用容器:Tomcat, IIS, uWSGI等。 数据库:MySQL, PostgreSQL, Redis等。 |
阶段三:安装与配置(以Nginx为前置机为例)
1. 前置机配置 (Nginx)
安装Nginx
# CentOS/Rocky Linux
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# Ubuntu
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx配置反向代理
编辑Nginx主配置文件(通常是/etc/nginx/nginx.conf 或/etc/nginx/conf.d/default.conf)。
server {
listen 80; # 监听80端口(HTTP)
server_name your-domain.com; # 你的域名或公网IP
# 位置块,将所有请求转发到后端服务器群
location / {
# 设置后端服务器的地址和端口
proxy_pass http://192.168.1.10:8080; # 单台服务器
# 或者使用upstream实现负载均衡
# proxy_pass http://my_app_servers;
# 以下配置非常重要,用于传递客户端的真实信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 定义upstream组,实现负载均衡(可选)
upstream my_app_servers {
server 192.168.1.10:8080 weight=3; # weight表示权重,越高分配越多请求
server 192.168.1.11:8080;
server 192.168.1.12:8080;
# 可以添加负载均衡策略,如ip_hash, least_conn等
}配置防火墙
# 开放80和443端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload重启Nginx
sudo nginx -t # 测试配置文件语法是否正确
sudo systemctl restart nginx2. 应用服务器配置 (以Tomcat为例)
确保应用服务正常启动
systemctl start tomcat配置应用以获取真实客户端IP
由于所有请求都来自前置机(如192.168.1.2),Tomcat日志记录的IP都是前置机的,需要在server.xml中配置Valve,使用Nginx传递的X-Forwarded-For头信息。
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
proxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />配置内部防火墙
只允许前置机的IP(如192.168.1.2)访问本机的8080端口。
# 假设前置机IP是 192.168.1.2
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.2" port protocol="tcp" port="8080" accept'
sudo firewall-cmd --reload1、从内部网络直接访问应用服务器:curl http://192.168.1.10:8080,确保服务本身是正常的。
2、从前置机访问应用服务器: 在前置机上执行curl http://192.168.1.10:8080,确保内部防火墙规则正确。
3、从外部网络测试: 用浏览器或curl访问前置机的公网IP或域名(http://your-domain.com),应该能看到后端应用服务器的响应。
4、检查日志: 同时查看Nginx的访问日志(/var/log/nginx/access.log)和Tomcat的访问日志,确认请求流转正常,且Tomcat日志中记录的是真实的客户端IP而非前置机IP。
1、SSL/TLS终止: 在前置机上配置HTTPS(SSL证书),由前置机负责繁重的加解密工作,向后端传输时可以使用HTTP,减轻后端压力。
2、WAF(Web应用防火墙): 在前置层部署WAF(如ModSecurity),可以有效防御SQL注入、XSS等常见Web攻击。
3、严格的访问控制: 使用iptables/firewalld或安全组,实施“最小权限原则”,只开放绝对必要的端口。
4、日志和监控: 集中收集前置机和服务器的日志,监控它们的CPU、内存、磁盘和网络流量,设置警报。
5、高可用(HA): 避免单点故障,前置机本身也可以做集群,采用Keepalived + VRRP实现虚拟IP(VIP)漂移,或者使用DNS轮询+健康检查。
设置前置机和服务器是一个系统性的工程,核心思想是“安全隔离” 和“职责分离”。
简单项目 可以直接使用Nginx/Apache作为反向代理前置机。
复杂企业环境 可能会使用API网关(如Kong, Tyk)、负载均衡器(如F5, AWS ALB)或专有硬件来承担前置机的更多高级功能(如限流、熔断、认证等)。
希望这份详细的指南能帮助您成功搭建起安全可靠的系统架构!
文章摘自:https://idc.huochengrm.cn/fwq/13667.html
评论
房雪松
回复该指南详细介绍了前置机和服务器的概念、设置步骤和最佳实践,包括网络规划配置和安全强化措施等,通过分步指导和实践经验分享帮助读者成功搭建安全可靠的系统架构并提升性能与扩展性。。