联系我们

info@serverion.com

给我们打电话

+1 (302) 380 3902

构建安全 Nginx 反向代理的完整指南

构建安全 Nginx 反向代理的完整指南

对于管理高流量网站或复杂应用程序的企业和 IT 专业人员来说,创建安全、可靠且可扩展的反向代理至关重要。Nginx 是一款开源 Web 服务器和反向代理,它是一款强大的解决方案,可用于路由、优化和保护流向后端服务的流量。在本指南中,我们将逐步讲解如何在 Ubuntu 24.04 上使用 Nginx 搭建强大的反向代理,涵盖 TLS 加密、速率限制以及与 Cloudflare 集成等关键步骤。

如果您正在管理企业级网站、电子商务平台或媒体服务器,本指南将帮助您提高性能、确保正常运行时间并保护您的基础设施免受漏洞攻击。

什么是 Nginx 反向代理?

Nginx 反向代理充当客户端和后端服务之间的中介服务器。它将客户端请求转发到相应的后端服务器,从而优化负载分配、增强安全性,并启用缓存、SSL 终止和流量过滤等功能。此设置对于托管媒体服务器、多站点应用程序以及防火墙后的服务特别有用。

为什么需要反向代理

反向代理有几个主要优点:

  • 增强安全性:隐藏后端服务器的 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代理配置

创建自定义配置文件

为了获得更好的灵活性和安全性,请使用代码片段文件来存储特定配置。创建以下文件:

  1. 安全标头:
    sudo nano /etc/nginx/snippets/security-headers.conf 
    定义安全标头以增强保护:
    add_header X-Frame-Options“SAMEORIGIN”;add_header X-Content-Type-Options“nosniff”;add_header X-XSS-Protection“1;mode=block”; 
  2. 代理设置:
    sudo nano /etc/nginx/snippets/proxy.conf 
    优化长流并防止响应缓慢:
    proxy_connect_timeout 60秒;proxy_send_timeout 60秒;proxy_read_timeout 60秒; 
  3. 速率限制:
    sudo nano /etc/nginx/snippets/rate-limit.conf 
    减少过多的请求:
    limit_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 的限制:

  1. 下载 .deb 来自 Cloudflare 的 GitHub 页面的包。
  2. 安装软件包:
    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

用途:嵌入以供参考。简短的引述可用于评论/评论。

相关博客文章

zh_CN