Save 15% on All Hosting Services

测试技能,享折扣

使用代码: Skills 开始使用
China
01.11.2024

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

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

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

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

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

1. 先决条件

在开始之前,请确保您具备以下条件:

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

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

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

您应该看到输出表示服务是 active (running)。您也可以打开网络浏览器并导航到您的服务器 IP 地址:

http://your_server_ip

如果 Nginx 正确运行,您将看到默认的 “Welcome to 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 安装

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

sudo mysql_secure_installation

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

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

步骤 3:验证 MySQL 正在运行

sudo systemctl status mysql

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

sudo mysql -u root -p

出现提示时输入您的 root 密码。键入 exit 以离开 MySQL shell。

5. 安装 PHP

PHP(超文本预处理器)是处理动态内容并与 MySQL 通信以提供数据驱动网页的服务器端脚本语言。使用 Nginx 时,PHP 通过 PHP-FPM(FastCGI 进程管理器)处理,它独立于网络服务器处理 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 进行处理。

步骤 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 替换为您的实际域名或描述性项目名称。

步骤 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 版本。

步骤 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;

步骤 4:测试 Nginx 配置

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

sudo nginx -t

如果输出显示:

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

您可以继续。

步骤 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 提供<a href="/zh/vps/control-panels/cpanel-vps/" class="

Save 15% on All Hosting Services

测试技能,享折扣

使用代码: Skills 开始使用