Nginx反向代理实战:单服务器多域名HTTPS配置指南

1. 为什么你需要这个方案?从我的踩坑经历说起

几年前,我还在一个小团队里负责技术,当时我们同时上线了两个微信小程序。老板为了省钱,只给了一台云服务器,预算有限,不可能为每个小程序都单独配一台机器。微信小程序的后台又强制要求HTTPS,这就意味着必须用443端口。问题来了:一台服务器,一个443端口,怎么同时服务两个甚至更多的小程序后台呢?

最开始我试过一些“野路子”,比如让不同的小程序后台监听不同的端口,然后让用户访问时带上端口号,比如 https://api.a.com:8443。结果立刻被现实打脸——微信小程序网络请求的域名必须备案,且默认就是标准的443端口,这种带非标端口的地址根本过不了审核。也想过再申请几台服务器,但成本实在扛不住。那段时间真是焦头烂额,直到我把目光投向了Nginx反向代理。

简单来说,Nginx反向代理就像是一个超级智能的前台接待。所有外部请求(比如用户访问你的小程序后台)都先到达这个“前台”(Nginx,监听443端口)。这个前台看一眼访客要去的“房间号”(也就是请求的域名或路径),然后内部悄悄地把访客引导到对应的、真正处理业务的“办公室”(比如运行在8081、8082端口的SpringBoot应用)。对外,用户只看到一个气派的大门(统一的HTTPS入口);对内,多个业务井井有条,互不干扰。

这个方案完美解决了我们的痛点:单台服务器、一个443端口、多个域名、全HTTPS。成本极低,配置清晰,性能稳定。下面,我就把踩过坑、验证过的完整配置流程,掰开揉碎了分享给你,哪怕你之前没怎么接触过Nginx,跟着做也能搞定。

2. 动手之前:环境与证书准备

磨刀不误砍柴工,配置前确保你的“工具箱”是齐全的。这里我假设你有一台安装了Linux系统(如CentOS 7/8或Ubuntu 20.04)的云服务器,并且已经具备了基本的命令行操作能力。

2.1 安装Nginx

大多数Linux发行版都可以通过包管理器轻松安装。以CentOS为例,如果你还没安装,可以执行以下命令:

# 添加EPEL仓库(CentOS 7可能需要)
sudo yum install epel-release
# 安装Nginx
sudo yum install nginx
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

安装完成后,在浏览器输入你的服务器IP,如果看到“Welcome to nginx”的页面,说明安装成功。Ubuntu系统使用 apt-get install nginx 即可。

2.2 获取SSL证书(关键步骤)

HTTPS的核心是SSL/TLS证书。对于微信小程序,你必须使用受信任的证书颁发机构(CA)签发的证书,自签名证书是不行的。获取证书主要有两种途径:

  1. 云服务商免费证书:这是最推荐新手的方式。阿里云、腾讯云等厂商都为单个域名提供免费的DV SSL证书,申请流程完全可视化,审核快(一般几分钟到几小时)。在云控制台找到SSL证书服务,申请证书,然后按照指引完成域名验证(通常是DNS解析验证),验证通过后即可下载证书文件。
  2. Let‘s Encrypt免费证书:这是一个公益的证书颁发机构,提供完全免费的自动化证书。通过 certbot 工具可以自动获取和续期,功能强大,但对新手来说命令行操作可能稍显复杂。

无论哪种方式,最终你会得到两个关键文件(以常见的证书格式为例):

  • your_domain.pem (或 your_domain.crt):证书文件。里面包含证书链。
  • your_domain.key:私钥文件。这是最重要的文件,必须严格保密,不要泄露。

重要提示:你需要为每一个独立的域名都申请一张证书。比如你有 api.app1.comapi.app2.com 两个域名,就需要申请两张证书。下载后,建议在服务器上创建一个专门的目录来存放它们,例如 /etc/nginx/ssl/,并将证书文件上传至此。

sudo mkdir -p /etc/nginx/ssl/
# 上传你的 certificate.pem 和 private.key 文件到这个目录
# 记得修改文件权限,防止私钥被随意读取
sudo chmod 600 /etc/nginx/ssl/*.key

3. 核心实战:两种多域名HTTPS配置策略

准备工作就绪,现在进入最核心的配置环节。我将分享两种最常用、最实用的策略,你可以根据实际情况选择。

3.1 策略一:基于域名的反向代理(最清晰、最推荐)

这是最标准、最易于维护的方式。每个小程序后台使用独立的二级域名(如 api.app1.com, api.app2.com),Nginx通过识别 server_name(即域名)来决定将请求转发给后端的哪个服务。

配置逻辑</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值