我如何使用 Nginx 构建安全的反向代理
Source: Dev.to
请提供您希望翻译的正文内容,我将按照要求保留链接、格式和代码块,仅翻译文本部分。
介绍
反向代理是现代 Web 基础设施中最强大的构建块之一。它位于用户和后端服务之间,充当守门人,能够提升性能、执行安全策略并控制流量。
在本指南结束时,您将拥有一个可部署在应用程序前面的实用设置。
反向代理架构
在高层次上,反向代理位于客户端和后端服务器之间。用户不直接访问你的应用服务器,所有请求首先经过代理。
Client
│
▼
Reverse Proxy (Nginx)
│
▼
Application Server好处
- 隐藏内部基础设施
- 集中安全策略
- 在同一位置终止 TLS
- 添加流量过滤和监控
示例场景
Internet
│
▼
Nginx Reverse Proxy
├── API Server (Node.js)
├── Web App (React / Next.js)
└── Admin Panel简单反向代理配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_app;
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 请求
- 将请求转发到后端应用
- 保留客户端 IP 信息
限流
公共服务经常面临机器人流量、扫描器和暴力破解攻击。限流通过限制客户端可以发出的请求数量来帮助保护您的应用程序。
定义限流区域
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
}在 Server 块中应用限流
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend_api;
}配置细节
- 限制: 每秒 10 个请求
- 突发: 允许短时间的流量峰值
- 保护 API 端点免受滥用
限流对抗自动化扫描器和暴力破解攻击尤其有效。
安全响应头
添加安全响应头可以帮助保护浏览器和用户免受常见的网络漏洞侵害。您可以直接在 Nginx 中添加它们。
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Content-Security-Policy "default-src 'self'";这些响应头有助于防御:
- 点击劫持
- 内容类型嗅探
- 跨站脚本(XSS)
- 数据泄露
它们为客户端提供了额外的一层保护。
日志记录
日志记录对于可视性和事件响应至关重要。
基本日志配置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;自定义日志格式
log_format security_log '$remote_addr - $request - $status - $http_user_agent';
access_log /var/log/nginx/security.log security_log;日志中的有用数据
- 客户端 IP
- 请求路径
- HTTP 状态码
- 用户代理
- 请求时间
日志常常揭示针对您的端点的自动化扫描和攻击尝试。
附加最佳实践
启用带 TLS 的 HTTPS
禁用不必要的 HTTP 方法
隐藏服务器版本信息
server_tokens off;限制管理员端点
使用上游健康检查
这些做法进一步加强了您的反向代理对攻击的防御。
结论
反向代理远不止是流量路由器——它可以在您的应用程序前充当强大的安全层。通过少量 Nginx 配置,您可以实现:
- 流量控制
- 安全头部
- 请求日志
- 基础攻击缓解
这些防护显著降低了您受到自动化攻击的风险。如果您想要即插即用的安全层,像 SafeLine WAF 这样的项目已经开箱即用地实现了许多这些防护。