Nginx反向代理教程:配置多个网站并一键开启HTTPS (Certbot)

更多云服务器知识,尽在

你的第一台服务器,可能正安稳地运行着你的个人博客,每天迎来送往,岁月静好。

但你的野心,或者说你的创造欲,显然不止于此。

你的脑子里,可能冒出了一个新点子,想用Node.js写一个轻巧的API服务;你的朋友,可能做了一个纯静态的作品集网站,想让你帮忙托管一下;你可能还想再部署一个论坛程序,和志同道合的朋友们交流......

这时,一个极其现实且尴尬的问题,像一堵墙一样,挡在了你的面前:一台服务器,通常只有一个公网IP地址,也就意味着,它只有一个对外开放的80端口(HTTP)和443端口(HTTPS)。

这就像一栋只有一个正门的宏伟写字楼,怎么可能同时开三家完全独立、互不干扰的公司?难道,每增加一个新网站,我就必须为此再买一台昂贵的服务器吗?

当然不!

今天,我们就要为这栋"写字楼",请来一位无所不能的"超级前台接待员 "。它的名字,就叫Nginx 。它能凭一己之力,让你的这栋"独栋大楼",升级成一个可以容纳无数家上市公司的"智能商业综合体 ",而且还能为每一位访客,都配上最高安全等级的"加密VIP通道"(SSL证书)。

"超级前台"的核心技能:反向代理

在开始配置之前,你必须先理解Nginx这位"超级前台"的核心工作原理------反向代理 (Reverse Proxy)

别被这个听起来很酷的名词吓到。它的工作模式,跟你公司前台一模一样。

想象一下,一个访客走进了你的"写字楼"(服务器IP),他要去哪家公司呢?

  1. 访客报上"家门": 访客(用户的浏览器)会对前台说:"你好,我要访问 blog.yourdomain.com"。
  2. 前台查阅"公司名录": Nginx这位前台,会立刻翻开它的"工作手册"(也就是我们接下来要写的配置文件),查找 blog.yourdomain.com 这家公司到底在哪个房间。
  3. 前台进行"内部引导": 它的手册上写着:"哦,blog.yourdomain.com 这家公司,在8080号房间(也就是你博客程序正在监听的8080端口)"。于是,Nginx就会在内部,悄无声息地把这位访客的所有请求,都转交给8080房间去处理。
  4. 前台代收"回信"并转交: 8080房间处理完请求后,把结果(网页内容)交给Nginx,Nginx再把这个结果,转交给门口的访客。

在整个过程中,访客从始至终都只和Nginx这位"前台"打交道,他根本不知道自己真正访问的服务,其实藏在后台的某个具体房间里。Nginx,完美地扮演了一个"中央交通枢纽 "和"安全屏障"的角色。

理解了这一点,接下来的所有配置,你都会觉得豁然开朗。

实战场景:在一台服务器上,部署你的"商业帝国"

我们来设定一个真实的场景。假设我们有一台服务器,IP地址是 123.45.67.89。我们准备在上面运行三个完全不同的网站:

  1. 个人博客 (https://www.google.com/url?sa=E\&source=gmail\&q=blog.yourdomain.com): 一个用WordPress搭建的动态博客,我们让它在服务器的8001端口上运行。
  2. API服务 (https://www.google.com/url?sa=E\&source=gmail\&q=api.yourdomain.com): 一个用Node.js写的API,它在服务器的3000端口上运行。
  3. 作品集网站 (www.yourdomain.com): 一个纯静态的HTML网站,文件放在服务器的/var/www/portfolio目录下。

我们的目标,就是让用户通过各自的域名,访问到对应的服务,并且全部实现HTTPS加密。

第一步:撰写"前台工作手册"------Nginx配置文件

首先,SSH登录到你的服务器。Nginx的网站配置文件,通常放在/etc/nginx/sites-available/目录下。一个最佳实践是,为你的每一个网站,都创建一个独立的配置文件。

1. 为"作品集网站"创建配置 (最简单的静态网站)

Bash

复制代码
sudo nano /etc/nginx/sites-available/portfolio

在打开的文件里,输入以下内容:

Nginx

复制代码
server {
    listen 80;
    server_name www.yourdomain.com yourdomain.com;

    root /var/www/portfolio;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
  • listen 80;:告诉前台,这份指南适用于所有从"80号大门"(HTTP)进来的访客。
  • server_name www.yourdomain.com; :这是最重要的!它告诉前台,只有当访客说"我是来找www.yourdomain.com"的时候,才翻开这一页指南。
  • root /var/www/portfolio; :告诉前台,这家公司的"办公室"(网站文件)在/var/www/portfolio这个房间。
  • index index.html;:指定了默认的"迎宾页面"。

2. 为"个人博客"创建配置 (反向代理)

Bash

复制代码
sudo nano /etc/nginx/sites-available/blog

输入以下内容:

Nginx

复制代码
server {
    listen 80;
    server_name blog.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8001;
        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;
    }
}
  • proxy_pass http://127.0.0.1:8001; :这就是"反向代理"的核心!它告诉前台:"把这位访客的所有请求,都转交给8001号房间(你的WordPress程序)处理。"
  • proxy_set_header ...:这几行至关重要!它相当于前台在转交请求时,附上了一张"访客信息卡",告诉后台的WordPress程序:"这位访客的真实IP是多少,他想访问的域名是什么......" 如果没有这几行,WordPress可能会"一脸懵逼",不知道该如何正确地响应。

3. 为"API服务"创建配置 (同样是反向代理)

Bash

复制代码
sudo nano /etc/nginx/sites-available/api

输入以下内容:

Nginx

复制代码
server {
    listen 80;
    server_name api.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        # ... 同样需要加上上面那几行 proxy_set_header
    }
}

4. 让"工作手册"生效

我们创建了三份独立的"指南",但Nginx现在还不知道它们的存在。我们需要把这些指南,从"草稿箱"(sites-available),"链接"一份到"正式执行文件夹"(sites-enabled)里。

Bash

复制代码
sudo ln -s /etc/nginx/sites-available/portfolio /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled/

然后,检查一下我们的配置文件有没有语法错误,并让Nginx重新加载新的工作手册:

Bash

复制代码
sudo nginx -t
sudo systemctl reload nginx

如果一切顺利,现在,你的三个网站,已经可以通过各自的域名,用HTTP的方式访问了!

第二步:请来"安保专家"------使用Certbot一键开启HTTPS

我们的"商业综合体"已经能正常接待访客了,但现在所有的通信都是"明文"的,这就像访客和前台之间在大庭广众之下"喊话",非常不安全。我们需要为每一条通道,都配上"加密VIP电梯"。

这个"安保专家",就是Let's Encrypt 提供的免费SSL证书,而我们的自动化安装工具,叫Certbot

1安装Certbot。 (以Ubuntu为例)

Bash

复制代码
sudo apt update
sudo apt install certbot python3-certbot-nginx

2施展魔法,一键全自动配置! 现在,屏住呼吸,输入下面这行神奇的命令:

Bash

sudo certbot --nginx

  1. Certbot会自动读取你刚才配置的所有网站,然后像一个聪明的向导一样,开始问你问题:
    • 它会列出你所有的域名(www.yourdomain.com, blog.yourdomain.com, api.yourdomain.com),问你:"你想为哪些域名开启HTTPS?" 你可以选择全部。
    • 它会帮你申请、下载、并配置好所有的SSL证书。
    • 它会自动修改你刚才写的那三个Nginx配置文件,为它们加上所有关于HTTPS的设置(比如监听443端口,指定证书路径等)。
    • 它还会贴心地问你,是否需要将所有HTTP的访问,都自动跳转到HTTPS。强烈建议选择"是"!

整个过程,你只需要做几次选择题,然后喝口水。几分钟后,Certbot会告诉你:"恭喜!你的所有网站,都已经成功部署了HTTPS!"

3. 见证成果 现在,你再回头去看看你刚才写的那些Nginx配置文件,比如/etc/nginx/sites-available/blog,你会发现它已经被Certbot"改造"得更强大了,多了很多listen 443 ssl;ssl_certificate之类的配置。

更重要的是,Certbot已经在你的服务器上,悄悄地设置好了一个"定时续期任务"。Let's Encrypt的证书有效期是90天,但你完全不用担心。Certbot这位"安保专家",会自动在证书过期前,为你免费续期。真正的一劳永逸!

你的"数字帝国",从此起航

现在,再看看你的服务器。

它不再是那个只能开一家小卖部的"单间"了。它已经升级成了一座繁华的、安保严密的、可以容纳多家上市公司的"智能商业综合体"。

而你,就是这座大厦的总设计师和金牌物业经理。你不再受限于"一个服务器只能跑一个网站"的魔咒,你可以随心所欲地在上面,部署你的下一个、下下一个伟大的创意。

你手中的Nginx,就是那位无所不能的"超级前台",为你精准、高效、安全地,调度着南来北往的每一个数据请求。

去吧,去为你这座大厦,引入你的下一家"明星企业"吧!

相关推荐
跟我聊天我会闯红灯1 小时前
如何开发一个运行在windows系统服务器上的服务
运维·服务器·windows
AI云原生2 小时前
2025最新国内服务器可用docker源仓库地址大全(2025年8月更新)
运维·服务器·docker·云原生·容器·kubernetes·serverless
火龙kess3 小时前
Centos-Stream 10 安装教程(2025版图文教程)
linux·运维·centos
2501_916013744 小时前
iOS混淆工具有哪些?跨平台 App 混淆与保护的实用方案
android·ios·小程序·https·uni-app·iphone·webview
2501_915909064 小时前
iOS 文件管理实战指南,用户文件、安全访问与开发调试方案
android·ios·小程序·https·uni-app·iphone·webview
涛思数据(TDengine)5 小时前
新客户 | TDengine 时序数据库是怎么在钢厂“撬动”PI 的?
大数据·运维·数据库·时序数据库·tdengine
程序员黄老师7 小时前
Linux tail 命令详解
linux·运维
我怎么又饿了呀7 小时前
Windows&Linux系统 安装 CUDA 和 cuDNN
linux·运维·windows
xybDIY8 小时前
智能云探索:基于Amazon Bedrock与MCP Server的AWS资源AI运维实践
运维·人工智能·aws