1. Linux磁盘管理基础与Web服务器环境搭建
在Linux服务器运维中,磁盘管理和Web服务配置是两个最基础也最关键的技能点。记得我第一次接手生产服务器时,就因为没有合理规划磁盘分区,导致网站日志暴涨把根目录撑满,整个服务不可用的惨痛经历。本文将结合我多年实战经验,从存储规划到服务部署,手把手带你构建稳健的Web服务环境。
Linux的磁盘管理不同于Windows的直观图形化操作,需要掌握一套命令行工具集。对于Web服务器而言,常见的存储需求包括:系统分区、网站根目录、日志存储、数据库文件等。合理的分区方案能有效隔离风险,比如将/var/log单独挂载可以避免日志文件占满整个磁盘。
2. 磁盘分区规划与实战操作
2.1 分区方案设计
对于典型的Web服务器,我推荐以下分区方案(以100G磁盘为例):
- /boot:1G(引导分区)
- /:20G(系统根目录)
- /var:30G(存放日志和缓存)
- /www:40G(网站根目录)
- swap:内存的1.5倍(交换分区)
使用fdisk进行分区的具体命令如下:
fdisk /dev/sda # 假设磁盘为sda n -> p -> 1 -> +1G # 创建/boot分区 n -> p -> 2 -> +20G # 创建/分区 n -> p -> 3 -> +30G # 创建/var分区 n -> p -> 4 -> +40G # 创建/www分区 t -> 82 # 设置swap分区类型 w # 写入分区表2.2 文件系统选择与优化
不同用途的分区应选择匹配的文件系统:
- 系统分区:ext4(稳定性优先)
- 网站目录:xfs(适合大文件读写)
- 日志分区:ext4(小文件性能好)
格式化命令示例:
mkfs.ext4 /dev/sda1 mkfs.xfs /dev/sda4 mkswap /dev/sda5关键提示:生产环境务必在/etc/fstab中添加nobarrier挂载选项提升性能,例如: /dev/sda4 /www xfs defaults,nobarrier 0 0
3. LVM动态扩展实战技巧
3.1 LVM基础配置
对于需要灵活扩容的场景,LVM(逻辑卷管理)是必备技能。创建LVM的完整流程:
pvcreate /dev/sdb # 创建物理卷 vgcreate web_vg /dev/sdb # 创建卷组 lvcreate -L 50G -n www_lv web_vg # 创建逻辑卷 mkfs.xfs /dev/web_vg/www_lv mount /dev/web_vg/www_lv /www3.2 在线扩容实战
当/www空间不足时,无需停机即可扩容:
lvextend -L +10G /dev/web_vg/www_lv # 扩展逻辑卷 xfs_growfs /www # XFS文件系统扩容 # 如果是ext4则使用:resize2fs /dev/web_vg/www_lv我曾遇到过某电商大促期间急需扩容的场景,正是靠LVM的在线扩容能力实现了业务零中断。记住关键点:XFS文件系统只支持扩容不支持缩容,规划时务必预留足够空间。
4. Web服务器环境配置详解
4.1 Nginx性能调优
安装Nginx后,这些配置项需要特别关注(以CentOS为例):
yum install -y nginx systemctl enable nginx关键配置文件优化:
# /etc/nginx/nginx.conf worker_processes auto; # 自动匹配CPU核心数 worker_rlimit_nofile 65535; # 提高文件描述符限制 events { worker_connections 4096; use epoll; # Linux高性能事件模型 } http { sendfile on; # 启用零拷贝传输 tcp_nopush on; # 优化网络包发送 keepalive_timeout 65; gzip on; # 启用压缩 }4.2 权限与安全配置
Web目录权限设置是安全的基础:
chown -R nginx:nginx /www find /www -type d -exec chmod 755 {} \; find /www -type f -exec chmod 644 {} \; setsebool -P httpd_read_user_content 1 # SELinux策略调整血泪教训:曾经因为权限设置过松导致网站被上传木马,建议遵循最小权限原则。对于上传目录,可以单独设置: chmod 1733 /www/uploads/ # 防删除位
5. 日志管理与轮转策略
5.1 日志分割方案
Nginx默认日志会无限增长,需要配置logrotate实现自动分割:
# /etc/logrotate.d/nginx /www/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 nginx adm sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }5.2 实时日志分析
使用tail和awk进行实时监控:
tail -f /www/logs/access.log | awk ' { if($9>499) {print "Server Error:",$0} else if($9>399) {print "Client Error:",$0} else if($7 ~ /\.php/) {print "PHP Request:",$0} }'这个简单的监控脚本可以帮助快速发现异常请求,我在排查CC攻击时屡试不爽。
6. 备份与灾难恢复
6.1 自动化备份方案
使用rsync实现增量备份:
#!/bin/bash # 每日凌晨3点执行 0 3 * * * root rsync -az --delete /www/ backup01:/backups/web/$(date +\%Y\%m\%d)/6.2 数据库备份策略
对于MySQL数据库,推荐使用mysqldump配合binlog:
mysqldump -uroot -p --single-transaction --master-data=2 dbname | gzip > /backups/db_$(date +%Y%m%d).sql.gz重要经验:备份后务必验证备份文件可用性!我曾遇到过备份脚本正常执行但实际文件为空的情况,导致无法恢复。建议添加校验步骤: test -s /backups/db_$(date +%Y%m%d).sql.gz && echo "Backup OK" || echo "Backup Failed"
7. 性能监控与优化
7.1 基础监控命令
这些命令组合是我的排障利器:
# 磁盘空间监控 df -hT | grep -v tmpfs # 内存使用情况 free -m # 进程资源占用 top -c -u nginx # IO性能分析 iostat -x 17.2 网络连接分析
当服务器响应变慢时,快速检查网络状态:
ss -tulnp | grep nginx # 查看监听端口 netstat -nat | awk '{print $6}' | sort | uniq -c # 统计连接状态 tcpdump -i eth0 -nn 'port 80' -w /tmp/http.pcap # 抓包分析8. 安全加固实践
8.1 基础安全措施
这些是每个Linux管理员都应该实施的安全配置:
# 禁用root SSH登录 sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config # 配置防火墙 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload # 自动安全更新 yum install -y yum-cron sed -i 's/apply_updates = no/apply_updates = yes/' /etc/yum/yum-cron.conf systemctl enable yum-cron8.2 Web应用防火墙
使用ModSecurity增强防护:
yum install -y mod_security mod_security_crs cp /etc/httpd/modsecurity.d/modsecurity.conf-recommended /etc/httpd/modsecurity.d/modsecurity.conf systemctl restart httpd这套组合拳下来,基本可以防范90%的自动化攻击。但安全是持续过程,建议每周检查一次安全日志:
grep -i 'denied' /var/log/audit/audit.log journalctl -u nginx --since '1 hour ago' | grep -i error