服务器配置从来不是一件可以“设置完就忘掉”的事情。无论是部署一个个人博客,还是支撑百万级用户的企业应用,服务器的初始配置、安全加固、性能调优以及日常维护,都直接决定了系统的稳定性与响应速度。很多开发者习惯在拿到一台新服务器后,直接复制网上的“一键脚本”或者默认配置,结果往往在流量高峰或遭遇攻击时暴露出严重问题。本文将从实战角度出发,分享我在多年运维与开发中总结的服务器配置技巧与最佳实践,帮助你从“能用”走向“好用”。
初始安全加固:从第一行命令开始
拿到一台新服务器后,第一步不是安装Nginx或MySQL,而是关闭一切不必要的入口。默认的SSH端口22是扫描器最爱的目标,root用户的暴力破解从未停止过。
修改SSH端口与禁用root登录
修改/etc/ssh/sshd_config文件,将端口改为一个不常用的高位端口(如2222),并设置PermitRootLogin no。这样即使密码泄露,攻击者也无法直接获得root权限。
sudo vim /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
AllowUsers your_admin_user
sudo systemctl restart sshd
最佳实践:创建一个具有sudo权限的普通用户,日常操作都通过该用户进行。同时,务必配置SSH密钥登录,禁用密码认证。将公钥添加到~/.ssh/authorized_keys后,设置PasswordAuthentication no。
防火墙与Fail2Ban联动
仅靠修改端口还不够,你需要一个行为检测工具。Fail2Ban会监控日志文件,当某个IP在短时间内多次认证失败时,自动将其加入防火墙黑名单。
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
sudo systemctl enable fail2ban --now
在服务器配置中,安全永远是第一优先级。一个被攻破的服务器不仅会导致数据泄露,还可能成为攻击其他目标的跳板。
性能调优:让硬件发挥最大价值
很多人在服务器配置时只关注软件安装,却忽略了操作系统层面的参数调整。Linux内核默认的TCP缓冲区、文件描述符限制、内存管理策略,都是为通用场景设计的,对于高并发Web服务来说,必须进行针对性优化。
内核参数优化
修改/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 = 20
vm.dirty_background_ratio = 5
sudo sysctl -p
注意:tcp_tw_reuse与tcp_tw_recycle不同,后者在NAT环境下会导致问题,不要启用tcp_tw_recycle。
文件描述符限制
高并发场景下,每个连接都会占用一个文件描述符。默认的1024远远不够,需要修改/etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
同时,对于systemd管理的服务(如Nginx),需要在服务配置文件中单独设置LimitNOFILE=65535。这些细节往往被忽略,却是服务器配置中决定性能上限的关键。
软件栈配置:Nginx与PHP-FPM的黄金搭档
Web服务器配置是大多数开发者最常接触的部分。Nginx作为反向代理,PHP-FPM作为应用处理器,两者之间的参数匹配直接影响响应速度。
Nginx Worker进程与连接数
Nginx的worker_processes通常设置为CPU核心数,worker_connections则决定了每个进程能处理的最大连接数。一个常见的误区是盲目增大worker_connections,而忽略了系统文件描述符的限制。
user www-data;
worker_processes auto; # 自动匹配CPU核心数
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
# Gzip压缩
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json application/javascript;
}
PHP-FPM进程管理策略
PHP-FPM有static、dynamic和ondemand三种进程管理模式。对于高流量站点,推荐使用static模式,固定子进程数量,避免频繁创建和销毁进程的开销。
[www]
pm = static
pm.max_children = 50
pm.max_requests = 500
; 慢日志记录,定位性能瓶颈
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log
实战技巧:pm.max_children的值需要根据服务器内存计算。每个PHP-FPM进程大约占用30-50MB内存,假设服务器有4GB内存,预留1GB给系统和其他服务,那么max_children可设置为(3GB / 40MB) ≈ 75。在服务器配置中,资源不是无限的,必须精打细算。
监控与日志:不做“盲人摸象”
很多开发者只在服务器出问题时才登录查看,这种被动维护方式非常危险。建立有效的监控体系,是服务器配置中不可或缺的一环。
基础监控工具
netdata是一款轻量级、实时性极强的监控工具,安装后通过浏览器即可查看CPU、内存、磁盘IO、网络流量等所有指标。
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
对于更传统的需求,可以使用htop、iotop、nethogs等命令行工具快速定位问题。
日志轮转与集中管理
日志如果不加管理,会迅速占满磁盘。配置logrotate确保日志文件定期压缩和清理:
/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
/usr/sbin/nginx -s reopen
endscript
}
对于多台服务器,建议使用ELK(Elasticsearch, Logstash, Kibana)或Loki+Grafana进行日志集中管理。这样,当某台服务器的服务器配置出现异常时,可以快速从海量日志中定位到根本原因。
总结
服务器配置是一门实践性极强的学问,没有放之四海而皆准的模板。本文从安全加固、内核调优、软件栈优化到监控体系,分享了多个经过生产环境验证的实战技巧。核心原则是:最小权限、按需分配、持续监控。建议你在每次调整参数后,都通过压力测试工具(如ab、wrk或sysbench)验证效果,并记录变更日志。不要盲目复制网上的配置,理解每一行参数的含义,才能让你的服务器在关键时刻扛得住压力。最后,别忘了定期更新系统补丁——安全与性能,两手都要硬。
作者:大佬虾 | 专注实用技术教程

评论框