构建安全 Nginx 反向代理的完整指南
对于管理高流量网站或复杂应用程序的企业和 IT 专业人员来说,创建安全、可靠且可扩展的反向代理至关重要。Nginx 是一款开源 Web 服务器和反向代理,它是一款强大的解决方案,可用于路由、优化和保护流向后端服务的流量。在本指南中,我们将逐步讲解如何在 Ubuntu 24.04 上使用 Nginx 搭建强大的反向代理,涵盖 TLS 加密、速率限制以及与 Cloudflare 集成等关键步骤。
如果您正在管理企业级网站、电子商务平台或媒体服务器,本指南将帮助您提高性能、确保正常运行时间并保护您的基础设施免受漏洞攻击。
什么是 Nginx 反向代理?
Nginx 反向代理充当客户端和后端服务之间的中介服务器。它将客户端请求转发到相应的后端服务器,从而优化负载分配、增强安全性,并启用缓存、SSL 终止和流量过滤等功能。此设置对于托管媒体服务器、多站点应用程序以及防火墙后的服务特别有用。
sbb-itb-59e1987
为什么需要反向代理
反向代理有几个主要优点:
- 增强安全性:隐藏后端服务器的 IP 并通过 TLS/SSL 启用加密。
- 负载均衡:在多个后端服务器之间均匀分配流量。
- 优化:减少延迟并提高资源效率。
- 可扩展性:使管理高流量场景变得更加容易。
- 易于管理:简化统一域后面的多个后端服务的配置。
在本教程中,我们将演示如何:
- 将 Nginx 设置为反向代理。
- 使用 Let's Encrypt TLS 证书保护您的设置。
- 配置高级优化,如速率限制和请求转发。
- 集成 Cloudflare 以绕过 ISP 端口限制。
步骤1:在Ubuntu 24.04上安装Nginx和Certbot
更新您的系统
在安装任何软件之前,请确保您的系统是最新的:
sudo apt 更新 && sudo apt 升级 安装 Nginx 和 Certbot
使用以下命令安装 Nginx 和带有 Nginx 插件的 Certbot:
sudo apt 安装 nginx -y sudo apt 安装 certbot python3-certbot-nginx -y 验证安装
确认 Nginx 正在运行:
sudo systemctl status nginx 要测试访问,请确定服务器的 IP 地址:
ip a 在浏览器中访问该 IP 地址。如果成功,您将看到默认的 Nginx 欢迎页面。
步骤2:配置防火墙规则
启用简单防火墙(UFW)
UFW 允许您轻松管理防火墙规则:
sudo ufw 允许“Nginx Full” sudo ufw 允许 OpenSSH sudo ufw 启用 检查防火墙的状态以确保正确的端口已打开:
sudo ufw 状态 步骤3:设置Nginx代理配置
创建自定义配置文件
为了获得更好的灵活性和安全性,请使用代码片段文件来存储特定配置。创建以下文件:
- 安全标头:
定义安全标头以增强保护:sudo nano /etc/nginx/snippets/security-headers.confadd_header X-Frame-Options“SAMEORIGIN”;add_header X-Content-Type-Options“nosniff”;add_header X-XSS-Protection“1;mode=block”; - 代理设置:
优化长流并防止响应缓慢:sudo nano /etc/nginx/snippets/proxy.confproxy_connect_timeout 60秒;proxy_send_timeout 60秒;proxy_read_timeout 60秒; - 速率限制:
减少过多的请求:sudo nano /etc/nginx/snippets/rate-limit.conflimit_req_zone $binary_remote_addr 区域=mylimit:10m 速率=10r/s;
在主配置中包含代码片段
编辑主要的 Nginx 配置:
须藤纳米 /etc/nginx/nginx.conf 在下方添加以下内容 http 堵塞:
包括/etc/nginx/snippets/*.conf; 重新启动 Nginx 以应用更改:
sudo systemctl 重新加载 nginx 步骤 4:为后端服务设置反向代理
创建虚拟主机
为您的后端服务创建配置文件:
sudo nano /etc/nginx/sites-available/jellyfin Jellyfin 媒体服务器的示例配置:
服务器 { 监听 80;服务器名称 jelly.yourdomain.com;位置 / { 代理密码 http://10.10.0.112:8096;包括 /etc/nginx/snippets/proxy.conf;} } 通过创建符号链接启用该站点:
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/ 测试并重新加载 Nginx:
sudo nginx -t sudo systemctl 重新加载 nginx 步骤 5:使用 Let's Encrypt TLS 保护您的域名
为了保护您的域名,请使用 Let's Encrypt 颁发免费证书:
sudo certbot --nginx -d jelly.yourdomain.com Certbot 会自动在您的 Nginx 站点文件中配置 SSL。为确保证书自动续订,请验证 systemd 计时器是否处于活动状态:
sudo systemctl 列表计时器 | grep certbot 步骤 6:集成 Cloudflare 以获得额外的安全性和 ISP 端口绕过
安装 Cloudflared
Cloudflared 创建了一个安全隧道来通过 Cloudflare 路由流量,从而绕过了 ISP 对端口 80 和 443 的限制:
- 下载
.deb来自 Cloudflare 的 GitHub 页面的包。 - 安装软件包:
sudo dpkg -i cloudflared-version.deb
配置隧道
使用您的 Cloudflare 帐户进行身份验证:
cloudflared 隧道登录 创建新隧道:
cloudflared 隧道创建我的隧道 编辑 Cloudflare 配置文件:
须藤纳米 /etc/cloudflared/config.yml 示例配置:
隧道:my-tunnel 凭证文件:/home/user/.cloudflared/my-tunnel.json 入口: - 主机名:jelly.yourdomain.com 服务:http://localhost:8096 - 服务:http_status:404 启动并启用隧道服务:
sudo systemctl 启用 cloudflared sudo systemctl 启动 cloudflared 关键要点
- Nginx 反向代理:对于安全地路由流量和优化后端服务至关重要。
- TLS 加密:使用 Let's Encrypt 的免费 SSL 证书保护您的域名。
- 防火墙规则:打开 HTTP(80)、HTTPS(443)和 SSH(22)必要的端口。
- 安全优化:实施标头和速率限制以防止攻击。
- Cloudflare 集成:使用 Cloudflared 隧道实现安全、ISP 友好的托管。
- 自动化:Systemd 计时器确保 SSL 证书自动更新。
结论
设置安全的 Nginx 反向代理需要关注细节并谨慎配置,但回报绝对值得。无论您是托管 Jellyfin 等媒体服务器,还是管理企业应用程序,本指南都能为您提供构建高度安全高效环境所需的工具和知识。借助 TLS、Cloudflare 隧道和高级优化等功能,您的基础架构已准备好满足现代需求。
来源:“别再暴露你的应用了!构建安全的 Nginx 反向代理!” – KeepItTechie,YouTube,2025 年 8 月 19 日 – https://www.youtube.com/watch?v=MzbhS2S7H_g
用途:嵌入以供参考。简短的引述可用于评论/评论。