服务器配置是每个运维工程师和开发者的基本功,但真正把一台服务器调优到生产级水平,往往需要绕过无数“坑”。无论是刚接触云服务器的新手,还是想优化现有架构的老手,合理的服务器配置不仅能提升系统稳定性,还能显著降低资源浪费。本文将从实战角度出发,分享我在多年服务器配置中总结的核心技巧与最佳实践,涵盖操作系统调优、Web服务优化、安全加固和监控告警等关键环节。
操作系统层面的基础调优
内核参数优化
Linux内核的默认配置偏向通用性,但在高并发场景下,你需要主动调整。例如,/etc/sysctl.conf中的net.core.somaxconn默认是128,对于Nginx这类反向代理服务器显然不够。我通常将其提升到65535,同时调整net.ipv4.tcp_tw_reuse和net.ipv4.tcp_fin_timeout来减少TIME_WAIT状态连接。以下是一个生产环境常用的内核参数配置片段:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 注意:新版内核已废弃,建议关闭
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 1000000
执行sysctl -p使其生效。这里有个常见误区:很多人盲目开启tcp_tw_recycle,但在NAT环境下会导致连接异常,建议保持关闭。
文件描述符与进程限制
高并发应用(如Node.js、Java)经常遇到“too many open files”错误。除了修改/etc/security/limits.conf,还要确保systemd服务单元也配置了限制。例如,对于MySQL服务,在/etc/systemd/system/mysqld.service中添加:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后执行systemctl daemon-reload并重启服务。服务器配置中这一细节常被忽略,但却是排查“莫名挂掉”问题的关键。
Web服务器与中间件配置最佳实践
Nginx性能调优
Nginx是当前最流行的反向代理服务器,其服务器配置核心在于worker进程数、连接数和缓存策略。worker_processes建议设置为CPU核心数,worker_connections则根据内存调整,一般设为1024-4096。更关键的是开启gzip压缩和静态资源缓存:
http {
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json application/javascript;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# 限制连接数防止CC攻击
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 100;
}
此外,对于HTTPS配置,我强烈推荐使用Mozilla的SSL配置生成器,并启用HSTS和OCSP Stapling。例如:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=63072000" always;
PHP-FPM动态调优
如果使用PHP,PHP-FPM的进程管理直接影响响应速度。pm.max_children要根据内存计算,例如服务器有8GB内存,每个PHP进程占用30MB,则max_children可设为200左右。同时开启pm.status_path来监控进程状态:
pm = dynamic
pm.max_children = 200
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 1000
注意pm.max_requests设置为1000,可以防止内存泄漏累积。实际运维中,通过pm.status_path配合Prometheus采集,能精准定位PHP-FPM瓶颈。
安全加固:从基础到纵深防御
SSH与防火墙配置
服务器配置的第一步就是修改SSH默认端口(22改为高位端口如2222),并禁用root密码登录。同时安装fail2ban来防御暴力破解:
Port 2222
PermitRootLogin prohibit-password
PasswordAuthentication no
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = 2222
防火墙方面,使用iptables或ufw仅开放必要端口。例如Web服务器只开放80、443和SSH端口,数据库端口(3306)只允许内网访问:
ufw default deny incoming
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 10.0.0.0/8 to any port 3306
ufw enable
文件权限与最小化原则
Web目录权限应遵循“最小化”原则。例如,Nginx运行用户为www-data,那么网站文件所有者设为www-data,但配置文件只读。避免使用777权限,对于上传目录,可以设置chmod 755并禁止执行脚本:
location /uploads/ {
location ~ \.php$ {
deny all;
}
}
同时定期扫描可疑文件,使用rkhunter或chkrootkit检查rootkit。服务器配置的安全部分不是一次性工作,而需要持续审计。
监控与日志:让问题无处遁形
系统资源监控
没有监控的服务器配置就像蒙眼开车。我推荐使用prometheus + node_exporter + grafana组合,轻量且强大。node_exporter默认暴露大量指标,但需注意安全,建议加上认证或只监听内网:
./node_exporter --web.listen-address=127.0.0.1:9100
对于CPU、内存、磁盘I/O的告警阈值,可以参考:
- CPU使用率 > 80% 持续5分钟
- 内存使用率 > 90%
- 磁盘根分区使用率 > 85%
- 磁盘I/O等待时间 > 200ms
日志集中管理
日志是排查问题的第一手资料。使用
rsyslog或filebeat将各服务器日志汇总到ELK或Loki。例如,Nginx的访问日志可以按域名切割,并记录响应时间:log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time'; access_log /var/log/nginx/access.log main buffer=32k flush=5s;通过
request_time字段,可以快速发现慢请求。如果某个API接口平均响应时间超过1秒,就需要检查数据库查询或缓存策略。总结
服务器配置是一项系统工程,没有“银弹”方案。从操作系统内核调优到Web服务参数微调,从安全加固到监控告警,每个环节都需要根据业务场景反复测试。我建议你在每次调整后都记录变更原因和效果,形成自己的配置清单。最后,记住三个核心原则:最小化权限、持续监控、定期备份。希望本文的实战技巧能帮你少走弯路,让服务器稳定运行,为业务保驾护航。 作者:大佬虾 | 专注实用技术教程

评论框