Linux 服务器全攻略:从基础到实战的技术指南
在当今云计算与企业 IT 架构中,Linux 服务器凭借其开源、稳定、安全和高性能的特性,占据了绝对主导地位。无论是中小型企业的业务服务器、大型互联网公司的分布式集群,还是云端的容器与虚拟机,Linux 都是首选操作系统。本文将从基础概念出发,深入讲解 Linux 服务器的核心技术、最佳实践、常见工具及实战案例,帮助读者从零开始掌握 Linux 服务器的搭建、管理与优化。
目录#
- Linux 服务器基础
- 1.1 什么是 Linux 服务器?
- 1.2 主流 Linux 服务器发行版及选型
- 1.3 Linux 服务器与桌面版的区别
- Linux 服务器安装与初始化配置
- 2.1 系统安装流程(以 Ubuntu Server 为例)
- 2.2 初始化配置:更新系统与基础工具
- 2.3 网络配置:静态 IP 与 DNS
- 2.4 用户与权限管理:禁用 root 直接登录
- Linux 服务器核心组件解析
- 3.1 包管理系统:APT/DNF/YUM 实战
- 3.2 服务管理:Systemd 与服务生命周期
- 3.3 文件系统结构:服务器场景下的重点目录
- 网络配置与安全加固
- 4.1 网络基础:IP、子网与路由
- 4.2 防火墙配置:UFW 与 iptables
- 4.3 SSH 安全加固:从密码登录到密钥认证
- 4.4 安全审计:Fail2ban 与 auditd
- 服务器日常管理与监控
- 5.1 远程管理:SSH 进阶与 Mosh
- 5.2 系统监控:从 top 到 Prometheus
- 5.3 日志管理:Journalctl 与 Logrotate
- 5.4 备份策略:Rsync 与增量备份实战
- 常见服务器应用部署
- 6.1 Web 服务器:Nginx 与 Apache 配置
- 6.2 数据库服务器:MySQL/PostgreSQL 安装与优化
- 6.3 容器化部署:Docker 基础与实践
- 性能优化与调优
- 7.1 资源监控:识别性能瓶颈
- 7.2 内核参数调优:sysctl 配置
- 7.3 磁盘与文件系统优化
- 故障排查实战
- 8.1 服务启动失败:日志与状态诊断
- 8.2 网络故障:从 Ping 到 Traceroute
- 8.3 磁盘满了?CPU 跑满?内存泄漏?
- 总结
- 参考资料
1. Linux 服务器基础#
1.1 什么是 Linux 服务器?#
Linux 服务器是运行 Linux 操作系统、提供特定网络服务(如 Web、数据库、存储、计算)的计算机或虚拟机。与桌面版 Linux 相比,服务器版通常无图形界面(最小化安装),并针对稳定性、安全性和性能进行了优化,支持多用户并发访问和长时间不间断运行(目标是“7x24 小时无故障”)。
1.2 主流 Linux 服务器发行版及选型#
选择合适的发行版是服务器部署的第一步,以下是企业中最常用的几个版本:
| 发行版 | 特点 | 适用场景 | 包管理器 |
|---|---|---|---|
| Ubuntu Server | 易用性强、社区活跃、更新快 | 中小型企业、开发测试环境 | APT |
| CentOS Stream | RHEL 上游版本、稳定、企业级支持 | 生产环境、需要长期支持的业务 | DNF |
| Debian | 极致稳定、软件包保守 | 对稳定性要求极高的场景(如数据库) | APT |
| Red Hat Enterprise Linux (RHEL) | 商业支持、认证丰富、适合企业级 | 金融、政府等对合规性要求高的场景 | DNF |
| SUSE Linux Enterprise Server (SLES) | 欧洲市场流行、系统管理工具完善 | 企业级虚拟化、SAP 环境 | Zypper |
选型建议:
- 新手入门:优先选择 Ubuntu Server(文档丰富、社区支持好)。
- 生产环境稳定性优先:Debian 或 CentOS Stream(注意 CentOS Linux 已停止维护,推荐 Stream 或迁移至 Rocky Linux)。
- 商业支持需求:RHEL 或 SLES(需付费订阅)。
1.3 Linux 服务器与桌面版的区别#
| 维度 | Linux 服务器版 | Linux 桌面版 |
|---|---|---|
| 界面 | 默认无 GUI(可手动安装,但不推荐) | 预装 GUI(如 GNOME、KDE) |
| 服务与进程 | 预装服务器服务(如 SSH、NFS) | 预装桌面应用(如浏览器、办公软件) |
| 资源占用 | 最小化设计,内存/CPU 占用低 | 为 GUI 分配更多资源 |
| 内核优化 | 针对高并发、长时间运行优化 | 针对桌面交互体验优化 |
| 生命周期 | 长期支持(LTS 版本通常 5-10 年) | 短期更新(如 Ubuntu 桌面版 9 个月) |
2. Linux 服务器安装与初始化配置#
2.1 系统安装流程(以 Ubuntu Server 22.04 LTS 为例)#
Ubuntu Server 是新手友好的选择,以下是简化安装步骤:
- 下载 ISO:从 Ubuntu 官网 获取 22.04 LTS ISO。
- 制作启动盘:使用
dd命令(Linux/macOS)或 Rufus(Windows)将 ISO 写入 U 盘:dd if=ubuntu-22.04-live-server-amd64.iso of=/dev/sdb bs=4M status=progress # 注意:/dev/sdb 为 U 盘设备名,需替换 - 启动安装:服务器从 U 盘启动,选择 "Install Ubuntu Server"。
- 基础配置:
- 语言、键盘布局(默认英文即可,避免中文乱码)。
- 网络配置:推荐设置静态 IP(生产环境服务器需固定 IP)。
- 磁盘分区:简单场景可选择 "Use an entire disk"(自动分区);复杂场景需手动配置 LVM 或 RAID。
- 用户设置:创建管理员用户(如
admin),并勾选 "Install OpenSSH server"(必选,用于远程管理)。
- 完成安装:等待安装结束,重启服务器,移除 U 盘。
2.2 初始化配置:更新系统与基础工具#
服务器首次启动后,需执行以下操作:
1. 更新系统#
sudo apt update # 更新软件包索引
sudo apt upgrade -y # 更新已安装软件包(-y 自动确认)
sudo apt dist-upgrade -y # 处理依赖变更(如内核升级)
sudo reboot # 若内核更新,需重启2. 安装基础工具#
sudo apt install -y vim htop net-tools curl wget # 常用工具:编辑器、进程监控、网络工具等2.3 网络配置:静态 IP 与 DNS#
服务器需固定 IP 以保证服务可访问,以 Ubuntu Server 22.04 为例(使用 netplan 管理网络):
1. 查看网络接口#
ip addr # 找到网卡名称,如 eth0 或 ens332. 编辑 netplan 配置文件#
配置文件路径通常为 /etc/netplan/*.yaml(如 /etc/netplan/00-installer-config.yaml):
network:
version: 2
renderer: networkd # 使用 systemd-networkd 管理网络
ethernets:
eth0: # 替换为实际网卡名称
dhcp4: no # 禁用 DHCP
addresses: [192.168.1.100/24] # 静态 IP 及子网掩码(/24 即 255.255.255.0)
gateway4: 192.168.1.1 # 网关 IP
nameservers:
addresses: [8.8.8.8, 114.114.114.114] # DNS 服务器(谷歌 DNS + 国内 DNS)3. 应用配置#
sudo netplan apply # 应用配置
ip addr show eth0 # 验证 IP 是否生效2.4 用户与权限管理:禁用 root 直接登录#
默认情况下,Linux 服务器的 root 用户权限过高,直接登录存在安全风险。最佳实践是:创建普通管理员用户,通过 sudo 提权,禁用 root SSH 登录。
1. 创建管理员用户(若安装时未创建)#
sudo adduser admin # 创建用户 admin
sudo usermod -aG sudo admin # 将 admin 添加到 sudo 组(获得管理员权限)2. 禁用 root SSH 登录#
编辑 SSH 配置文件 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config修改以下参数:
PermitRootLogin no # 禁用 root 直接登录
PasswordAuthentication yes # 暂时允许密码登录(后续将改为密钥登录)重启 SSH 服务使配置生效:
sudo systemctl restart sshd3. Linux 服务器核心组件解析#
3.1 包管理系统:APT/DNF/YUM 实战#
包管理系统是 Linux 服务器的“应用商店”,用于安装、更新、卸载软件。不同发行版使用不同工具:
Ubuntu/Debian:APT(Advanced Package Tool)#
-
常用命令:
sudo apt update # 更新软件包索引 sudo apt install <package> # 安装软件(如 sudo apt install nginx) sudo apt remove <package> # 卸载软件(保留配置) sudo apt purge <package> # 彻底卸载(删除配置) sudo apt upgrade # 更新已安装软件 sudo apt autoremove # 自动删除无用依赖 -
搜索软件:
apt search nginx # 搜索 nginx 相关包
CentOS/RHEL:DNF(Dandified YUM,YUM 的继任者)#
- 常用命令:
sudo dnf check-update # 检查可更新包 sudo dnf install <package> # 安装软件 sudo dnf remove <package> # 卸载软件 sudo dnf update # 更新所有软件 sudo dnf repolist # 查看已启用的软件源
3.2 服务管理:Systemd 与服务生命周期#
Systemd 是目前主流 Linux 发行版的 init 系统(进程管理器),用于启动、停止、管理系统服务(如 Nginx、MySQL)。
核心概念:Unit 文件#
服务的配置文件称为 Unit 文件,存放于 /etc/systemd/system/(自定义服务)或 /usr/lib/systemd/system/(系统默认服务)。例如,Nginx 的 Unit 文件路径为 /usr/lib/systemd/system/nginx.service。
常用 systemctl 命令#
| 命令 | 作用 |
|---|---|
systemctl start <service> | 启动服务(如 systemctl start nginx) |
systemctl stop <service> | 停止服务 |
systemctl restart <service> | 重启服务(配置变更后需执行) |
systemctl enable <service> | 设置开机自启 |
systemctl disable <service> | 禁用开机自启 |
systemctl status <service> | 查看服务状态(重点关注 Active: active (running)) |
systemctl daemon-reload | 重新加载 Unit 文件(修改配置后执行) |
示例:启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx # 验证状态3.3 文件系统结构:服务器场景下的重点目录#
Linux 文件系统采用树形结构,以下是服务器管理中需重点关注的目录:
| 目录路径 | 作用描述 | 服务器场景重点关注 |
|---|---|---|
/etc | 系统配置文件目录 | sshd_config(SSH 配置)、nginx/(Nginx 配置) |
/var | 可变数据目录(日志、缓存、数据库) | /var/log/(日志文件)、/var/www/(Web 根目录)、/var/lib/mysql/(MySQL 数据) |
/usr | 系统软件安装目录 | /usr/bin/(可执行程序)、/usr/share/(共享数据) |
/home | 用户家目录 | 普通用户数据,避免存放服务数据(权限问题) |
/tmp | 临时文件目录 | 空间清理(系统会自动删除过期文件) |
/mnt//media | 挂载外部存储(如硬盘、NFS 共享) | 手动挂载临时存储 |
最佳实践:服务数据(如日志、数据库)优先存放在 /var 下,避免占用根分区空间。
4. 网络配置与安全加固#
4.1 网络基础:IP、子网与路由#
服务器网络通信依赖 IP 地址、子网掩码和路由:
- IP 地址:服务器在网络中的唯一标识(如
192.168.1.100)。 - 子网掩码:划分网络与主机部分(如
/24表示前 24 位为网络位,后 8 位为主机位)。 - 网关:连接不同网络的设备(通常是路由器 IP),服务器通过网关访问外部网络。
- 路由:数据从源 IP 到目标 IP 的路径,可通过
ip route查看路由表:ip route # 输出示例:default via 192.168.1.1 dev eth0 (默认路由通过 eth0 网卡走网关 192.168.1.1)
4.2 防火墙配置:UFW 与 iptables#
防火墙是服务器安全的第一道防线,用于控制进出网络的流量。Linux 中常用工具包括 UFW(简单) 和 iptables(高级)。
UFW(Uncomplicated Firewall):新手友好#
UFW 是 iptables 的前端工具,简化了防火墙规则配置,默认安装在 Ubuntu 中。
-
启用 UFW:
sudo ufw enable # 启用防火墙(开机自启) sudo ufw default deny incoming # 默认拒绝所有入站流量 sudo ufw default allow outgoing # 默认允许所有出站流量 -
开放常用端口:
sudo ufw allow 22/tcp # 允许 SSH(22 端口,TCP 协议) sudo ufw allow 80/tcp # 允许 HTTP(80 端口) sudo ufw allow 443/tcp # 允许 HTTPS(443 端口) sudo ufw allow from 192.168.1.0/24 to any port 3306/tcp # 仅允许 192.168.1.0 网段访问 MySQL(3306 端口) -
查看规则与状态:
sudo ufw status numbered # 查看已配置规则(带编号,方便删除) sudo ufw delete 1 # 删除编号为 1 的规则
iptables:高级防火墙(适用于复杂场景)#
iptables 功能更强大,但语法较复杂。例如,允许 SSH 入站流量:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 追加规则:允许 TCP 22 端口入站
sudo iptables -A INPUT -j DROP # 默认拒绝所有入站流量(注意:此规则需放在最后)注意:iptables 规则默认保存在内存中,重启后丢失。需通过 iptables-save 保存(Ubuntu 需安装 iptables-persistent):
sudo apt install iptables-persistent
sudo netfilter-persistent save # 保存规则(重启后自动加载)4.3 SSH 安全加固:从密码登录到密钥认证#
SSH 是远程管理服务器的主要方式,其安全性至关重要。默认的密码登录存在被暴力破解的风险,推荐使用 密钥认证 并禁用密码登录。
步骤 1:生成 SSH 密钥对(客户端操作)#
在本地电脑(如 Windows/macOS/Linux)生成密钥对:
ssh-keygen -t ed25519 # 生成 ed25519 类型密钥(比 RSA 更安全)
# 按提示输入密钥保存路径(默认 ~/.ssh/id_ed25519),建议设置密码(密钥密码,增强安全性)生成后,公钥路径为 ~/.ssh/id_ed25519.pub,私钥路径为 ~/.ssh/id_ed25519(私钥需妥善保管,不可泄露)。
步骤 2:将公钥上传至服务器#
使用 ssh-copy-id 工具(Windows 需安装 Git Bash 或 WSL):
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected] # admin 为服务器用户名,192.168.1.100 为服务器 IP手动上传(若 ssh-copy-id 不可用):
将公钥内容复制到服务器的 ~/.ssh/authorized_keys 文件中:
# 本地查看公钥内容
cat ~/.ssh/id_ed25519.pub
# 服务器端操作:创建 .ssh 目录并设置权限
mkdir -p ~/.ssh && chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys # 粘贴公钥内容,保存退出
chmod 600 ~/.ssh/authorized_keys # 必须设置为 600(仅所有者可读写)步骤 3:禁用 SSH 密码登录#
编辑服务器的 /etc/ssh/sshd_config:
sudo vim /etc/ssh/sshd_config修改以下参数:
PasswordAuthentication no # 禁用密码登录
ChallengeResponseAuthentication no # 禁用挑战响应认证
PermitEmptyPasswords no # 禁止空密码登录重启 SSH 服务:
sudo systemctl restart sshd验证:断开当前连接,重新使用 ssh [email protected] 登录,若无需输入密码(或仅需输入密钥密码),则配置成功。
4.4 安全审计:Fail2ban 与 auditd#
Fail2ban:防御 SSH 暴力破解#
Fail2ban 可监控日志(如 /var/log/auth.log),当检测到多次失败的 SSH 登录尝试时,自动通过防火墙封禁攻击者 IP。
-
安装:
sudo apt install fail2ban # Ubuntu/Debian sudo dnf install fail2ban # CentOS/RHEL -
配置:
复制默认配置文件并修改(避免直接修改/etc/fail2ban/jail.conf,防止更新覆盖):sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo vim /etc/fail2ban/jail.local重点配置 SSH 防护(
[sshd]段落):[sshd] enabled = true # 启用 SSH 防护 port = ssh # 端口(默认 22,若修改了 SSH 端口需同步修改) filter = sshd # 使用内置的 sshd 日志过滤规则 logpath = /var/log/auth.log # SSH 日志路径(Ubuntu 路径) maxretry = 5 # 最大失败尝试次数 bantime = 3600 # 封禁时间(秒,3600=1 小时) findtime = 600 # 检测窗口(秒,600=10 分钟内失败 5 次则封禁) -
启动与验证:
sudo systemctl enable --now fail2ban # 启动并设置开机自启 sudo fail2ban-client status sshd # 查看 SSH 防护状态(包括已封禁 IP)
auditd:系统审计工具#
auditd 用于监控系统调用、文件访问、权限变更等操作,生成审计日志,帮助追踪安全事件。
-
安装与启动:
sudo apt install auditd # Ubuntu/Debian sudo systemctl enable --now auditd -
添加审计规则:
例如,监控/etc/passwd(用户信息文件)的修改:sudo auditctl -w /etc/passwd -p w -k passwd-change # -w 监控路径,-p w 监控写入操作,-k 自定义标签 -
查看审计日志:
sudo ausearch -k passwd-change # 搜索标签为 passwd-change 的日志
5. 服务器日常管理与监控#
5.1 远程管理:SSH 进阶与 Mosh#
SSH 进阶:配置别名与端口转发#
-
配置 SSH 别名:
编辑本地~/.ssh/config文件,添加服务器别名,避免每次输入 IP 和用户名:Host myserver # 别名 HostName 192.168.1.100 # 服务器 IP User admin # 登录用户 IdentityFile ~/.ssh/id_ed25519 # 私钥路径 Port 22 # SSH 端口(若修改过需同步)之后可直接通过
ssh myserver登录。 -
端口转发(跳板机场景):
通过跳板机访问内网服务器:ssh -L 8080:internal-server:80 myserver # 将本地 8080 端口转发到内网服务器的 80 端口
Mosh:替代 SSH 的移动网络优化工具#
SSH 在网络不稳定(如移动网络)时容易断开连接,Mosh(Mobile Shell)可解决此问题,支持漫游和断续连接。
-
安装:
# 服务器端 sudo apt install mosh # 客户端(以 macOS 为例,Windows 需通过 WSL 或 Mosh 客户端) brew install mosh # macOS -
使用:
mosh [email protected] # 用法与 SSH 类似,需开放 UDP 60000-61000 端口(防火墙配置)
5.2 系统监控:从 top 到 Prometheus#
命令行监控工具#
- htop:
top的增强版,支持鼠标操作、进程排序、资源占用可视化(需安装:sudo apt install htop)。 - vmstat:监控系统内存、进程、IO 状态:
vmstat 2 5 # 每 2 秒输出一次,共 5 次 - iostat:监控磁盘 IO 性能(需安装
sysstat):sudo apt install sysstat iostat -x 1 # 每秒输出一次磁盘详细 IO 统计
企业级监控:Prometheus + Grafana#
对于多服务器或复杂场景,推荐使用 Prometheus(指标收集)+ Grafana(可视化)搭建监控平台。
-
核心组件:
- Prometheus:定时拉取目标服务器的指标数据(通过 Exporter)。
- Node Exporter:部署在服务器上,暴露硬件和系统指标(CPU、内存、磁盘等)。
- Grafana:对接 Prometheus,绘制监控面板。
-
快速部署(Docker 方式):
# 启动 Node Exporter(服务器端) docker run -d --name node-exporter -p 9100:9100 -v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/rootfs:ro --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($$|/)" # 启动 Prometheus(监控服务器) docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus # 启动 Grafana docker run -d --name grafana -p 3000:3000 grafana/grafana -
配置 Prometheus 拉取 Node Exporter 数据:
在prometheus.yml中添加:scrape_configs: - job_name: 'node' static_configs: - targets: ['192.168.1.100:9100'] # Node Exporter 地址 -
Grafana 可视化:
访问http://grafana-ip:3000,添加 Prometheus 数据源,导入 Node Exporter 官方面板(ID:8919),即可查看服务器资源监控图表。
5.3 日志管理:Journalctl 与 Logrotate#
Journalctl:Systemd 日志管理工具#
Systemd 统一管理系统日志,存储在二进制日志文件中(/var/log/journal/),通过 journalctl 命令查看。
-
常用命令:
journalctl # 查看所有日志(按时间倒序) journalctl -u nginx # 查看 Nginx 服务日志 journalctl --since "1 hour ago" # 查看 1 小时内的日志 journalctl -f # 实时跟踪日志(类似 tail -f) journalctl -xe # 查看最近错误日志(带详细信息) -
日志持久化:
默认情况下,journal 日志可能受大小限制,修改/etc/systemd/journald.conf开启持久化:Storage=persistent # 持久化存储到 /var/log/journal/ SystemMaxUse=5G # 最大占用空间
Logrotate:日志轮转工具#
日志文件会不断增长,占用磁盘空间,Logrotate 可自动切割、压缩、删除旧日志。
-
配置文件路径:
- 全局配置:
/etc/logrotate.conf - 应用配置:
/etc/logrotate.d/(如/etc/logrotate.d/nginx)
- 全局配置:
-
示例:Nginx 日志轮转配置(
/etc/logrotate.d/nginx):/var/log/nginx/*.log { daily # 每天轮转一次 missingok # 日志文件不存在时忽略 rotate 14 # 保留 14 天的日志 compress # 压缩旧日志(.gz) delaycompress # 延迟压缩(下次轮转时压缩前一次的日志) notifempty # 日志为空时不轮转 create 0640 www-data adm # 新建日志文件的权限和所有者 sharedscripts # 所有日志文件轮转后执行一次脚本 postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` # 向 Nginx 发送信号,重新打开日志文件 fi endscript }
5.4 备份策略:Rsync 与增量备份实战#
数据备份是服务器管理的核心任务,避免数据丢失。推荐 3-2-1 备份策略:3 份数据副本、2 种存储介质、1 份异地备份。
Rsync:文件同步工具#
Rsync 支持增量备份(仅传输变化的文件),效率高,适合本地或远程备份。
-
本地备份示例:
将/var/www(Web 目录)备份到/backup/www:rsync -av --delete /var/www/ /backup/www/ # -a 归档模式(保留权限),-v 详细输出,--delete 删除目标端不存在的文件 -
远程备份示例(通过 SSH):
将本地/data备份到远程服务器backup-server的/backup/data:rsync -av -e ssh /data/ admin@backup-server:/backup/data/ -
定时备份:
通过crontab设置定时任务(每天凌晨 3 点执行):crontab -e # 编辑当前用户的定时任务 # 添加以下行 0 3 * * * rsync -av --delete /var/www/ /backup/www/ >> /var/log/rsync-backup.log 2>&1
增量备份与全量备份结合#
- 全量备份:每周日执行一次,生成完整备份包。
- 增量备份:周一至周六执行,仅备份与上次全量/增量备份相比变化的文件。
示例脚本(全量 + 增量备份):
#!/bin/bash
BACKUP_DIR="/backup"
SRC_DIR="/var/www"
DATE=$(date +%Y%m%d)
FULL_BACKUP_DAY="0" # 周日(0 代表周日,1-6 代表周一至周六)
if [ $(date +%w) -eq $FULL_BACKUP_DAY ]; then
# 全量备份
tar -zcvf $BACKUP_DIR/full_$DATE.tar.gz $SRC_DIR
else
# 增量备份(基于上次全量备份)
LAST_FULL=$(ls -t $BACKUP_DIR/full_*.tar.gz | head -1)
tar -zcvf $BACKUP_DIR/incremental_$DATE.tar.gz --newer-mtime=$(date -r $LAST_FULL +%Y%m%d) $SRC_DIR
fi6. 常见服务器应用部署#
6.1 Web 服务器:Nginx 与 Apache 配置#
Web 服务器是最常用的服务器应用,用于托管网站和 API。
Nginx:轻量、高性能的 Web 服务器#
-
安装:
sudo apt install nginx sudo systemctl enable --now nginx -
基础配置(静态网站):
Nginx 配置文件路径:/etc/nginx/nginx.conf(主配置)、/etc/nginx/sites-available/(站点配置)。
创建站点配置/etc/nginx/sites-available/mywebsite:server { listen 80; server_name example.com www.example.com; # 域名 root /var/www/mywebsite; # 网站根目录 index index.html index.htm; # 默认首页 location / { try_files $uri $uri/ =404; # 尝试访问文件,不存在则返回 404 } } -
启用站点:
sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/ # 创建软链接到 sites-enabled sudo nginx -t # 测试配置是否有误 sudo systemctl restart nginx -
验证:
访问服务器 IP 或域名,应能看到/var/www/mywebsite/index.html的内容。
Apache:老牌、功能丰富的 Web 服务器#
-
安装:
sudo apt install apache2 sudo systemctl enable --now apache2 -
基础配置:
Apache 配置文件路径:/etc/apache2/apache2.conf(主配置)、/etc/apache2/sites-available/(站点配置)。
创建站点配置/etc/apache2/sites-available/mywebsite.conf:<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/mywebsite <Directory /var/www/mywebsite> AllowOverride All Require all granted </Directory> </VirtualHost> -
启用站点与模块:
sudo a2ensite mywebsite.conf # 启用站点 sudo a2enmod rewrite # 启用 rewrite 模块(URL 重写) sudo apache2ctl configtest # 测试配置 sudo systemctl restart apache2
6.2 数据库服务器:MySQL/PostgreSQL 安装与优化#
MySQL 8.0 安装与安全配置#
-
安装:
sudo apt install mysql-server # Ubuntu sudo systemctl enable --now mysql -
安全初始化(必须执行):
sudo mysql_secure_installation按提示设置 root 密码、删除匿名用户、禁用 root 远程登录、删除测试数据库。
-
创建数据库与用户:
# 登录 MySQL sudo mysql -u root -p # 创建数据库 CREATE DATABASE mydb; # 创建用户并授权(允许本地访问) CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON mydb.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES; -
远程访问配置(如需):
编辑/etc/mysql/mysql.conf.d/mysqld.cnf,注释bind-address = 127.0.0.1,然后授权远程用户:CREATE USER 'dbuser'@'%' IDENTIFIED BY 'StrongPassword123!'; # % 表示所有 IP GRANT ALL PRIVILEGES ON mydb.* TO 'dbuser'@'%';
PostgreSQL 14 安装与基础使用#
-
安装:
sudo apt install postgresql postgresql-contrib # Ubuntu sudo systemctl enable --now postgresql -
切换至 postgres 用户(PostgreSQL 默认禁用密码登录,需通过系统用户切换):
sudo -u postgres psql # 直接登录 PostgreSQL -
创建数据库与用户:
CREATE DATABASE mydb; CREATE USER dbuser WITH ENCRYPTED PASSWORD 'StrongPassword123!'; GRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser;
6.3 容器化部署:Docker 基础与实践#
Docker 可将应用及其依赖打包为容器,实现环境一致性和快速部署。
-
安装 Docker(Ubuntu):
# 安装依赖 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加 Docker 源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 允许当前用户管理 Docker(无需 sudo) sudo usermod -aG docker $USER(需注销并重新登录使权限生效)
-
常用 Docker 命令:
docker pull nginx # 拉取 Nginx 镜像 docker run -d -p 8080:80 --name mynginx nginx # 启动 Nginx 容器(映射本地 8080 到容器 80) docker ps # 查看运行中的容器 docker exec -it mynginx /bin/bash # 进入容器内部 docker stop mynginx # 停止容器 docker rm mynginx # 删除容器 -
部署静态网站到 Docker Nginx:
将本地网站文件挂载到容器:docker run -d -p 80:80 -v /var/www/mywebsite:/usr/share/nginx/html --name mywebsite-nginx nginx
7. 性能优化与调优#
7.1 资源监控:识别性能瓶颈#
性能优化的前提是找到瓶颈,可通过以下工具分析:
- CPU 瓶颈:
htop查看 CPU 使用率,若%CPU长期接近 100%,可能存在 CPU 密集型进程(如未优化的数据库查询)。 - 内存瓶颈:
free -h查看内存使用,若available过低且swap频繁使用(si/so不为 0,通过vmstat查看),需增加内存或优化内存占用。 - 磁盘 IO 瓶颈:
iostat -x 1查看磁盘使用率(%util),若接近 100%,说明磁盘 IO 饱和(如频繁写入日志或数据库)。 - 网络瓶颈:
iftop(需安装)实时监控网络流量,若带宽长期接近上限,需优化传输内容(如压缩、CDN)。
7.2 内核参数调优:sysctl 配置#
内核参数通过 /etc/sysctl.conf 或 /etc/sysctl.d/ 目录配置,优化后需执行 sudo sysctl -p 生效。
常用优化参数(适用于 Web 服务器):#
# 网络优化
net.core.somaxconn = 65535 # 最大监听队列长度(默认 128,高并发场景需调大)
net.ipv4.tcp_max_syn_backlog = 65535 # TCP 半连接队列长度
net.ipv4.tcp_tw_reuse = 1 # 允许重用 TIME_WAIT 状态的端口
net.ipv4.tcp_tw_recycle = 0 # 禁用 TIME_WAIT 快速回收(可能导致 NAT 环境问题)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT 超时时间(默认 60s)
# 内存优化
vm.swappiness = 10 # 减少 swap 使用(0 表示尽量不使用 swap,10 表示内存使用率达 90% 时使用)
vm.overcommit_memory = 1 # 允许内存过度分配(适合数据库服务器)7.3 磁盘与文件系统优化#
-
使用 SSD:相比 HDD,SSD 可大幅提升磁盘 IO 性能(随机读写速度提升 10-100 倍)。
-
TRIM 优化(SSD 专用):
sudo fstrim -av # 手动触发 TRIM(回收已删除但未释放的空间) sudo systemctl enable --now fstrim.timer # 启用自动 TRIM(每周执行) -
RAID 配置:
- RAID 0:条带化,提升读写速度(无冗余,适合临时数据)。
- RAID 1:镜像,数据冗余(适合重要数据,如数据库)。
- RAID 5/6:条带化+校验,兼顾性能与冗余(适合大容量存储)。
配置工具:mdadm(软件 RAID)或硬件 RAID 控制器。
8. 故障排查实战#
8.1 服务启动失败:日志与状态诊断#
以 Nginx 启动失败为例:
-
查看服务状态:
sudo systemctl status nginx输出中会显示失败原因,例如 "Failed to start A high performance web server..." 及具体错误(如配置文件语法错误)。
-
查看详细日志:
sudo journalctl -u nginx --since "5 minutes ago" # 查看 5 分钟内的 Nginx 日志 # 或直接查看应用日志 sudo cat /var/log/nginx/error.log -
常见原因与解决:
- 配置文件语法错误:
sudo nginx -t检查,修复错误后重启。 - 端口被占用:
sudo lsof -i :80查看占用端口的进程, kill 或修改端口。
- 配置文件语法错误:
8.2 网络故障:从 Ping 到 Traceroute#
-
本地网络不通:
ping 192.168.1.1 # ping 网关,检查局域网连接 ip addr # 确认 IP 地址是否正确获取 ip route # 确认默认路由是否存在 -
远程连接不通:
ping 8.8.8.8 # ping 公共 DNS,检查外网连通性 traceroute 8.8.8.8 # 追踪路由,定位网络中断节点 telnet example.com 80 # 测试目标端口是否开放(如 HTTP 80 端口) -
防火墙拦截:
sudo ufw status # 确认目标端口是否允许访问
8.3 磁盘满了?CPU 跑满?内存泄漏?#
磁盘空间满了#
-
查看磁盘使用情况:
df -h # 查看分区使用率,找到满了的分区(如 /dev/sda1 100%) -
定位大文件:
sudo du -sh /* # 查看根目录下各目录大小 sudo du -sh /var/log/* # 进一步定位(日志文件常占空间) -
解决:删除无用日志(
sudo rm /var/log/old.log)、清空大文件(sudo truncate -s 0 /var/log/nginx/access.log)、扩展磁盘分区。
CPU 使用率过高#
-
查看占用高的进程:
top # 按 P 键按 CPU 使用率排序,找到 %CPU 高的进程(如 PID 1234) -
分析进程行为:
ps aux | grep 1234 # 查看进程详细命令 strace -p 1234 # 跟踪进程系统调用(需安装 strace) -
解决:优化进程(如数据库慢查询)、限制进程资源(
systemctl set-property <service> CPUQuota=50%)、终止异常进程(sudo kill -9 1234)。
内存泄漏(内存使用率持续增长)#
-
监控内存使用趋势:
free -h # 多次执行,观察 available 内存是否持续减少 -
定位内存泄漏进程:
htop # 按 M 键按内存使用率排序,观察哪些进程内存持续增长 -
解决:重启进程临时缓解,更新应用版本修复泄漏,或使用内存分析工具(如 Valgrind)定位代码问题。
9. 总结#
Linux 服务器是现代 IT 基础设施的基石,掌握其核心技术需要从基础配置、网络安全、服务管理到性能优化的全链路学习。本文涵盖了从发行版选型、初始化配置、网络安全加固、日常管理监控,到应用部署、性能优化和故障排查的关键知识点,并提供了大量实战案例和最佳实践。
无论是新手入门还是资深管理员,持续学习和实践都是提升 Linux 服务器管理能力的关键。建议结合具体业务场景,深入研究工具原理和系统内核机制,逐步构建稳定、高效、安全的服务器环境。
10. 参考资料#
-
官方文档:
-
工具手册:
man systemctl、man ufw、man rsync(Linux 自带手册)- sshd_config 手册
-
书籍推荐:
- 《Linux 鸟哥的私房菜:服务器架设篇》
- 《Linux Performance and Tuning Guidelines》(Red Hat)
- 《The Linux Command Line》(William E. Shotts, Jr.)
-
在线教程: