如何在Ubuntu上使用LNMP运行PHP项目
在 Ubuntu 上使用 LNMP 运行 PHP 项目的实操指南

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
一 环境准备与组件安装
万事开头先打基础。以主流的 Ubuntu 20.04/22.04/24.04 为例,系统仓库通常提供 PHP 8.1/8.2/8.3 等版本。咱们先从最核心的组件装起。
- 更新索引并安装组件:
- 安装 Nginx、MySQL、PHP-FPM 与常用扩展:
sudo apt updatesudo apt install -y nginx mysql-server php-fpm php-mysql
- 启动并设为开机自启:
sudo systemctl enable --now nginx mysql php-fpm
- 运行 MySQL 安全初始化:
sudo mysql_secure_installation
- 安装 Nginx、MySQL、PHP-FPM 与常用扩展:
- 如需指定或安装更高版本 PHP(以 PHP 8.1 为例):
sudo add-apt-repository ppa:ondrej/phpsudo apt updatesudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-{mbstring,xml,zip,gd,curl,intl,opcache}
二 配置 Nginx 与 PHP-FPM
组件齐了,接下来就是让它们“认识”并协同工作。这一步配置对了,项目就跑起来一半。
- 创建项目站点配置(示例域名或 IP 为 your_domain_or_ip,项目路径为 /var/www/your_project/public):
sudo nano /etc/nginx/sites-a vailable/your_project- 写入以下内容(注意将 phpX.X-fpm.sock 替换为实际版本,如 php8.1-fpm.sock):
server { listen 80; server_name your_domain_or_ip; root /var/www/your_project/public; 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/phpX.X-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } } - 启用站点并测试配置:
sudo ln -s /etc/nginx/sites-a vailable/your_project /etc/nginx/sites-enabled/sudo nginx -t && sudo systemctl reload nginx
- 调整 PHP-FPM 运行用户与权限(确保与 Nginx 一致,通常为 www-data):
- 编辑:
/etc/php/8.1/fpm/pool.d/www.conflisten.owner = www-datalisten.group = www-datalisten.mode = 0660
- 重启 PHP-FPM:
sudo systemctl restart php8.1-fpm
- 编辑:
- 目录与权限:
sudo chown -R www-data:www-data /var/www/your_projectsudo find /var/www/your_project -type f -exec chmod 644 {} \;sudo find /var/www/your_project -type d -exec chmod 755 {} \;
三 数据库与项目部署
环境就绪,是时候把数据和代码放进去了。数据库和应用配置是项目运行的“大脑”和“躯体”。
- 创建数据库与用户(在 MySQL 中执行):
CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER ‘your_user’@‘localhost’ IDENTIFIED BY ‘StrongPassword!’;GRANT ALL PRIVILEGES ON your_database.* TO ‘your_user’@‘localhost’;FLUSH PRIVILEGES;EXIT;
- 导入数据(如有):
mysql -u your_user -p your_database < your_database_dump.sql
- 部署代码与配置应用:
- 将项目代码上传至
/var/www/your_project(框架如 Lara vel 应将入口置于 public/,并设置 .env 数据库连接) - 如框架需写入目录,确保相应目录对 www-data 可写(例如 storage、cache)
- 将项目代码上传至
四 测试与常见问题排查
部署完成,先别急着庆祝,跑个测试看看。遇到问题也别慌,大部分都有迹可循。
- 基础连通性测试:
- 在
/var/www/html/info.php写入: - 访问
https://your_domain_or_ip/info.php,确认 PHP 解析正常
- 在
- 常见问题速查:
- 502 Bad Gateway:多为 PHP-FPM 未运行或 fastcgi_pass 路径不匹配;执行
systemctl status php8.1-fpm查看,核对 socket 路径(/var/run/php/php8.1-fpm.sock或/run/php/php8.1-fpm.sock) - 403 Forbidden:目录无索引文件或权限不足;检查 root 路径、index 指令与目录权限
- 404 Not Found(路由不生效):确保 Nginx 配置包含
try_files $uri $uri/ /index.php?$query_string; - 日志定位:
- Nginx:
/var/log/nginx/error.log - PHP-FPM:
/var/log/php8.1-fpm.log(或/var/log/php-fpm.log,视版本与系统而定)
- Nginx:
- 502 Bad Gateway:多为 PHP-FPM 未运行或 fastcgi_pass 路径不匹配;执行
五 安全与优化建议
项目能跑只是第一步,跑得稳、跑得安全才是长久之计。这里有几个关键点值得注意。
- 启用 HTTPS(Let’s Encrypt):
sudo apt install -y certbot python3-certbot-nginxsudo certbot --nginx -d your_domain
- 防火墙放行:
sudo ufw allow ‘Nginx Full’sudo ufw enable
- PHP 与性能:
- 在 php.ini 中设置:
date.timezone = Asia/Shanghaiopcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000
- 按需安装扩展:php-mbstring、php-xml、php-zip、php-gd、php-curl、php-intl 等
- 在 php.ini 中设置:
- 安全加固:
- 删除或限制 info.php 在生产环境访问
- 使用强数据库与系统用户密码,限制数据库远程访问
- 定期更新系统与软件包:
sudo apt update && sudo apt upgrade
相关攻略
Ubuntu 20 04 上安装 Python 3 10 并实现多版本共存与切换 在 Ubuntu 20 04 上,系统默认的 Python 3 版本是 3 8。如果你因为项目依赖或开发需求,必须使用 Python 3 10,同时又不想破坏系统原有的 Python 环境,该怎么办? 答案是:通过社区
在Ubuntu系统中,保护数据安全有多种途径,其中文件系统加密是相当可靠的一环。无论是想加密整个磁盘、某个分区,还是仅仅保护某个敏感文件夹,都有对应的成熟方案可供选择。下面就来梳理几种常用的加密技巧,你可以根据实际的安全需求灵活选择。 使用dm-crypt LUKS加密磁盘或分区 对于整块磁盘或独立
在Ubuntu系统上使用SecureCRT进行加密数据传输 在远程管理Ubuntu服务器时,数据安全是首要考虑的问题。SecureCRT通过SSH(Secure Shell)协议,在客户端与服务器之间构建了一条加密隧道,确保传输过程中的命令、文件乃至每一次击键都不会被窃听或篡改。下面,我们就来梳理一
检测Ubuntu系统中的Exploit漏洞:一份实战指南 面对潜在的安全威胁,主动出击远比被动响应有效。如何系统性地检测Ubuntu系统中的Exploit漏洞?关键在于构建一个多层次、常态化的防御与检测体系。下面这份融合了工具、策略与最佳实践的指南,或许能为你提供清晰的路线图。 安全更新和补丁管理
防范Ubuntu系统被Exploit攻击,可以采取以下措施 话说回来,安全从来不是一劳永逸的事,而是一个持续加固的过程。对于Ubuntu系统而言,一套组合拳式的防御策略,往往比单一手段更有效。下面这十个关键步骤,可以说是构建系统安全防线的基石。 1 保持系统和软件更新 定期更新:这几乎是安全领域的
热门专题
热门推荐
Llama中文社区是什么 提起近年来火热的大语言模型,Meta的Llama系列无疑是开源领域的明星。但一个绕不开的问题是:如何让这些“国际范儿”的模型,更好地理解和使用中文?这恰恰是Llama中文社区诞生的初衷。简单来说,它是由LlamaFamily打造的一个高级技术社区,核心目标非常聚焦:致力于对
Tech Talent AI Sourcing是什么 简单来说,Tech Talent AI Sourcing 是摆在技术招聘领域的一个“效率翻跟斗”。由TalentSight开发的这款AI招聘工具,核心目标很明确:帮助招聘团队,尤其是那些在IT人才红海里“淘金”的团队,更快、更准地锁定对的人。它的
在CentOS系统上防止SFTP被攻击的配置与加固指南 对于依赖SFTP进行文件传输的CentOS服务器而言,安全配置绝非小事。攻击者一旦找到入口,数据泄露和系统失陷的风险便会急剧上升。别担心,通过一系列系统性的配置和加固措施,我们可以为SFTP服务构筑起坚实的防线。下面这份实操指南,将带你一步步完
在Linux里记事本软件如何进行文件加密 很多刚接触Linux的朋友可能会发现,系统自带的记事本类软件(比如gedit)并没有一个直接的“加密”按钮。这其实很正常,因为Linux的设计哲学更倾向于“一个工具做好一件事”。不过别担心,虽然记事本本身不内置加密,但我们可以借助几个强大且成熟的外部工具,轻
Debian分区加密全攻略:LUKS与LVM两种方案深度解析 在数据安全日益重要的今天,为Debian系统分区实施加密已成为系统管理员和资深用户的必备技能。本文将详细对比两种主流的Debian分区加密方法,帮助您根据实际需求选择最佳方案。下图直观展示了两种方案的核心流程与关系: 接下来,我们将深入剖





