1. LNMP架构概述
LNMP(Linux + Nginx + MySQL + PHP)是目前Web应用部署的主流技术栈之一。这套组合以轻量高效著称,特别适合中小型网站和Web应用。我在过去五年里用这套架构部署过上百个项目,从个人博客到电商平台都有涉及。
与传统LAMP架构相比,LNMP最大的特点是使用Nginx替代Apache作为Web服务器。Nginx采用事件驱动架构,内存占用少,并发处理能力强。实测在2核4G的服务器上,LNMP可以轻松支撑日均5万PV的访问量。MySQL作为关系型数据库负责数据存储,PHP则处理业务逻辑。
提示:虽然现在有更多新兴技术栈,但LNMP依然是成本效益比最高的方案之一。特别适合预算有限但又需要稳定服务的中小项目。
2. 环境准备与基础配置
2.1 服务器选择建议
我推荐使用CentOS 7或Ubuntu 20.04 LTS作为操作系统。这两个版本长期支持稳定,社区资源丰富。硬件配置方面:
- 个人博客/企业官网:1核2G内存起步
- 中小型电商:2核4G内存起步
- 高并发应用:4核8G内存起步
# 查看系统信息 cat /etc/redhat-release # CentOS lsb_release -a # Ubuntu2.2 安全基础设置
部署前必须完成的安全措施:
- 修改SSH默认端口
- 禁用root直接登录
- 配置防火墙规则
- 安装fail2ban防暴力破解
# 示例:修改SSH端口 sudo vi /etc/ssh/sshd_config # 修改Port 22为其他端口如5822 sudo systemctl restart sshd3. 核心组件安装与配置
3.1 Nginx安装优化
Nginx的安装很简单,但优化配置很有讲究:
# Ubuntu安装 sudo apt install nginx # CentOS安装 sudo yum install epel-release sudo yum install nginx关键配置项(/etc/nginx/nginx.conf):
worker_processes auto; # 自动匹配CPU核心数 worker_connections 1024; # 每个worker最大连接数 keepalive_timeout 65; # 长连接超时 gzip on; # 开启压缩注意:生产环境一定要配置日志轮转,避免日志文件过大。
3.2 MySQL/MariaDB部署
现在更推荐使用MariaDB,它是MySQL的分支,完全兼容且性能更好:
# Ubuntu安装 sudo apt install mariadb-server # CentOS安装 sudo yum install mariadb-server安全初始化:
sudo mysql_secure_installation重要优化参数(/etc/my.cnf):
[mysqld] innodb_buffer_pool_size = 1G # 建议设为物理内存的50-70% max_connections = 200 query_cache_size = 64M3.3 PHP安装与调优
建议使用PHP 7.4或8.0版本:
# Ubuntu安装PHP-FPM sudo apt install php-fpm php-mysql php-gd php-mbstring # CentOS需要先添加EPEL和Remi源 sudo yum install php-fpm php-mysqlnd关键配置(/etc/php-fpm.d/www.conf):
pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 104. 站点部署实战
4.1 虚拟主机配置
典型的Nginx站点配置(/etc/nginx/conf.d/example.com.conf):
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.php index.html; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/run/php/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }4.2 权限与目录设置
正确的权限设置可以兼顾安全和功能:
sudo mkdir -p /var/www/example.com sudo chown -R nginx:nginx /var/www/example.com sudo chmod -R 755 /var/www/example.com4.3 部署WordPress示例
以WordPress为例的完整部署流程:
- 下载最新版WordPress
- 解压到网站目录
- 创建数据库和用户
- 运行安装向导
wget https://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz mv wordpress/* /var/www/example.com/5. 性能优化技巧
5.1 Nginx缓存配置
启用FastCGI缓存大幅提升性能:
fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";5.2 PHP OPcache启用
编辑php.ini启用OPcache:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=605.3 MySQL查询优化
使用慢查询日志找出性能瓶颈:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;6. 安全加固措施
6.1 Nginx安全配置
server_tokens off; # 隐藏Nginx版本号 add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;6.2 PHP安全设置
禁用危险函数:
disable_functions = exec,passthru,shell_exec,system expose_php = Off6.3 定期备份策略
使用cron定时备份:
# 数据库备份 mysqldump -u root -p database > /backups/db_$(date +%F).sql # 网站文件备份 tar -zcvf /backups/site_$(date +%F).tar.gz /var/www7. 常见问题排查
7.1 502 Bad Gateway错误
可能原因及解决方案:
- PHP-FPM未运行:
systemctl start php-fpm - sock文件路径错误:检查nginx配置中的fastcgi_pass
- PHP进程耗尽:增加pm.max_children
7.2 数据库连接问题
检查要点:
- MySQL服务状态
- 用户权限设置
- 防火墙规则
- 连接数限制
7.3 性能突然下降
排查步骤:
- 查看服务器负载:
top - 检查MySQL进程:
show processlist - 分析Nginx访问日志
- 查看PHP-FPM状态
我在实际运维中发现,90%的性能问题都源于不当的配置或未优化的查询。建议新站上线前用工具进行压力测试,比如使用ab命令:
ab -n 1000 -c 100 http://example.com/这套LNMP架构经过适当优化,完全能够支撑日均10万PV的中型网站。关键是要根据实际业务特点调整参数,并建立完善的监控机制。对于更高流量的场景,可以考虑引入Redis缓存、数据库读写分离等进阶方案。