一、服务器初始化配置
当您从云服务商购入一台新的 Linux 服务器后,首要任务是做好初始化配置。这不仅是安全的基础,也是后续性能调优的前提。本章将从零开始,详细讲解服务器上线的每一个关键步骤。
1.1 系统更新与基础软件安装
登录服务器的第一件事就是更新系统软件包到最新版本,修复已知安全漏洞。无论是 Debian/Ubuntu 还是 CentOS/RHEL 系列,都有对应的包管理命令。

# Debian/Ubuntu 系统 sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget git vim htop net-tools unzip screen # CentOS/RHEL 系统 sudo yum update -y sudo yum install -y curl wget git vim htop net-tools unzip screen epel-release
更新完成后建议重启一次服务器,确保所有内核更新生效:sudo reboot。
1.2 创建普通用户并配置 sudo 权限
直接使用 root 用户操作服务器存在极大的安全隐患。正确的做法是创建一个普通用户,赋予 sudo 权限用于日常管理。
# 创建新用户 sudo useradd -m -s /bin/bash admin # 设置密码 sudo passwd admin # 将用户加入 sudo 组 sudo usermod -aG sudo admin # 验证 sudo 权限 su - admin sudo whoami # 输出应为 root
1.3 SSH 安全加固
SSH 是服务器最常用的远程管理方式,也是攻击者的首要攻击目标。以下配置可以大幅提升 SSH 安全性,建议在初始化阶段完成。
# 编辑 /etc/ssh/sshd_config Port 2222 # 修改默认端口,避开22端口的扫描攻击 PermitRootLogin no # 禁止 root 直接登录 PasswordAuthentication no # 禁用密码登录,仅允许密钥登录 PubkeyAuthentication yes # 开启密钥认证 MaxAuthTries 3 # 最大认证尝试次数 ClientAliveInterval 300 # 客户端心跳检测间隔 ClientAliveCountMax 2 # 心跳检测失败次数上限 AllowUsers admin # 仅允许特定用户登录 # 配置完成后重启 SSH 服务 sudo systemctl restart sshd # 重要:在断开当前连接前,另开一个终端测试新配置是否生效 # 确认能正常登录后再关闭当前会话
1.4 配置防火墙
iptables 是 Linux 内置的防火墙工具,ufw 是其简化版前端。建议使用 ufw 进行快速配置。
# 安装 ufw sudo apt install -y ufw # 配置默认策略 sudo ufw default deny incoming sudo ufw default allow outgoing # 开放必要端口 sudo ufw allow 2222/tcp # SSH 新端口 sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS # 启用防火墙 sudo ufw --force enable sudo ufw status verbose
二、LNMP 环境搭建与优化
LNMP(Linux + Nginx + MySQL + PHP)是目前最流行的 Web 服务器架构组合。本部分将从安装到性能调优,详细讲解每个组件的配置方法。
2.1 Nginx 安装与核心配置
# 添加 Nginx 官方源(Ubuntu/Debian) sudo apt install -y nginx # 启动并设置开机自启 sudo systemctl enable nginx sudo systemctl start nginx
Nginx 核心性能优化
# /etc/nginx/nginx.conf 核心优化配置
worker_processes auto; # 自动匹配 CPU 核心数
worker_rlimit_nofile 65535; # 单进程最大文件句柄数
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll; # 使用 epoll 事件模型
worker_connections 65535; # 单进程最大连接数
multi_accept on; # 一次 accept 多个连接
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on; # 启用零拷贝文件传输
tcp_nopush on; # 优化数据包传输
tcp_nodelay on; # 禁用 Nagle 算法
keepalive_timeout 65; # 长连接超时时间
keepalive_requests 1000; # 单连接最大请求数
client_max_body_size 50m; # 上传文件大小限制
# Gzip 压缩配置
gzip on; # 启用 Gzip 压缩
gzip_min_length 1k; # 最小压缩文件大小
gzip_comp_level 6; # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on; # 根据请求头决定是否压缩
gzip_proxied any; # 代理压缩
gzip_disable "msie6"; # 禁用老版本 IE
}2.2 MySQL 安装与性能调优
# 安装 MySQL 8.0 sudo apt install -y mysql-server # 安全初始化配置 sudo mysql_secure_installation
MySQL 配置优化
# /etc/mysql/my.cnf 优化配置 [mysqld] # 基础设置 port = 3306 bind-address = 127.0.0.1 # 仅本地访问,增强安全性 max_connections = 500 # 最大连接数 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # InnoDB 引擎优化 innodb_buffer_pool_size = 2G # 设置为物理内存的 60%-80% innodb_log_file_size = 512M # 重做日志大小 innodb_flush_log_at_trx_commit = 2 # 性能与安全平衡 innodb_file_per_table = 1 # 每表独立表空间 innodb_flush_method = O_DIRECT # 绕过文件系统缓存 # 查询缓存(MySQL 8.0 已废弃,这里用其他优化替代) tmp_table_size = 64M max_heap_table_size = 64M sort_buffer_size = 4M join_buffer_size = 4M
2.3 PHP 安装与 FPM 优化
# 安装 PHP 8.2 及常用扩展 sudo apt install -y php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-redis php8.2-opcache
PHP-FPM 性能调优
# /etc/php/8.2/fpm/pool.d/www.conf 优化配置 pm = dynamic # 动态进程管理 pm.max_children = 50 # 最大子进程数 pm.start_servers = 5 # 启动时进程数 pm.min_spare_servers = 5 # 最小空闲进程数 pm.max_spare_servers = 35 # 最大空闲进程数 pm.max_requests = 1000 # 每个进程最大请求数后重启 request_terminate_timeout = 300 # 请求超时时间 # /etc/php/8.2/cli/conf.d/10-opcache.ini opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 opcache.fast_shutdown=1
三、安全加固与防护
3.1 Fail2ban 防暴力破解
Fail2ban 会监控系统日志,当检测到多次失败的登录尝试后,自动将攻击 IP 加入防火墙黑名单。
# 安装 fail2ban sudo apt install -y fail2ban # 配置 SSH 防护 sudo tee /etc/fail2ban/jail.local
3.2 配置 SSL 证书(Let's Encrypt)
# 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 获取并自动配置 SSL 证书 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com # 证书自动续期(默认已配置定时任务) sudo certbot renew --dry-run
3.3 系统安全基线配置
# 内核参数安全加固 sudo tee -a /etc/sysctl.conf
四、监控体系搭建
4.1 系统资源监控(htop + glances)
# 安装监控工具 sudo apt install -y htop glances # glances 提供 Web 监控界面 glances -w -p 61208 # 配置开机自启(systemd 服务) sudo tee /etc/systemd/system/glances.service
4.2 Nginx 访问日志分析与实时监控
# 安装 goaccess 进行日志分析 sudo apt install -y goaccess # 实时分析 Nginx 访问日志 sudo goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html # 访问 http://yourdomain.com/report.html 查看实时报表
4.3 磁盘与数据库备份策略
# 编写自动备份脚本 sudo tee /usr/local/bin/backup.sh $BACKUP_DIR/db_$DATE.sql.gz # 网站文件备份 tar -czf $BACKUP_DIR/www_$DATE.tar.gz /var/www/html # 保留最近 7 天备份,删除更早的 find $BACKUP_DIR -type f -mtime +7 -delete # 同步到远程存储(可选) # rsync -avz $BACKUP_DIR/ user@backup-server:/backup/ BACKUP chmod +x /usr/local/bin/backup.sh # 添加定时任务,每天凌晨 3 点执行 echo "0 3 * * * root /usr/local/bin/backup.sh" | sudo tee /etc/cron.d/backup
五、性能诊断工具与实战
5.1 常用性能诊断命令
掌握以下命令可以帮助您快速定位服务器性能瓶颈:
# CPU 性能分析 top -bn1 | head -20 # 查看 CPU 和内存占用 TOP 10 htop # 交互式进程管理 mpstat -P ALL 1 # 查看每个 CPU 核心使用率 # 内存分析 free -h # 查看内存使用情况 vmstat 1 5 # 虚拟内存统计 smem -t -p # 更精确的内存使用统计 # 磁盘 I/O 分析 iostat -x 1 # 磁盘 I/O 详细统计 iotop # 交互式磁盘 I/O 监控 df -h # 磁盘空间使用情况 # 网络分析 iftop # 实时网络流量监控 nethogs # 按进程查看网络带宽 ss -tuln # 查看监听端口 netstat -an | grep ESTABLISHED | wc -l # 查看当前连接数
5.2 MySQL 慢查询分析与优化
# 开启慢查询日志 mysql -u root -p -e " SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log'; " # 使用 mysqldumpslow 分析 sudo mysqldumpslow -t 10 /var/log/mysql/slow.log | more # 安装 pt-query-digest 进行深度分析 sudo apt install -y percona-toolkit sudo pt-query-digest /var/log/mysql/slow.log
5.3 Nginx 性能瓶颈排查
# 查看 Nginx 状态页面(需在配置中启用)
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
# curl 访问查看
curl http://localhost/nginx_status
# Active connections: 42
# server accepts handled requests
# 12345 12345 67890
# Reading: 0 Writing: 2 Waiting: 40
# 解读:Waiting 过高说明长连接未及时释放
# Writing 过高说明后端响应慢需要优化 PHP-FPM六、高可用与扩展方案
6.1 Redis 缓存加速
# 安装 Redis sudo apt install -y redis-server # 配置 Redis 优化 sudo tee /etc/redis/redis.conf
6.2 负载均衡基础配置(Nginx 反向代理)
# Nginx 负载均衡配置示例
upstream backend {
least_conn; # 最少连接数算法
server 192.168.1.10:8080 weight=5; # 权重 5
server 192.168.1.11:8080 weight=3; # 权重 3
server 192.168.1.12:8080 backup; # 备用服务器
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend;
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_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}七、常见问题排查手册
7.1 服务器无法 SSH 连接
排查步骤:
检查服务器是否开机:通过云服务商控制台查看状态
检查防火墙规则:通过云服务商 VNC/控制台登录后检查 ufw/iptables
检查 SSH 服务状态:
sudo systemctl status sshd检查 SSH 端口是否开放:
sudo netstat -tulpn | grep :2222检查密钥权限:
chmod 600 ~/.ssh/authorized_keys
7.2 网站访问 502 Bad Gateway
通常是因为 PHP-FPM 进程崩溃或 Nginx 无法连接到 PHP-FPM:
# 检查 PHP-FPM 状态 sudo systemctl status php8.2-fpm # 查看 PHP-FPM 错误日志 sudo tail -100 /var/log/php8.2-fpm.log # 重启 PHP-FPM sudo systemctl restart php8.2-fpm # 检查 Nginx 配置是否正确 sudo nginx -t
7.3 MySQL 连接数过高
# 查看当前连接数 mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';" # 查看当前活跃进程 mysql -u root -p -e "SHOW FULL PROCESSLIST;" # 临时解决方案:增加最大连接数 mysql -u root -p -e "SET GLOBAL max_connections = 1000;" # 长期解决方案:优化代码减少数据库连接,启用持久连接,使用 Redis 缓存
总结
Linux 服务器运维是一项系统性工作,需要从初始化配置、环境搭建、安全加固、监控告警到性能优化全链路覆盖。本文从实战角度出发,详细讲解了每一个环节的核心操作和最佳实践。
建议运维人员建立标准化的服务器部署清单(Checklist),确保每台新服务器上线时都不会遗漏关键配置。同时定期审查服务器日志和性能指标,及时发现和处理潜在问题。
记住运维的黄金法则:安全第一、监控先行、备份为王。只有做好这三个基础,才能确保服务器的稳定运行。
相关文章
发表评论
评论列表