部署 Nginx 反向代理并配置 SSL 加密
本教程将手把手带您在 Ubuntu 服务器上完成从安装 Nginx 到配置反向代理,再到使用 Let's Encrypt 免费配置 SSL 证书的全过程。
第一步:安装 Nginx
如果您的 Ubuntu 服务器上尚未安装 Nginx,我们可以通过 apt 包管理器轻松完成安装。打开您的终端,执行以下命令:
# 更新软件包列表
sudo apt update
# 安装 Nginx
sudo apt install nginx -y安装过程会自动启动 Nginx 服务。
第二步:验证 Nginx 安装与运行状态
安装完成后,我们需要确认 Nginx 是否已成功安装并正常运行。
首先,检查 Nginx 的版本信息:
nginx -v您应该会看到类似如下的输出,表明 Nginx 已成功安装:
nginx version: nginx/1.18.0 (Ubuntu)注意:版本号可能会因您使用的 Ubuntu 发行版和更新时间而异。
接着,使用 systemctl 命令检查 Nginx 服务的运行状态:
systemctl status nginx如果 Nginx 服务正在运行,您会看到状态显示为 active (running),并附有详细的进程信息,如下所示:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-11-20 22:31:30 CST; 1min 28s ago
Docs: man:nginx(8)
Process: 15970 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 15971 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 16161 (nginx)
Tasks: 3 (limit: 4678)
Memory: 4.8M
CPU: 38ms
CGroup: /system.slice/nginx.service
├─16161 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─16163 nginx: worker process
└─16164 nginx: worker process确认 Nginx 正常运行后,我们就可以开始配置反向代理了。
第三步:配置 Nginx 反向代理
Nginx 的配置遵循一种模块化的结构。主配置文件位于 /etc/nginx/nginx.conf,而各个站点的独立配置(我们称之为“服务器块”)则推荐存放在 /etc/nginx/sites-available/ 目录下。
- 创建新的配置文件
我们为反向代理创建一个新的配置文件。首先,进入配置目录:
cd /etc/nginx/sites-available/然后,使用您喜欢的文本编辑器(如 nano 或 vim)创建一个新文件,例如 reverse-proxy.conf:
sudo nano reverse-proxy.conf- 添加反向代理配置
在打开的文件中,粘贴以下配置内容。这是一个将所有发往 yourdomain.com 的 HTTP 请求(80 端口)代理到本地 3000 端口上运行的后端服务的示例。
server {
# 监听 80 端口,处理 HTTP 请求
listen 80;
# 替换为您的域名
server_name yourdomain.com;
# 定义根路径 (/) 的请求处理方式
location / {
# 将请求转发至后端服务地址
# 假设您的后端应用运行在 http://localhost:3000
proxy_pass http://localhost:3000;
# 设置请求头,将客户端的真实信息传递给后端
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;
}
}配置指令详解:
listen 80;: 监听服务器的 80 端口。server_name yourdomain.com;: 匹配请求的域名。请务必将其替换为您自己的域名。proxy_pass http://localhost:3000;: 核心指令,指定了请求被转发的目标地址。proxy_set_header ...: 这些指令用于修改转发到后端的 HTTP 请求头。这非常重要,因为它能让后端应用获取到原始客户端的 IP 地址、主机名和协议等信息,对于日志记录和应用逻辑至关重要。
第四步:启用配置并应用更改
创建好配置文件后,我们需要启用它。Nginx 通过在 /etc/nginx/sites-enabled/ 目录中创建配置文件的符号链接(Symbolic Link)来加载配置。
- 创建符号链接
sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/- 测试 Nginx 配置
在重启服务之前,务必检查配置文件是否存在语法错误,这是一个非常好的习惯:
sudo nginx -t如果配置正确,您将看到如下成功信息:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful- 重启 Nginx 服务
测试通过后,平滑地重启 Nginx 以应用所有更改:
sudo systemctl restart nginx现在,打开您的 Web 浏览器并访问 http://yourdomain.com。如果一切配置正确,您应该能看到由您在本地 3000 端口运行的后端应用所渲染的内容。
第五步:使用 Certbot 配置 SSL 加密
为了保障数据传输的安全,为您的网站启用 HTTPS 是必不可少的。我们将使用 Let's Encrypt 提供的免费 SSL 证书,并通过 Certbot 工具来自动化申请和配置过程。
- 安装 Certbot
Certbot 及其 Nginx 插件可以通过 apt 进行安装:
sudo apt install certbot python3-certbot-nginx -y- 获取并安装 SSL 证书
运行 Certbot,它会自动检测您 Nginx 配置中的 server_name,并为之申请证书。请将 yourdomain.com 替换为您的真实域名。
sudo certbot --nginx -d yourdomain.com在执行过程中,Certbot 会引导您完成以下步骤:
- 输入您的电子邮件地址(用于接收续订提醒和安全通知)。
- 同意 Let's Encrypt 的服务条款。
- 选择是否将所有 HTTP 流量自动重定向到 HTTPS(推荐选择此项)。
完成后,Certbot 会自动修改您的 Nginx 配置文件(/etc/nginx/sites-available/reverse-proxy.conf),添加 SSL 相关的设置,并重新加载 Nginx 服务使之生效。
使用 --expand 标志,并列出所有域名:
sudo certbot --nginx --expand -d x.588235.xyz -d heiyu.appCertbot 会自动更新证书,包含这两个域名,并调整 Nginx 配置。
- 验证 SSL 配置
最后,再次访问您的网站,但这次使用 https:// 协议:https://yourdomain.com。您的浏览器地址栏应该会显示一个安全锁标志,表明您的网站已成功启用 SSL 加密。
总结
恭喜您!您已经成功地在 Ubuntu 服务器上部署了 Nginx 作为反向代理,并使用 Let's Encrypt 的免费证书为其配置了 HTTPS 加密。这套架构不仅提升了您应用的安全性,也为未来进行服务扩展和负载均衡打下了坚实的基础。
