所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 操作系统 管理

如何在 Ubuntu 上安装 Linux、Nginx、MySQL、PHP (LEMP) 堆栈:完整指南

LEMP stackLinux、Nginx、MySQL 和 PHP 的首字母缩写)是用于驱动动态网站和高性能 Web 应用程序的最广泛采用的 Web 服务器配置之一。通过结合 Linux 的坚如磐石的稳定性、Nginx 的闪电般的速度、MySQL 的强大数据管理功能和 PHP 的多功能性,LEMP stack 提供了一个强大、可扩展且资源高效的托管环境。

无论您是部署个人博客、商业网站还是复杂的企业应用程序,正确配置的 LEMP stack 都能为您提供更好的可扩展性、更快的页面加载时间和高效的内存管理——尤其是在高流量条件下。

如果您需要一个可靠的基础来运行此 stack,AlexHost 的 VPS 托管提供具有完全 root 访问权限的高性能 Linux 虚拟服务器,让您完全控制 LEMP 环境的每个组件。配合 SSL 证书从第一天起就保护您的应用程序。

在本综合指南中,我们将引导您完成在 Ubuntu 服务器上安装和配置完整 LEMP stack 的每一步——从初始系统准备到测试您的实时 PHP 环境。

1. 前置条件

在开始之前,请确保您已准备好以下内容:

  • 运行 Ubuntu 18.04、20.04 或 22.04 LTS 的服务器
  • 具有 sudo 权限 的用户账户
  • SSH 访问或对您服务器的直接终端访问
  • 已注册的域名(对于生产部署是可选但推荐的 — 您可以通过 AlexHost 域名注册注册一个)

> 专业提示:对于任何 LEMP 部署,具有保证资源的干净隔离环境,VPS 托管计划是理想的起点。

2. 更新您的系统

在安装任何软件包之前,刷新您的软件包索引并应用所有待处理的更新至关重要。这确保您使用的是所有软件的最新、最安全版本。

打开您的终端并运行:

sudo apt update && sudo apt upgrade -y

此命令更新本地软件包数据库并将所有已安装的软件包升级到其最新可用版本。

3. 安装 Nginx

Nginx(发音为”engine-x”)是一个高性能、事件驱动的网络服务器和反向代理。与 Apache 不同,Nginx 以最小的内存消耗处理并发连接,使其成为高流量环境中的首选。

步骤 1:安装 Nginx

sudo apt install nginx -y

步骤 2:启动并启用 Nginx

安装后,启动 Nginx 服务并将其配置为在系统启动时自动启动:

sudo systemctl start nginx
sudo systemctl enable nginx

步骤 3:验证 Nginx 正在运行

检查服务状态以确认 Nginx 处于活动状态:

sudo systemctl status nginx

您应该看到输出指示服务为活动(运行中)。您也可以打开网络浏览器并导航到您的服务器 IP 地址:

http://your_server_ip

如果 Nginx 运行正确,您将看到默认的“欢迎使用 nginx!”页面。

步骤 4:配置防火墙(如适用)

如果您启用了 UFW(简化防火墙),请允许 HTTP 和 HTTPS 流量:

sudo ufw allow 'Nginx Full'
sudo ufw status

4. 安装 MySQL

MySQL 是一个强大的开源关系数据库管理系统 (RDBMS),是大多数动态网络应用程序(包括 WordPress、Joomla 和自定义 PHP 应用程序)的数据支撑。

步骤 1:安装 MySQL 服务器

sudo apt install mysql-server -y

步骤 2:保护 MySQL 安装

安装完成后,运行内置的安全加固脚本。此脚本可帮助您设置强根密码、删除匿名用户、禁用远程根登录和删除测试数据库:

sudo mysql_secure_installation

系统将提示您一系列问题。生产服务器的推荐答案为:

提示推荐答案
设置 VALIDATE PASSWORD 组件?
密码验证策略级别2(强)
删除匿名用户?
禁止远程根登录?
删除测试数据库?
重新加载权限表?

步骤 3:验证 MySQL 正在运行

sudo systemctl status mysql

步骤 4:登录 MySQL(可选验证)

sudo mysql -u root -p

出现提示时输入您的根密码。输入 exit 以退出 MySQL shell。

5. 安装 PHP

PHP (Hypertext Preprocessor) 是处理动态内容并与 MySQL 通信以提供数据驱动网页的服务器端脚本语言。使用 Nginx 时,PHP 通过 PHP-FPM (FastCGI Process Manager) 处理,它独立于网络服务器处理 PHP 请求,以提高性能。

步骤 1:安装 PHP-FPM 和 MySQL 扩展

sudo apt install php-fpm php-mysql -y

您可能还想安装常用的 PHP 扩展以获得更广泛的应用程序兼容性:

sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -y

步骤 2:为安全性配置 PHP-FPM

打开 PHP-FPM 配置文件。将 8.1 替换为您安装的 PHP 版本(使用 php -v 检查):

sudo nano /etc/php/8.1/fpm/php.ini

找到 cgi.fix_pathinfo 指令并将其设置为 0 以防止关键安全漏洞:

cgi.fix_pathinfo=0

> 为什么这很重要: 如果 cgi.fix_pathinfo 设置为 1,当请求的 PHP 文件不存在时,PHP 将尝试执行它能找到的最近的文件。这种行为可能被攻击者利用来执行任意代码。

保存并关闭文件(Ctrl+X,然后 Y,然后 Enter)。

步骤 3:重启 PHP-FPM

通过重启 PHP-FPM 服务来应用配置更改:

sudo systemctl restart php8.1-fpm

6. 配置 Nginx 处理 PHP

默认情况下,Nginx 不知道如何处理 PHP 文件。您需要创建一个 server block(Nginx 等同于 Apache 虚拟主机),指示 Nginx 将 PHP 请求传递给 PHP-FPM 进行处理。

Step 1: 创建网站根目录

创建存储网站文件的目录:

sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

your_domain 替换为您的实际域名或描述性项目名称。

Step 2: 创建新的 Nginx Server Block

为您的网站创建新的 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/your_domain

添加以下配置块。请仔细阅读内联注释 — 它们解释了每个指令的作用:

server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;  # Replace with your domain or server IP

    root /var/www/your_domain;                # Document root — where your files live
    index index.php index.html index.htm;     # Default files to serve

    # Handle all requests; return 404 if file not found
    location / {
        try_files $uri $uri/ =404;
    }

    # Pass PHP scripts to PHP-FPM for processing
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # Adjust PHP version as needed
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Deny access to hidden files (e.g., .htaccess)
    location ~ /.ht {
        deny all;
    }
}

> 重要:your_domain 替换为您的实际域名,并调整 php8.1-fpm.sock 以匹配您安装的 PHP 版本。

Step 3: 启用 Server Block

sites-available 创建符号链接到 sites-enabled 以激活配置:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

为了避免潜在的哈希桶内存问题,最好打开主 Nginx 配置文件并确保 server_names_hash_bucket_size 指令未被注释:

sudo nano /etc/nginx/nginx.conf

查找并取消注释:

server_names_hash_bucket_size 64;

Step 4: 测试 Nginx 配置

重启 Nginx 之前,始终测试配置是否存在语法错误:

sudo nginx -t

如果输出显示:

nginx: configuration file /etc/nginx/nginx.conf test is successful

您可以继续进行。

Step 5: 重启 Nginx

通过重启 Nginx 服务来应用所有更改:

sudo systemctl restart nginx

7. 创建并测试 PHP 信息文件

要确认 Nginx 正确地将 PHP 请求传递给 PHP-FPM,请在文档根目录中创建一个简单的 PHP 测试文件。

步骤 1:创建 PHP 信息文件

sudo nano /var/www/your_domain/info.php

添加以下内容:

<?php
phpinfo();
?>

保存并关闭文件。

步骤 2:访问 PHP 信息页面

打开您的网络浏览器并导航到:

http://your_domain/info.php

或者,如果您还没有配置域名:

http://your_server_ip/info.php

您应该看到 PHP 信息页面 — 您的 PHP 安装、已加载模块、配置值和环境变量的详细概览。这确认了所有三个组件(Nginx、PHP-FPM 和 MySQL)正在正确地协同工作。

步骤 3:删除 PHP 信息文件(关键安全步骤)

确认一切正常工作后,立即删除 info.php 文件。此文件会暴露敏感的服务器配置详情,可能被恶意行为者利用:

sudo rm /var/www/your_domain/info.php

8. 后续步骤:加固和优化您的 LEMP 堆栈

LEMP 堆栈启动并运行后,请考虑以下额外步骤来为您的服务器做好生产准备:

使用免费 SSL 证书启用 HTTPS

使用 Certbot 和 Let’s Encrypt 通过 TLS/SSL 加密保护您的网站:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domain

或者,探索 AlexHost SSL 证书,获得高级商业验证证书,为业务和电子商务应用提供更高的信任级别。

优化 Nginx 性能

将以下指令添加到您的 Nginx 配置中以提高性能:

# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

设置专用 MySQL 用户

避免为您的应用程序使用 root MySQL 账户。创建一个具有有限权限的专用数据库用户:

CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

考虑使用控制面板以便于管理

如果您更喜欢使用图形界面来管理您的 LEMP 堆栈、Nginx 虚拟主机、数据库和电子邮件账户,请考虑部署控制面板。AlexHost 提供 带有 cPanel 的 VPS 和一系列其他 VPS 控制面板,以简化服务器管理,同时不牺牲性能或控制。

9. 结论

您已成功在 Ubuntu 服务器上安装和配置了完整的 LEMP 堆栈 (Linux, Nginx, MySQL, PHP)。以下是您所完成工作的快速回顾:

  • Nginx 已安装、启动并配置为您的 Web 服务器
  • MySQL 已安装并通过加固脚本进行了安全保护
  • PHP-FPM 已安装并配置了以安全为重点的配置
  • Nginx 服务器块已配置为将 PHP 请求路由到 PHP-FPM
  • PHP 处理已通过 phpinfo() 测试页面验证

此堆栈为托管几乎任何基于 PHP 的应用程序提供了生产就绪的基础 — 从 WordPress 和 Laravel 到自定义构建的平台。Nginx 的事件驱动架构与 PHP-FPM 的进程管理相结合,特别适合高并发工作负载。

为了获得最佳性能和可靠性,请在专用 Linux 环境上托管您的 LEMP 堆栈。AlexHost 的 VPS 托管计划提供 SSD 支持的存储、保证的 RAM、完全的 root 访问权限和 24/7 技术支持 — 运行快速、安全和可扩展的 Web 应用程序所需的一切。

请记住定期更新所有组件、监控服务器日志,并实施防火墙和入侵检测系统作为您持续安全态势的一部分。