
LEMP Stack 是搭建动态网站和Web应用最流行的服务器环境之一。LEMP 代表 Linux 操作系统、Enginx(读作"engine-x")Web服务器、MySQL 数据库和 PHP 编程语言。这四个开源组件协同工作,为网站提供高效、可靠的运行环境。
本教程将带您在 Ubuntu 22.04 LTS VPS 上完整安装 LEMP Stack,从系统更新到SSL证书配置,每个步骤都有详细说明。无论是 AsiaGB 的 VPS 还是其他服务商的服务器,本指南均适用。
目录
1. LEMP Stack 是什么?Nginx 与 Apache 对比
LEMP Stack 用 Nginx 取代了传统 LAMP Stack 中的 Apache。这一替换带来了显著的性能差异:
| 特性 | Nginx(LEMP) | Apache(LAMP) |
|---|---|---|
| 连接处理模型 | 事件驱动、非阻塞 | 每请求一个进程/线程 |
| 内存占用 | 低且稳定 | 随连接数增长 |
| 静态文件服务 | 非常快 | 良好 |
| PHP 执行方式 | 通过 PHP-FPM(独立进程) | mod_php(内置) |
| 适合场景 | 资源有限的VPS、高并发场景 | 大量使用 .htaccess 的网站 |
Nginx 的事件驱动架构使其能以极少的内存处理数千个并发连接,非常适合资源受限的 VPS 环境。
2. 安装前的准备工作
开始安装前,请确保以下条件已就绪:
- 运行 Ubuntu 22.04 LTS 的 VPS(或 20.04 LTS),具有 root 或 sudo 权限
- VPS 的 IP 地址,以及已将 A 记录指向该 IP 的域名
- SSH 客户端 — macOS/Linux 的终端或 Windows 的 PuTTY
- 最低 1GB 内存 — WordPress 建议 2GB
提示:AsiaGB 的 VPS 方案起价 500 泰铢/月,支持 Ubuntu 22.04 LTS,提供完整 Root 权限和 SSD 存储,99% 正常运行时间保证。收到账户信息后即可立即安装 LEMP Stack。
3. 更新系统软件包
通过 SSH 连接到 VPS 后,首先更新软件包列表和已安装的软件:
sudo apt update && sudo apt upgrade -y
这个过程可能需要 2-5 分钟。如果升级过程中询问关于配置文件的问题,选择保留当前版本即可。
4. 安装和配置 Nginx
从 Ubuntu 官方仓库安装 Nginx:
sudo apt install nginx -y
设置 Nginx 开机自启并启动服务:
sudo systemctl enable nginx sudo systemctl start nginx sudo systemctl status nginx
如果状态显示 active (running),说明 Nginx 已正常运行。在浏览器中输入 VPS 的 IP 地址,应看到 "Welcome to nginx!" 页面。
配置 UFW 防火墙
sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable sudo ufw status
⚠️ 重要:启用 UFW 前必须先允许 OpenSSH,否则将立即被锁在服务器外。如果发生这种情况,请通过 VPS 提供商的控制台访问服务器。
5. 安装 MySQL 并运行安全配置
安装 MySQL 服务器:
sudo apt install mysql-server -y
运行安全配置脚本以加固 MySQL 安装:
sudo mysql_secure_installation
脚本会询问以下问题:
- 启用密码验证插件:按
Y— 强制使用强密码 - 密码强度级别:选择
2(强)用于生产环境 - 删除匿名用户:按
Y(重要安全措施) - 禁止 root 远程登录:按
Y(重要安全措施) - 删除测试数据库:按
Y - 重新加载权限表:按
Y
创建专用数据库用户
为每个网站创建独立的 MySQL 用户,而不是使用 root:
sudo mysql -- 创建数据库 CREATE DATABASE mywebsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建专用用户 CREATE USER 'webuser'@'localhost' IDENTIFIED BY '强密码'; -- 授予权限 GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
6. 安装 PHP 和 PHP-FPM
Ubuntu 22.04 默认仓库包含 PHP 8.1,安装 PHP-FPM 和常用扩展:
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd \ php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath \ php8.1-imagick php8.1-intl -y
验证 PHP-FPM 运行状态:
sudo systemctl status php8.1-fpm
调整 PHP 配置参数
编辑 FPM 使用的 php.ini 文件:
sudo nano /etc/php/8.1/fpm/php.ini
找到并修改以下值:
upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 memory_limit = 256M max_input_vars = 3000
重启 PHP-FPM 使配置生效:
sudo systemctl restart php8.1-fpm
7. 配置 Nginx 与 PHP-FPM 的连接
编辑 Nginx 默认服务器块以启用 PHP 处理:
sudo nano /etc/nginx/sites-available/default
添加 PHP location 块:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}测试配置并重新加载 Nginx:
sudo nginx -t sudo systemctl reload nginx
8. 配置虚拟主机(Server Block)
在同一台 VPS 上托管多个域名时,为每个域名创建独立的服务器块:
sudo mkdir -p /var/www/example.com/public_html sudo chown -R $USER:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com
创建新的配置文件:
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}启用站点并重新加载 Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
9. 测试 PHP 是否正常运行
创建一个 phpinfo() 测试文件:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpinfo.php
在浏览器中访问 http://VPS的IP/phpinfo.php,如果看到详细的 PHP 信息页面,说明 LEMP Stack 已完整安装成功。
⚠️ 测试完成后立即删除 phpinfo.php:此文件会暴露服务器的详细配置信息,绝对不能保留在生产服务器上。
sudo rm /var/www/html/phpinfo.php
10. 使用 Let's Encrypt 安装免费 SSL 证书
Let's Encrypt 提供免费的 SSL 证书。安装 Certbot 和 Nginx 插件:
sudo apt install certbot python3-certbot-nginx -y
为域名申请并自动配置 SSL 证书:
sudo certbot --nginx -d example.com -d www.example.com
Certbot 会询问您的邮箱地址、接受服务条款,并询问是否将 HTTP 请求重定向到 HTTPS(建议选择重定向)。
测试自动续期功能
sudo certbot renew --dry-run
如果没有报错,说明自动续期配置正确。证书将在到期前30天自动续期。
💡 提示:AsiaGB 也提供付费 SSL 证书(OV、EV、通配符),适合需要企业验证或覆盖所有子域名的业务场景。价格从每年 1,000 泰铢起。
11. 性能优化技巧
开启 Nginx Gzip 压缩
在 /etc/nginx/nginx.conf 的 http {} 块中添加:
gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
调整 PHP-FPM 进程池配置
编辑 /etc/php/8.1/fpm/pool.d/www.conf(适用于 2GB 内存 VPS):
pm = dynamic pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 10 pm.max_requests = 500
优化 MySQL InnoDB 缓冲池
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld] innodb_buffer_pool_size = 256M innodb_log_file_size = 64M query_cache_size = 0 query_cache_type = 0
12. 常见问题排查
| 问题 | 解决方法 |
|---|---|
| 502 Bad Gateway | PHP-FPM 未运行:sudo systemctl restart php8.1-fpm |
| 403 Forbidden | 权限问题:sudo chown -R www-data:www-data /var/www/html |
| PHP 文件被下载而非执行 | 缺少 location ~ \.php$ 块,或 Socket 路径不正确 |
| MySQL 连接被拒绝 | 验证凭据:mysql -u webuser -p |
| 修改配置后 Nginx 无法启动 | sudo nginx -t 查看具体配置错误 |
13. 常见问题解答(FAQ)
LEMP Stack 是什么?与 LAMP Stack 有什么区别?
LEMP Stack 使用 Nginx(E 代表 Engine-x)替代了 LAMP Stack 中的 Apache。Nginx 的事件驱动、非阻塞 I/O 模型能以更少的内存处理更多并发连接,特别适合内存有限的 VPS 环境。LAMP 则更适合大量依赖 .htaccess 的网站。
运行 LEMP Stack 需要什么 VPS 配置?
运行单个网站的基本 LEMP Stack 至少需要 1GB 内存和 1 个 CPU 核心。WordPress 或中等流量网站建议使用 2GB 内存。AsiaGB VPS 方案起价 500 泰铢/月,提供 SSD 存储和完整 Root 权限,99% 正常运行时间保证,完全支持 LEMP Stack。
为什么 Nginx 需要 PHP-FPM 而 Apache 不需要?
Nginx 是纯粹的 HTTP 服务器,无法直接执行应用程序代码。PHP-FPM(FastCGI 进程管理器)作为独立守护进程运行,Nginx 通过 FastCGI 协议将 PHP 请求转发给它处理。这种分离架构允许独立配置和扩展各组件,实现更好的资源利用率。
LEMP Stack 可以运行 WordPress 吗?
完全可以。WordPress 与 Nginx 和 PHP-FPM 完全兼容。安装 LEMP Stack 后,创建 MySQL 数据库,下载并解压 WordPress 到网站根目录,然后配置 Nginx 服务器块,添加 try_files $uri $uri/ /index.php?$args; 以支持 WordPress 固定链接。建议安装缓存插件以获得最佳性能。
安装 LEMP 后需要配置 UFW 防火墙吗?
是的,防火墙配置是必要的安全措施。只开放必要端口:SSH(22)、HTTP(80)和 HTTPS(443)。命令:sudo ufw allow OpenSSH && sudo ufw allow 'Nginx Full' && sudo ufw enable。启用 UFW 前务必先允许 SSH,否则会被锁在服务器外面。
mysql_secure_installation 必须运行吗?
对生产服务器来说是必须的。默认安装的 MySQL 存在匿名用户账户和测试数据库等安全隐患。安全安装脚本会删除匿名用户、禁用远程 root 登录、删除测试数据库,这些都是保护面向互联网的服务器的关键步骤。
立即开始您的 LEMP Stack VPS 之旅
AsiaGB VPS 起价 500 泰铢/月,提供完整 Root 权限、SSD 存储、99% 正常运行时间。泰国和新加坡数据中心可选。
查看 VPS 方案