温馨提示×

Debian系统中LNMP配置技巧

小樊
34
2025-11-19 04:17:26
栏目: 智能运维

Debian 上搭建与优化 LNMP 的实用要点

一 基础安装与最小可用配置

  • 更新系统并安装组件:sudo apt update && sudo apt install nginx mariadb-server php-fpm php-mysql;完成后启动并设置开机自启:sudo systemctl enable --now nginx mariadb php-fpm。运行 sudo mysql_secure_installation 完成数据库加固。
  • 配置 PHP-FPM(以 PHP 8.2 为例):编辑 /etc/php/8.2/fpm/pool.d/www.conf,设置 listen = /run/php/php8.2-fpm.sock,以及 listen.owner/listen.group 与 user/group 为 www-data;重启服务:sudo systemctl restart php8.2-fpm。
  • 配置 Nginx 处理 PHP:在 /etc/nginx/sites-available/default 的 server 块中添加:
    location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; }
    测试并重载:sudo nginx -t && sudo systemctl reload nginx。
  • 防火墙放行:sudo ufw allow ‘Nginx Full’;如需远程管理数据库,仅在内网开放 3306,并创建最小权限账户。

二 Nginx 性能与安全要点

  • 进程与连接:worker_processes auto;worker_connections 16384(按内存与业务调优);multi_accept on;use epoll
  • 文件与传输:worker_rlimit_nofile 65535;sendfile on;tcp_nopush on;tcp_nodelay on
  • 长连接与超时:keepalive_timeout 65;keepalive_requests 100000;fastcgi_read_timeout 300;client_max_body_size 8m(按业务调整)。
  • 压缩与信息泄露:gzip on(静态资源收益明显;CPU紧张时可关闭);gzip_comp_level 6;server_tokens off
  • 缓存与静态资源:对图片、JS、CSS 设置 expires 与 Cache-Control,必要时启用 proxy_cache/fastcgi_cache

三 PHP-FPM 与 OPcache 调优

  • 进程模型与池:pm = dynamic;按内存估算 pm.max_children(示例:每进程约 40MB,4GB 内存可先设 80 左右,再压测微调);pm.start_servers 4;pm.min_spare_servers 2;pm.max_spare_servers 10;pm.max_requests 500(防内存泄漏)。
  • 监听与权限:优先使用 Unix Socket(如 /run/php/php8.2-fpm.sock),设置 listen.owner/listen.group 与 user/group 为 www-data,权限 0660。
  • OPcache 建议:opcache.enable=1;opcache.memory_consumption=128–256M;opcache.interned_strings_buffer=16;opcache.max_accelerated_files=10000;opcache.validate_timestamps=1(开发)/0(生产);opcache.save_comments=1;启用 JIT:opcache.jit=tracing,opcache.jit_buffer_size=128M
  • 运行与日志:memory_limit 256–512M;max_execution_time 300;error_log 指向专用日志;生产禁用 xdebug。

四 MariaDB/MySQL 关键配置与查询优化

  • 内存与连接:innodb_buffer_pool_size 设为物理内存的 50%–80%(如 8GB 内存可先设 6G);max_connections 结合业务与内存谨慎上调(避免连接风暴)。
  • InnoDB 与日志:innodb_log_file_size 256M;innodb_flush_log_at_trx_commit 2(在可接受的数据安全性前提下提升吞吐);合理设置 innodb_flush_method。
  • 查询与索引:避免 SELECT *;为高频 WHERE/JOIN 列建立索引(必要时用复合索引);用 EXPLAIN 分析执行计划;开启并定期分析慢查询日志(slow_query_log、long_query_time)。
  • 版本差异:query_cache 在 MySQL 8.0 已移除,旧版本可按需小量使用;更推荐用 Redis/Memcached 做应用层缓存。

五 系统内核与安全防护清单

  • 文件句柄与进程限制:ulimit -n 65535;在 systemd 服务单元中设置 LimitNOFILE=65535。
  • TCP/IP 与内核参数(/etc/sysctl.conf):net.core.somaxconn 65535;net.ipv4.ip_local_port_range 1024 65535;net.ipv4.tcp_fin_timeout 30;net.ipv4.tcp_tw_reuse 1;net.ipv4.tcp_keepalive_time 60;net.ipv4.tcp_keepalive_intvl 10;net.ipv4.tcp_keepalive_probes 6;net.core.netdev_max_backlog 65535;net.ipv4.tcp_max_syn_backlog 65535;net.ipv4.tcp_syncookies 1;net.nf_conntrack_max 2097152(使用 conntrack 时)。
  • 安全加固:及时 apt update/upgrade;仅开放 80/443/22(或自定义 SSH 端口);SSH 禁用 root 登录、使用密钥;数据库仅监听内网或本地;定期备份与监控。

0