Debian上LNMP的最佳实践
导读:Debian 上 LNMP 最佳实践 一 基础安装与最小可用配置 更新系统并安装基础工具:sudo apt update && sudo apt full-upgrade -y && sudo apt in...
Debian 上 LNMP 最佳实践
一 基础安装与最小可用配置
- 更新系统并安装基础工具:sudo apt update & & sudo apt full-upgrade -y & & sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
- 安装与启用 Nginx:sudo apt install -y nginx & & sudo systemctl enable --now nginx
- 安装 MariaDB 并加固:sudo apt install -y mariadb-server & & sudo mysql_secure_installation
- 安装 PHP-FPM 与常用扩展(以 Debian 12 常见版本为例,路径随版本变化):sudo apt install -y php-fpm php-mysql php-opcache php-cli php-gd php-curl php-mbstring
- 配置 Nginx 处理 PHP(示例,/etc/nginx/sites-available/default):
- 在 server 块中添加:
- location ~ .php$ {
- include snippets/fastcgi-php.conf;
- fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 路径按实际版本调整
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location ~ .php$ {
- 检查并重载:sudo nginx -t & & sudo systemctl reload nginx
- 在 server 块中添加:
- 创建测试页:echo “” | sudo tee /var/www/html/info.php,访问确认后在生产环境删除该文件。
二 性能优化要点
- Nginx
- 核心:worker_processes auto;events { worker_connections 16384; use epoll; multi_accept on; }
- 连接与缓冲:keepalive_timeout 65;keepalive_requests 100000;sendfile on;tcp_nodelay on;server_tokens off
- 压缩:gzip on;gzip_vary on;gzip_comp_level 6;gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss image/svg+xml
- 静态资源缓存:location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control “public, immutable”; }
- 可选缓存:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m max_size=1g inactive=60m use_temp_path=off;
- PHP-FPM(/etc/php/*/fpm/pool.d/www.conf)
- 进程模型:pm dynamic;pm.max_children 50;pm.start_servers 5;pm.min_spare_servers 5;pm.max_spare_servers 35
- 请求控制:pm.max_requests 500;request_terminate_timeout 300
- 监听与权限:listen = /run/php/php8.2-fpm.sock;listen.owner = www-data;listen.group = www-data;listen.mode = 0660
- 安全与性能:catch_workers_output yes;php_admin_value[memory_limit] = 128M
- OPcache(/etc/php/*/fpm/php.ini):opcache.enable=1;opcache.memory_consumption=256;opcache.interned_strings_buffer=16;opcache.max_accelerated_files=10000;opcache.validate_timestamps=0(生产建议关闭,配合部署脚本触发opcache_reset);opcache.jit=tracing;opcache.jit_buffer_size=128M
- MariaDB(/etc/mysql/mariadb.conf.d/50-server.cnf)
- 内存与缓存:innodb_buffer_pool_size = 物理内存的50%–70%(如 8GB 机器可设 4G–6G)
- 连接与会话:max_connections 200–500(按并发与内存评估);skip-name-resolve(避免 DNS 反向解析)
- 日志与诊断:slow_query_log 1;long_query_time 1;log_queries_not_using_indexes 0
- 其他:innodb_flush_log_at_trx_commit 1(强一致);sync_binlog 1;tmp_table_size / max_heap_table_size 64M–256M
- Linux 系统
- 文件句柄与进程限制:/etc/security/limits.conf 增加 www-data soft nofile 65535;hard nofile 65535
- 内核网络(/etc/sysctl.conf):net.core.somaxconn 65535;net.ipv4.ip_local_port_range 1024 65535;net.ipv4.tcp_fin_timeout 30;net.ipv4.tcp_slow_start_after_idle 0;net.ipv4.tcp_fastopen 3;net.core.netdev_max_backlog 65535;net.ipv4.tcp_syncookies 1;net.nf_conntrack_max 2097152(如启用 conntrack)。
三 安全加固清单
- 系统与软件:保持 Debian 安全更新 与 Nginx、MariaDB、PHP 的及时升级;最小化安装与运行服务
- 防火墙:使用 ufw 或 nftables 仅开放 22/80/443;sudo ufw allow 22,80,443/tcp & & sudo ufw enable
- SSH:禁用 root 远程登录;使用 SSH 密钥 认证;可更改默认端口并限制登录用户
- 数据库:仅监听 127.0.0.1(bind-address);执行 mysql_secure_installation;为应用创建最小权限专用账户
- PHP:expose_php Off;display_errors Off;disable_functions 禁用危险函数(如 exec、shell_exec、passthru、proc_open 等);open_basedir 限制目录
- Nginx:server_tokens off;限制上传大小(client_max_body_size);对管理路径与敏感文件(如 .env、.git)返回 403
- 机密与合规:密钥/证书妥善保管;启用 HTTPS/TLS;定期审计日志与可疑请求。
四 稳定性与运维
- 进程管理:使用 systemd 管理 Nginx、MariaDB、PHP-FPM;设置开机自启;变更前执行配置语法检查(如 sudo nginx -t)
- 监控与告警:部署 Prometheus + Grafana 监控 Nginx、PHP-FPM、MariaDB 关键指标;设置磁盘、内存、连接数阈值告警
- 日志与诊断:集中采集并轮转 Nginx access/error、MariaDB slow、PHP-FPM error;定期分析慢查询与 5xx 错误
- 备份与恢复:定期备份 /var/www、数据库与配置文件;验证恢复流程;保留 至少 7–30 天 的可用备份
- 高可用与扩展:引入 负载均衡 与 多实例/主从复制 提升吞吐与容灾能力;灰度发布与回滚机制。
五 部署与验证清单
- 域名与证书:正确配置 server_name;使用 Let’s Encrypt 签发并自动续期证书(certbot)
- 文件与权限:/var/www 属主 www-data:www-data;上传目录禁止执行;.ht* 访问拒绝
- 连接与超时:Nginx fastcgi_read_timeout 300;PHP-FPM request_terminate_timeout 300;MariaDB wait_timeout 合理设置
- 压测与基线:使用 ab/wrk 进行基线压测;逐步调优 worker_connections、pm.max_children、innodb_buffer_pool_size 等
- 回滚预案:保留上一版配置与发布包;变更窗口与回滚步骤文档化;异常自动降级与告警联动。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian上LNMP的最佳实践
本文地址: https://pptw.com/jishu/780268.html
