服务器配置是保障业务稳定运行的基础,却常常被忽视。许多团队在项目初期随意选择配置,等到用户量增长或遭遇攻击时,才发现性能瓶颈和安全漏洞。实际上,合理的服务器配置不仅能提升响应速度、降低资源消耗,还能有效防御常见攻击。本文将从操作系统、Web服务器、数据库和安全策略四个维度,分享我多年实战中积累的最佳实践。
操作系统层面的基础调优
操作系统是服务器配置的基石,内核参数和资源限制直接影响应用性能。首先,需要调整文件描述符限制。默认的1024对于高并发Web服务远远不够,建议修改/etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
同时,优化网络栈参数。在/etc/sysctl.conf中添加:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 注意:NAT环境下必须关闭
常见误区:很多人盲目开启tcp_tw_recycle,但在NAT环境下会导致连接异常。建议仅开启tcp_tw_reuse,配合合理的tcp_fin_timeout即可。另外,swap分区的配置也常被忽略。对于内存密集型应用,建议将vm.swappiness设为10,避免过度使用交换空间导致性能下降。
Web服务器配置:Nginx与Apache的选择
在服务器配置中,Web服务器是直接面对用户的层。Nginx因其事件驱动架构,在高并发场景下表现优异。以下是一个生产级别的Nginx配置示例:
worker_processes auto;
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;
client_max_body_size 10m;
gzip on;
gzip_min_length 1000;
gzip_types text/plain application/json text/css application/javascript;
# 安全头
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
关键点:worker_processes设为auto,让Nginx自动匹配CPU核心数;worker_connections配合文件描述符限制,避免连接数瓶颈。对于静态资源,开启sendfile和gzip能显著减少I/O开销。
Apache虽然资源占用更高,但.htaccess和模块化架构在某些场景仍有优势。如果使用Apache,务必禁用未使用的模块,如mod_info、mod_status,并开启mod_evasive防御CC攻击。对于服务器配置,选择Nginx还是Apache取决于业务需求:高并发静态内容首选Nginx,需要复杂URL重写或兼容旧项目可考虑Apache。
数据库配置:MySQL与Redis的优化
数据库是服务器配置中的核心瓶颈。以MySQL为例,innodb_buffer_pool_size应设为物理内存的70%左右,但不超过总内存的80%。对于8GB内存的服务器,配置如下:
[mysqld]
innodb_buffer_pool_size = 5G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
max_connections = 500
query_cache_type = 0 # 5.7+版本建议关闭
注意:innodb_flush_log_at_trx_commit=2在性能和数据安全之间取得平衡,但若对ACID要求极高,应设为1。另外,慢查询日志必须开启,定位低效SQL:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
对于Redis,服务器配置重点在于持久化策略和内存管理。生产环境建议开启RDB和AOF双重持久化:
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
同时,设置maxmemory和淘汰策略,防止内存溢出:
maxmemory 4gb
maxmemory-policy allkeys-lru
常见问题:很多人将Redis当作缓存却不设置maxmemory,导致内存占满后OOM。务必根据业务数据量合理规划。
安全加固:防火墙与入侵检测
服务器配置中,安全是不可忽视的一环。iptables或firewalld是基础防线。以下是一个最小权限原则的iptables示例:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 你的管理IP -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
关键:只开放必要端口,SSH仅允许特定IP连接。对于Web服务,建议部署Fail2ban,自动封禁暴力破解IP:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
此外,文件权限也需严格管理。Web目录应设置为755,文件644,避免PHP文件被直接访问。对于上传目录,禁用执行权限:
location /uploads {
location ~ \.php$ {
deny all;
}
}
总结:服务器配置是一项系统工程,需要从操作系统、Web服务、数据库到安全层层把关。核心原则是:最小权限、按需分配、持续监控。建议定期使用sysbench、ab等工具进行压力测试,验证配置效果。同时,保持系统更新,关注安全公告。记住,没有一劳永逸的配置,只有不断优化的过程。
作者:大佬虾 | 专注实用技术教程

评论框