php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】
技术百科
蓮花仙者
发布时间:2026-01-01
浏览: 次 应先确认系统类型再配置PHP环境:CentOS/RHEL需添加Remi源启用PHP 8.2,Ubuntu/Debian需启用universe源;LNMP必须用php-fpm而非mod_php;Nginx需正确配置fastcgi_pass并验证php-fpm运行状态;注意MySQL用户权限、扩展加载及SELinux等权限问题。
确认 Linux 发行版和软件源状态
不同发行版的包管理器和默认仓库内容差异很大,直接 yum install php 或 apt install php 可能装到过时版本(如 PHP 7.4),甚至缺关键模块(如 php-fpm、php-mysqlnd)。务必先查清系统类型:
cat /etc/os-release。CentOS/RHEL 8+ 默认用
dnf,且官方源已移除 PHP;Ubuntu 22.04 默认带 PHP 8.1,但扩展需单独安装。
- Debian/Ubuntu:确保启用
universe源(/etc/apt/sources.list中含deb http://archive.ubuntu.com/ubuntu jammy universe) - CentOS Stream / Rocky Linux:必须添加 Remi 仓库(
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm),再启用 PHP 8.2 模块:dnf module enable php:remi-8.2 - 跳过 EPEL 单独装 PHP —— 它不提供主 PHP 包,只补工具类扩展
安装 Nginx + PHP-FPM 而非 mod_php
LNMP 中 PHP 必须以 php-fpm 方式运行,Nginx 本身不解析 PHP 文件。装错成 Apache 的 libapache2-mod-php 或 Nginx 的 php-cgi(已废弃)会导致 502 Bad Gateway 或 404。
- 安装命令示例(Ubuntu 22.04):
apt install nginx php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip - 关键配置文件路径:
/etc/php/8.1/fpm/pool.d/www.conf(监听套接字或端口)、/etc/nginx/sites-enabled/default(Nginx 需 proxy_pass 到unix:/run/php/php8.1-fpm.sock或127.0.0.1:9000) - 务必检查
php-fpm是否启用并运行:systemctl is-enabled php8.1-fpm和systemctl status php8.1-fpm,否则 Nginx 请求会超时
验证 PHP 是否被 Nginx 正确调用
常见错误是 Nginx 配置里漏了 fastcgi_pass,或 fastcgi_param SCRIPT_FILENAME 指向错误路径,导致返回空白页或直接下载 .php 文件。
- 在
/var/www/html/info.php写: - Nginx server 块中必须包含:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } - 若看到下载
info.php,说明 Nginx 根本没把请求交给 PHP-FPM —— 检查location是否被
更宽泛的规则(如 location /)覆盖,或fastcgi_pass地址与php-fpm实际监听地址不一致
MySQL 连接权限与 PHP 扩展加载问题
PHP 脚本能跑 phpinfo() 不代表能连数据库。两个高频断点:MySQL 用户未授权远程(或 localhost)访问,以及 mysqli 或 pdo_mysql 扩展未启用。
- 检查扩展是否加载:
php -m | grep -E 'mysqli|pdo_mysql';若无输出,编辑/etc/php/8.1/fpm/php.ini,取消注释extension=mysqli和extension=pdo_mysql,然后重启php8.1-fpm - MySQL 创建用户时别用
'user'@'%'就完事 —— 若 PHP-FPM 与 MySQL 同机,Nginx 传来的连接常是localhost,需显式建'user'@'localhost'并GRANT权限 -
mysqli_connect()报错Connection refused:优先查mysql.service是否运行,再查bind-address是否设为127.0.0.1(而非0.0.0.0或注释掉)
root 目录权限、PHP-FPM 的 user/group(默认 www-data 或 nginx)、SELinux 策略(RHEL 系默认开启)——这三个地方出问题,比 PHP 语法错误更难定位。
# 加载
# 它不
# 重启
# 这三个
# 而非
# 设为
# 工具
# https
# linux
# centos
# 端口
# ubuntu
# default
# http
# debian
# cURL
# html
# xml
# 数据库
# 报错
# var
# php
# php8
# mysql
# apache
# nginx
# 管理器
# CGI
# location
# unix
# mysqli
# 发行版
# gateway
# 不代表
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用Golang实现容器自动化运维_Golan
- php怎么下载安装并配置环境变量_命令行调用PHP
- PHP主流架构如何处理会话管理_Session与C
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- Mac版Final Cut Pro入门_Mac视频
- Win10怎样设置多显示器_Win10多显示器扩展
- Win11怎么设置单手模式_Win11触控键盘布局
- mac怎么退出id_MAC退出iCloud账号与A
- 如何在 Go 中创建包含 map 的 slice(
- Win11麦克风没声音怎么设置_Win11麦克风权
- Win11怎么关闭粘滞键_彻底禁用Windows
- C++中的协变与逆变是什么?C++函数指针与返回类
- c++怎么处理多线程死锁_c++ lock_gua
- Win11怎么更改鼠标指针_Windows 11自
- Win10怎么限制单程序CPU占用上限_Win10
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Win11怎么查看wifi信号强度_检测Windo
- Win11怎么开启游戏模式_Win11优化游戏帧数
- 如何在 Go 中正确反序列化 XML 多节点数组(
- php中::能用于接口静态方法吗_接口静态方法调用
- Python路径拼接规范_跨平台处理说明【指导】
- Python文件操作优化_大文件与流处理解析【教程
- Win11怎么设置默认终端应用_Windows11
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- Win11怎么更改管理员名字 Win11修改账户名
- 如何在Golang中使用time处理时间_Gola
- Win11怎么设置默认PDF阅读器 Win11修改
- 如何将文本文件中的竖排字符串转换为横排字符串
- Win11怎么设置默认邮件客户端 Win11修改M
- 如何在 Go 中调用动态链接库(.so)中的函数
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- Linux怎么设置磁盘配额_Linux系统Quot
- Python类装饰器使用_元编程解析【教程】
- Windows蓝屏错误0x00000018怎么处理
- php订单日志怎么记录物流_php记录订单物流变更
- Python网络日志追踪_请求定位解析【教程】
- Win10系统更新错误0x80240034怎么办
- Win11如何设置开机自动联网 Win11宽带连接
- Windows如何拦截腾讯视频广告_Windows
- Windows怎样关闭开始菜单推荐广告_Windo
- Go 中 defer 语句在 goroutine
- Win11开机速度慢怎么优化_Win11系统启动加
- Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺
- Win11输入法切换快捷键怎么改_Windows
- c++20的std::format怎么用 比pri
- Python生成器表达式内存优化_惰性计算说明【指
- 如何高效删除 NumPy 二维数组中所有元素相同的
- Win11怎么开启专注模式_Windows11时钟
- Mac的“调度中心”与“空间”怎么用_Mac多桌面
- C++中引用和指针有什么区别?(代码说明)

更宽泛的规则(如
QQ客服