centos lnmp最佳实践分享
导读:CentOS LNMP 最佳实践 一 基础部署与目录规范 系统准备与防火墙 更新系统并安装基础工具:yum update -y && yum install -y epel-release wget 放行访问:firew...
CentOS LNMP 最佳实践
一 基础部署与目录规范
- 系统准备与防火墙
- 更新系统并安装基础工具:
yum update -y & & yum install -y epel-release wget - 放行访问:
firewall-cmd --permanent --zone=public --add-service=http --add-service=https & & firewall-cmd --reload
- 更新系统并安装基础工具:
- 组件安装(以 CentOS 7/8 为例)
- Nginx:
yum install -y nginx & & systemctl enable --now nginx - MariaDB:
yum install -y mariadb-server mariadb & & systemctl enable --now mariadb & & mysql_secure_installation - PHP(按需选择版本):
yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-opcache
- Nginx:
- 目录与权限
- 网站根目录:
/var/www/your_domain - 日志目录:
/var/log/nginx、/var/log/php-fpm - 运行用户:
nginx:nginx,目录属主:chown -R nginx:nginx /var/www/your_domain
- 网站根目录:
- 快速连通性验证
- 创建探针:
echo "< ?php phpinfo(); ?> " > /var/www/your_domain/info.php - 访问
http://your_ip/info.php确认 Nginx + PHP 正常。
- 创建探针:
二 关键配置优化
- Nginx
- 进程与连接:
worker_processes auto; worker_connections 1024;(按 CPU 与内存调优) - 静态资源缓存与压缩:开启
gzip on;并为图片、CSS、JS 设置expires与Cache-Control - 慢请求日志:通过
map $request_time $loggable { 1.000+ slow; default main; }将> 1s请求单独记录到slow.log,便于定位瓶颈
- 进程与连接:
- PHP-FPM(建议 FPM 池使用 Unix Socket)
- 进程模型:
pm = dynamic; pm.max_children = 50; pm.start_servers = 5; pm.min_spare_servers = 5; pm.max_spare_servers = 35; pm.max_requests = 1000 - 慢日志:
request_slowlog_timeout = 1s; slowlog = /var/log/php-fpm/www-slow.log - 安全与性能:
rlimit_files = 65535; env[PATH]=/usr/local/bin:/usr/bin:/bin; security.limit_extensions = .php
- 进程模型:
- PHP(php.ini)
- 性能:
opcache.enable=1; opcache.memory_consumption=128; opcache.interned_strings_buffer=16; opcache.max_accelerated_files=10000; opcache.validate_timestamps=1; opcache.revalidate_freq=60 - 资源与上传:
memory_limit=128M; max_execution_time=30; post_max_size=16M; upload_max_filesize=10M - 字符集与日志:
default_charset="utf-8"; log_errors=On; error_log=/var/log/php-fpm/error.log
- 性能:
- MySQL/MariaDB
- 基础与连接:
max_connections=500~2000(视内存与业务而定) - InnoDB 缓冲:
innodb_buffer_pool_size(建议为可用内存的 50%~70%,数据库专用机可更高) - 日志与临时表:
slow_query_log=1; long_query_time=1; tmp_table_size=64M; max_heap_table_size=64M - 字符集:统一使用 utf8mb4(支持 emoji),在
[client] [mysql] [mysqld]段设置default-character-set=utf8mb4
- 基础与连接:
三 安全加固与日常运维
- 最小权限与服务隔离
- Web 运行用户与目录属主统一为 nginx:nginx;禁用 PHP 执行上传目录;限制
open_basedir - 禁用危险函数:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source
- Web 运行用户与目录属主统一为 nginx:nginx;禁用 PHP 执行上传目录;限制
- 网络与访问控制
- 仅开放 80/443;管理口限制来源 IP;数据库端口不对外暴露
- 数据与备份
- 每日全量 + 增量备份(物理/逻辑均可),保留 7~30 天;定期异地/离线备份
- 备份校验与恢复演练,保留回滚方案
- 日志与审计
- 启用并轮转 Nginx、PHP-FPM、MySQL 日志;集中采集与告警(如 5xx、慢查询激增)
- 补丁与合规
- 订阅安全公告,及时更新系统与组件;遵循最小暴露面原则
四 高可用与扩展
- 负载均衡与横向扩展
- 使用 Nginx 作为反向代理与负载均衡器,分发到多台后端应用服务器(upstream + health_check)
- 数据库高可用
- 主从复制(异步/半同步)实现读写分离与故障切换;关键业务引入 MHA/Orchestrator 或 Galera Cluster/MariaDB Cluster 提升可用性
- PHP-FPM 多实例与调度
- 多 FPM 实例 + Unix Socket + Nginx 权重/最少连接调度,提升吞吐与容错
- 监控与自动化
- 监控:Node Exporter + Prometheus/Grafana 监控 CPU、内存、连接、QPS、慢查询等
- 告警:基于阈值的多通道告警(如 5xx、连接数、磁盘、复制延迟)
- 自动化:Ansible 批量部署与配置管理,蓝绿/金丝雀发布
五 性能压测与持续优化
- 压测与基线
- 使用
ab/wrk/siege进行基线压测;关注 P95/P99、RPS、错误率、带宽、CPU/IO - 逐步增加并发,观察瓶颈(DB 连接、慢查询、文件描述符、锁争用)
- 使用
- 慢查询治理
- 开启并分析慢查询日志,使用
pt-query-digest定位 TOP SQL;补充索引、改写 SQL、避免全表扫描
- 开启并分析慢查询日志,使用
- 缓存与前端优化
- 启用 OPcache、页面/对象/页面片段缓存;静态资源上 CDN;启用 gzip/Brotli;合并压缩与懒加载
- 操作系统与存储
- 使用 SSD;优化内核参数(如
vm.swappiness、dirty_ratio/background_ratio);合理分区与文件系统(如 XFS)
- 使用 SSD;优化内核参数(如
- 持续迭代
- 建立容量水位线(CPU、内存、连接、IOPS),设置自动扩缩容策略;定期复盘慢日志与监控趋势
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp最佳实践分享
本文地址: https://pptw.com/jishu/747816.html
