Linux服务器技术栈学习路径图:从安全入门到Nginx/Docker进阶

Linux服务器技术栈学习路径图:从安全入门到Nginx/Docker进阶

你是否感觉自己收藏夹里,已经躺着一大堆关于服务器的“武功秘籍”——安全设置一篇,Nginx配置一篇,Docker入门又一篇……但当真面对一台崭新的、空无一物的服务器时,你依然会感到一丝迷茫,不知道第一步该做什么,第二步该连向哪里?

这些零散的知识点,就像一颗颗强大的“龙珠”,只有将它们全部集齐,并用一条清晰的“主线任务”串联起来时,才能召唤出名为“高级技术栈”的神龙。

今天,我们就来走完这条主线任务。

我们将模拟一个最真实的场景:你刚刚购买了一台全新的云服务器,你的目标,是在上面同时运行两个应用,并且都要实现HTTPS加密访问:

  1. 一个是用yourdomain.com访问的官方网站(纯静态页面)。
  2. 另一个是用api.yourdomain.com访问的API服务(用Docker运行)。

这个任务,几乎涵盖了个人开发者和小型团队80%以上的日常需求。现在,让我们化身为“总工程师”,开始为我们的“数字帝国”奠基。

第一阶段:建造“堡垒”地基 —— 服务器的初始化安全加固

在我们思考如何“建大楼”之前,必须先确保我们的“地皮”是安全的。一台刚刚创建的服务器,就像一座对外不设防的“毛坯房”,我们必须先给它装上最坚固的“防盗门”和“监控系统”。

1. 告别“万能钥匙”,创建你的专属“将军” 永远不要直接使用root这个“国王”账户。我们要创建一个权限受控的“将军”账户来发号施令。

Bash

# 用root登录后,立刻创建新用户(这里以myadmin为例)
adduser myadmin
# 赋予他sudo(临时使用国王权力)的权限
usermod -aG sudo myadmin

现在,exit退出,立刻用你的新用户myadmin重新登录服务器。从今往后,忘了root吧。

2. 扔掉“密码锁”,换上“生物识别” 密码,总有被暴力破解的风险。我们要换上更安全的SSH密钥。

  • 在你自己的电脑上(不是服务器上!)打开终端,生成密钥对:

Bash

ssh-keygen -t rsa -b 4096

将你的“公钥”(锁芯)安装到服务器上:

Bash

ssh-copy-id myadmin@你的服务器IP

3. 彻底封死“后门” 现在,我们要编辑SSH的配置文件,让它只认密钥这把“唯一的钥匙”。

Bash

sudo nano /etc/ssh/sshd_config

在文件里,找到并修改这几项:

PasswordAuthentication no  # 禁止密码登录
PermitRootLogin no         # 禁止root用户通过SSH登录

4. 玩个“捉迷藏”,隐藏你的“大门” 继续在sshd_config文件里,把默认的SSH端口22,改成一个你自己记住的、大于1024的数字,比如23456

Port 23456

保存文件,然后重启SSH服务:sudo systemctl restart sshd

5. 部署“城墙守卫”,UFW防火墙 最后,我们开启防火墙,只允许我们需要的端口通行。

Bash

# 先把你刚才改的SSH新端口放行!这是救命的一步!
sudo ufw allow 23456/tcp
# 放行Web服务需要的HTTP和HTTPS端口
sudo ufw allow http
sudo ufw allow https
# 启动防火墙
sudo ufw enable

好了!经过这一番操作,你的服务器,已经从一个谁都能来踹门的“毛坯房”,变成了一座拥有隐藏入口、只认你这个主人、并且有警卫站岗的“坚固堡垒”。地基,已经打好。

第二阶段:聘请“超级前台” —— 配置Nginx反向代理

现在,我们的“堡垒”里,要同时开两家“公司”:官网(静态网站)和API服务。但我们的堡垒只有一个“正门”(80/443端口)。怎么办?

请出我们的“超级前台”Nginx!它能根据访客要找的“公司名称”(域名),把他们精准地引导到不同的“内部房间”(应用端口)。

1安装Nginx

Bash

sudo apt update
sudo apt install nginx

2为“官网”创建接待指南 假设你的官网文件放在/var/www/yourdomain

Bash

sudo nano /etc/nginx/sites-available/yourdomain

写入配置:

Nginx

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/yourdomain;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

3为“API服务”创建接待指南 我们的API服务,计划稍后用Docker,在服务器的3000端口上运行。

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 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 这行,就是魔法所在。它告诉Nginx:“所有找api.yourdomain.com的访客,都给我转交给本机3000端口的那个家伙去处理!”

4让指南生效

Bash

sudo ln -s /etc/nginx/sites-available/yourdomain /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/api /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

现在,Nginx这位“前台”,已经知道该如何接待访问这两个域名的客人了。

第三阶段:引入“集装箱”—— 用Docker运行API服务

为什么我们要用Docker来跑API服务?因为它可以把我们的应用,连同它的所有“生活用品”(依赖环境),都打包在一个标准化的“集装箱”里,干净、隔离、可移植。

1安装Docker (如果你的服务器不是买的Docker应用镜像)

Bash

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

2准备一个极简的API“货物” 我们创建一个目录,并在里面写一个简单的Node.js API。

Bash

mkdir my-api && cd my-api
nano index.js

写入内容:

JavaScript

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ message: 'Hello from my Dockerized API!' }));
});
server.listen(3000, '0.0.0.0', () => {
  console.log('Server running on port 3000');
});

3撰写“打包说明书”——Dockerfile

Bash

nano Dockerfile

写入内容:

Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY index.js .
EXPOSE 3000
CMD ["node", "index.js"]

这份说明书,告诉Docker如何一步步地,把我们的Node.js应用,打包成一个标准的“集装箱”。

Bash

# 打包(构建镜像) sudo docker build -t my-api-image . # 发货(运行容器) sudo docker run -d –name my-api-container -p 3000:3000 –restart always my-api-image

  1. --restart always 这个参数很重要,它保证了即使服务器重启,我们这个API“集装箱”也会自动运行。

现在,我们的API服务,已经在后台的3000端口上,稳定地运行起来了。而Nginx这位前台,正在忠实地,把所有访问api.yourdomain.com的请求,都转交给它。

第四阶段:全线“加密升级” —— 部署SSL证书

万事俱备,只差最后的“安全认证”。我们要为这两家“公司”,都挂上HTTPS的“金字招牌”。

1安装“认证专家”Certbot

Bash

sudo apt install certbot python3-certbot-nginx

2一键完成所有认证!

Bash

sudo certbot --nginx
  1. Certbot会自动识别出你配置的yourdomain.comapi.yourdomain.com两个域名,询问你要为哪些开启HTTPS。选择全部,然后同意将HTTP自动跳转到HTTPS。

几分钟后,魔法就会发生。Certbot会自动帮你搞定所有证书的申请、配置和安装。

现在,你再用https://yourdomain.comhttps://api.yourdomain.com访问试试看。看到了吗?那把绿色的小锁,已经在地址栏里,为你闪耀。

你,已是“总工程师”

好了,停下来,回顾一下你刚刚完成的这一切。

你从一台空空如也的服务器开始,亲手为它建立了坚不可摧的安全壁垒。然后,你像一位城市规划师,用Nginx设计了这座城市的交通枢纽,让不同的应用得以和谐共存。紧接着,你又引入了Docker这项现代化的工业技术,让你的应用部署,变得标准化和高效。最后,你用SSL,为整座城市,覆盖上了一层安全的能量护盾

你不再是那个只会用单个工具的“工匠”,你已经成了一个能规划并建造整个“数字城市”的“总工程师”。

这,就是你的技术栈。它不再是零散的、躺在你收藏夹里的知识点,而是一套你已经亲手验证过的、可以随时拿来,去解决真实世界问题的强大武器。

现在,去这片你亲手开垦的土地上,建造你的下一个伟大项目吧。

知识库

Linux性能分析教程:top, htop, iotop命令使用详解 (服务器慢/卡顿排查)

2025-8-13 11:17:45

知识库

服务器上线前检查清单:10个必做的安全与性能配置 (2025版)

2025-8-14 11:13:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧