更多云服务器知识,尽在
你的第一台服务器,可能正安稳地运行着你的个人博客,每天迎来送往,岁月静好。
但你的野心,或者说你的创造欲,显然不止于此。
你的脑子里,可能冒出了一个新点子,想用Node.js写一个轻巧的API服务;你的朋友,可能做了一个纯静态的作品集网站,想让你帮忙托管一下;你可能还想再部署一个论坛程序,和志同道合的朋友们交流......
这时,一个极其现实且尴尬的问题,像一堵墙一样,挡在了你的面前:一台服务器,通常只有一个公网IP地址,也就意味着,它只有一个对外开放的80端口(HTTP)和443端口(HTTPS)。
这就像一栋只有一个正门的宏伟写字楼,怎么可能同时开三家完全独立、互不干扰的公司?难道,每增加一个新网站,我就必须为此再买一台昂贵的服务器吗?
当然不!
今天,我们就要为这栋"写字楼",请来一位无所不能的"超级前台接待员 "。它的名字,就叫Nginx 。它能凭一己之力,让你的这栋"独栋大楼",升级成一个可以容纳无数家上市公司的"智能商业综合体 ",而且还能为每一位访客,都配上最高安全等级的"加密VIP通道"(SSL证书)。
"超级前台"的核心技能:反向代理
在开始配置之前,你必须先理解Nginx这位"超级前台"的核心工作原理------反向代理 (Reverse Proxy)。
别被这个听起来很酷的名词吓到。它的工作模式,跟你公司前台一模一样。
想象一下,一个访客走进了你的"写字楼"(服务器IP),他要去哪家公司呢?
- 访客报上"家门": 访客(用户的浏览器)会对前台说:"你好,我要访问
blog.yourdomain.com
"。 - 前台查阅"公司名录": Nginx这位前台,会立刻翻开它的"工作手册"(也就是我们接下来要写的配置文件),查找
blog.yourdomain.com
这家公司到底在哪个房间。 - 前台进行"内部引导": 它的手册上写着:"哦,
blog.yourdomain.com
这家公司,在8080号房间(也就是你博客程序正在监听的8080端口)"。于是,Nginx就会在内部,悄无声息地把这位访客的所有请求,都转交给8080房间去处理。 - 前台代收"回信"并转交: 8080房间处理完请求后,把结果(网页内容)交给Nginx,Nginx再把这个结果,转交给门口的访客。
在整个过程中,访客从始至终都只和Nginx这位"前台"打交道,他根本不知道自己真正访问的服务,其实藏在后台的某个具体房间里。Nginx,完美地扮演了一个"中央交通枢纽 "和"安全屏障"的角色。
理解了这一点,接下来的所有配置,你都会觉得豁然开朗。
实战场景:在一台服务器上,部署你的"商业帝国"
我们来设定一个真实的场景。假设我们有一台服务器,IP地址是 123.45.67.89
。我们准备在上面运行三个完全不同的网站:
- 个人博客 (https://www.google.com/url?sa=E\&source=gmail\&q=blog.yourdomain.com): 一个用WordPress搭建的动态博客,我们让它在服务器的
8001
端口上运行。 - API服务 (https://www.google.com/url?sa=E\&source=gmail\&q=api.yourdomain.com): 一个用Node.js写的API,它在服务器的
3000
端口上运行。 - 作品集网站 (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
- 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,就是那位无所不能的"超级前台",为你精准、高效、安全地,调度着南来北往的每一个数据请求。
去吧,去为你这座大厦,引入你的下一家"明星企业"吧!