优化Debian上的LNMP(Linux+Nginx+MySQL/MariaDB+PHP)服务器需从系统基础、Nginx、PHP、MySQL、系统内核及安全等多维度调整,以下是具体步骤:
更新系统与软件包
保持系统及软件包最新,修复安全漏洞并提升性能:
sudo apt update && sudo apt upgrade -y
调整文件描述符限制
增加系统最大文件描述符数量,避免高并发时资源耗尽:
echo "fs.file-max = 65536" | sudo tee -a /etc/sysctl.conf
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
sudo sysctl -p # 生效配置
优化网络参数
调整内核网络参数,提升TCP连接处理能力:
echo "net.core.somaxconn = 65535" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
调整Worker进程配置
根据CPU核心数设置worker_processes(通常设为CPU核心数),并启用epoll事件模型提升并发处理能力:
worker_processes auto;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
启用Gzip压缩
减少传输数据量,提升页面加载速度(需权衡CPU消耗):
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript;
配置静态资源缓存
通过expires头设置浏览器缓存,减少重复请求:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
优化FastCGI超时设置
调整PHP脚本执行超时时间,避免长请求阻塞:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_read_timeout 300;
}
启用OPcache
通过php.ini启用OPcache,缓存编译后的PHP脚本,提升执行效率:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
调整进程池配置
根据服务器内存设置pm.max_children(如8GB内存可设为50),避免内存溢出:
[www]
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
request_terminate_timeout = 300
启用OPcache
在PHP-FPM的php.ini中启用OPcache(与Nginx配置一致),进一步提升PHP性能。
禁用不必要的扩展
移除未使用的PHP扩展(如xdebug),减少内存占用:
sudo phpdismod xdebug
sudo systemctl restart php8.2-fpm
调整缓冲池大小
innodb_buffer_pool_size是InnoDB引擎的核心参数,建议设置为物理内存的50%-80%(如8GB内存设为4G-6G):
[mysqld]
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4 # 多实例提升并发
优化日志与查询缓存
根据业务需求调整日志设置,避免不必要的IO:
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 平衡性能与数据安全(0=最快,1=最安全)
query_cache_type = 0 # MySQL 8.0+已弃用查询缓存
优化连接与临时表
调整最大连接数及临时表大小,避免连接耗尽:
max_connections = 200
tmp_table_size = 64M
max_heap_table_size = 64M
wait_timeout = 28800 # 空闲连接超时时间(秒)
使用慢查询日志定位瓶颈
开启慢查询日志,分析并优化低效SQL:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
调整TCP参数
在/etc/sysctl.conf中添加以下配置,提升TCP连接复用与吞吐量:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_window_scaling = 1
启用Transparent Huge Pages(THP)
禁用THP,避免MySQL内存碎片化:
echo "never" | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo "never" | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
配置防火墙
使用ufw限制访问,仅开放必要端口(80、443、22、3306):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw allow 3306/tcp
sudo ufw enable
禁用SSH密码登录
使用SSH密钥对登录,提升服务器安全性:
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
定期备份数据
使用rsync或BorgBackup定期备份网站数据与数据库,防止数据丢失。
使用监控工具
部署Prometheus+Grafana监控服务器性能(CPU、内存、磁盘、网络),及时发现瓶颈。
定期分析日志
使用GoAccess分析Nginx访问日志,了解流量趋势;使用pt-query-digest分析MySQL慢查询日志,优化SQL语句。
定期更新软件
定期更新Nginx、MySQL、PHP至最新稳定版,获取性能改进与安全修复。
通过以上步骤,可显著提升Debian上LNMP服务器的性能、稳定性与安全性。需根据实际业务场景(如流量大小、数据库负载)调整参数,避免盲目照搬。