服务器配置是运维工作中最基础也最关键的环节。无论你是刚接触Linux的新手,还是已经管理过几十台服务器的老手,合理的服务器配置都能直接决定系统的稳定性、安全性和性能表现。很多开发者往往只关注应用层的代码优化,却忽略了底层环境的调优,导致上线后频繁出现内存溢出、连接超时、权限混乱等问题。本文将从实战角度出发,总结我在多年服务器配置中积累的最佳实践,涵盖安全加固、性能调优、日志管理和自动化部署等核心模块,希望能帮你少走弯路。
安全加固:从默认配置到纵深防御
关闭不必要的服务与端口
新安装的服务器往往默认开启大量服务,比如Telnet、FTP、CUPS打印服务等。这些服务不仅占用系统资源,更可能成为攻击入口。服务器配置的第一步,就是清理这些冗余服务。使用systemctl list-units --type=service --state=running查看当前运行的服务,然后逐一禁用不需要的服务。例如:
systemctl stop cups.service
systemctl disable cups.service
同时,用netstat -tulpn或ss -tulpn检查监听端口,只保留SSH(22)、HTTP/HTTPS(80/443)等必要端口。对于SSH服务,建议修改默认端口、禁止root直接登录、并启用密钥认证。下面是一个典型的/etc/ssh/sshd_config配置片段:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
修改后记得重启SSH服务:systemctl restart sshd。这些简单的调整能阻挡90%以上的自动化扫描攻击。
配置防火墙与Fail2Ban
即使关闭了多余端口,仍需要防火墙来限制访问来源。服务器配置中,iptables或firewalld是必选项。以firewalld为例,只允许特定IP访问SSH端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2222" protocol="tcp" accept'
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
此外,安装Fail2Ban可以有效防止暴力破解。它会监控SSH、Web服务等日志,在检测到多次失败登录后临时封禁攻击IP。配置示例:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 2222
logpath = /var/log/secure
性能调优:让服务器跑得更稳更快
内核参数优化
很多开发者拿到服务器后直接部署应用,结果遇到高并发时出现大量too many open files或连接超时。服务器配置中,内核参数的调整往往被忽视,但效果立竿见影。编辑/etc/sysctl.conf,添加以下常用优化:
fs.file-max = 1000000
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
vm.dirty_ratio = 80
vm.dirty_background_ratio = 5
执行sysctl -p生效。注意:tcp_tw_reuse开启后,允许将TIME_WAIT状态的socket用于新连接,对短连接场景提升明显。但如果你使用NAT环境,需谨慎测试。
文件描述符与进程限制
除了内核参数,用户级别的限制也要同步调整。编辑/etc/security/limits.conf:
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65535
* hard nproc 65535
对于Nginx、MySQL等应用,建议在它们的systemd服务文件中单独配置LimitNOFILE。例如Nginx的/etc/systemd/system/nginx.service.d/override.conf:
[Service]
LimitNOFILE=1000000
日志管理:从混乱到有序
集中化日志与轮转策略
日志是排查问题的第一手资料,但如果不加管理,几天就能撑爆磁盘。服务器配置中,日志轮转是必须的。Linux自带的logrotate工具非常强大,以Nginx日志为例,配置/etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
这样每天切割一次,保留30天,并压缩旧日志。对于关键应用,建议将日志发送到集中式日志系统(如ELK或Loki),避免单点故障。
日志权限与审计
日志中可能包含敏感信息(如用户IP、请求参数),因此服务器配置要严格限制日志文件的访问权限。确保只有root和特定服务用户可读:
chmod 640 /var/log/nginx/access.log
chown nginx:adm /var/log/nginx/access.log
同时,开启auditd审计系统,记录关键文件的变更:
auditctl -w /etc/nginx/nginx.conf -p wa -k nginx_conf_change
这样当配置被意外修改时,能快速定位责任人。
自动化部署与配置管理
使用Ansible实现配置一致性
手动配置一台服务器没问题,但当你需要管理10台、100台服务器时,一致性就成了噩梦。服务器配置的最佳实践之一,是使用配置管理工具。Ansible以其无代理、易上手的特点成为首选。下面是一个简单的playbook,用于批量配置SSH和防火墙:
---
- name: Basic server configuration
hosts: all
become: yes
tasks:
- name: Set SSH port
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^#?Port'
line: 'Port 2222'
notify: restart sshd
- name: Configure firewalld
firewalld:
port: 2222/tcp
permanent: yes
state: enabled
immediate: yes
handlers:
- name: restart sshd
systemd:
name: sshd
state: restarted
将你的服务器IP写入/etc/ansible/hosts,执行ansible-playbook site.yml即可一键完成配置。后续如果需求变更,只需修改playbook并重新执行。
版本控制你的配置
所有配置文件(包括sysctl、nginx.conf、sshd_config等)都应该纳入Git仓库管理。服务器配置不是一次性工作,而是持续演进的过程。使用Git可以追踪每次变更,方便回滚和协作。建议在仓库中建立如下目录结构:
server-config/
├── ansible/
├── nginx/
├── ssh/
├── sysctl/
└── scripts/
每次修改配置后,先提交到Git,再应用到服务器。这样即使误操作,也能快速恢复到上一个稳定版本。
总结
服务器配置看似琐碎,但每一项调整背后都关系到系统的可靠性。从安全加固入手,关闭无用服务、配置防火墙和Fail2Ban;再通过内核参数和文件描述符优化提升性能;日志管理则确保问题可追溯;最后用Ansible和Git实现配置的自动化与版本化。这些实践不是一蹴而就的,建议你从最紧迫的环节开始,逐步完善。记住:好的服务器配置,是让系统在无人值守时也能稳定运行,在出现故障时能快速定位。希望本文的实战技巧能为你带来实实在在的帮助。 作者:大佬虾 | 专注实用技术教程

评论框