linux环境部署php、php-npm

文章目录

一直以为部署php很简单,实操撞的一头包,世间无易事,劝君多勉之。

部署步骤

1、安装依赖
bash 复制代码
安装epel源与remi源:
yum install epel-release -y
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y 

安装nginx和php-fpm:
yum install nginx php-fpm php-mysqlnd php-gd php-json php-mbstring php-xml php-zip -y

设置开机自启动:
systemctl start nginx php-fpm
systemctl enable nginx php-fpm
2、创建文件夹及文件

(1)创建文件夹

bash 复制代码
mkdir /data/php-demo;

(2)创建文件/data/php-demo/index.php,内容:

php 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>VSCode PHP Demo</title>
    <style>
        body { font-family: sans-serif; padding: 20px; background: #f4f4f9; }
        .card { background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
    </style>
</head>
<body>
    <div class="card">
        <h1>🚀 欢迎使用 VSCode 开发 PHP</h1>
        <p>当前服务器时间:<?php echo date('Y-m-d H:i:s'); ?></p>
        <p>你的 IP 地址是:<?php echo $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1'; ?></p>
    </div>
</body>
</html>

(3)授权

bash 复制代码
chown -R apache:apache /data/php-demo 
chmod -R 755 /data/php-demo
3、php-fpm配置

(1)vim /etc/php-fpm.d/www.conf编辑配置文件。

(2)以下配置项都要逐一核对保证正确:

配置项 推荐值 说明
user apache 保持默认即可,确保与目录属主一致
group apache 保持默认即可
listen /run/php-fpm/www.sock 使用 Socket 通信比 TCP (127.0.0.1:9000) 性能更好
listen.owner nginx 重要! 让 Nginx 用户有权访问这个 Socket
listen.group nginx 重要! 同上
security.limit_extensions .php 限制只能解析 .php 文件,防止恶意脚本执行
(3)检查并注释掉干扰项
bash 复制代码
;php_admin_value[doc_root] = ...    <-- 必须注释掉,否则路径会被锁死
;chroot = ...                       <-- 必须注释掉,除非你非常精通沙箱配置
;php_admin_value[open_basedir] = ... <-- 建议注释掉,或确保包含你的项目路径

(4)重启php-fpm服务

bash 复制代码
systemctl restart php-fpm
4、nginx配置

(1)编辑定制配置文件vim /etc/nginx/conf.d/php-demo.conf,内容为:

python 复制代码
server {
    listen       80;
    server_name  具体的服务器ip; # 替换为你的IP或域名

    root         /data/php-demo; # 网站根目录
    index        index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # PHP 解析配置
    location ~ \.php$ {
        fastcgi_pass   unix:/run/php-fpm/www.sock; # 对应 PHP-FPM 的 listen 配置
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; # 关键:传递正确路径
        include        fastcgi_params;
    }
}

(2)检查并重启nginx

bash 复制代码
nginx -t          # 检查语法
systemctl reload nginx
5、验证

浏览器输入http://具体的服务器ip/index.php,展示定制页面内容表示成功。

php-fpm文件的位置

类别 文件/目录路径 作用与说明
主配置文件 /etc/php-fpm.conf 全局配置入口。定义进程管理方式(如 pm = dynamic)、PID 文件路径、错误日志级别等基础参数。通常包含子配置目录。
进程池配置 /etc/php-fpm.d/www.conf 最核心的配置文件。定义具体服务池(如 www)的参数,包括监听地址(Socket/TCP)、运行用户/组、以及安全限制(如 security.limit_extensions)。
PHP 运行时配置 /etc/php.ini PHP 解释器的全局配置。控制脚本运行行为,如内存限制、上传大小、时区设置等。PHP-FPM 启动时会加载此文件。
全局错误日志 /var/log/php-fpm/error.log 记录 PHP-FPM 主进程的系统级事件。若服务无法启动或崩溃,首先检查此文件。
慢查询日志 /var/log/php-fpm/slow.log 记录执行时间超过阈值(request_slowlog_timeout)的脚本调用栈。用于排查性能瓶颈和代码卡顿问题。
Systemd 服务单元 /usr/lib/systemd/system/php-fpm.service 定义服务的启动命令、依赖关系及资源限制。使用 systemctl 管理服务时的依据文件。
Unix Socket 文件 /run/php-fpm/www.sock (或 /var/run/...) Nginx 与 PHP-FPM 通信的"管道"文件。Nginx 配置中的 fastcgi_pass 需指向此路径(若使用 Socket 模式)。
www.conf配置参数

php-fpm有好几个配置文件,这里说的是/etc/php-fpm.d/www.conf这个文件的配置参数。

参数名称 作用与说明
基础运行参数
user 指定 PHP-FPM 子进程运行的系统用户。通常设置为与 Web 服务器(如 Nginx 或 Apache)一致的用户,以确保对网站目录有正确的读写权限。
group 指定 PHP-FPM 子进程运行的系统用户组。
listen 设置 PHP-FPM 监听的地址。支持 TCP 地址(如 127.0.0.1:9000)或 Unix 域套接字路径(如 /run/php-fpm/www.sock)。Unix Socket 在同机通信时性能更优。
listen.owner / listen.group 当使用 Unix Socket 通信时,设置该套接字文件的属主和属组。必须与 Web 服务器(如 Nginx)的运行用户保持一致,否则会导致 502 Bad Gateway 错误。
进程池管理参数 (pm)
pm 设置进程管理器的模式。可选值:static(固定数量的子进程)、dynamic(根据负载动态调整子进程数量)、ondemand(按需启动子进程,适合低流量站点)。
pm.max_children 允许同时存活的最大子进程数。用于控制并发处理能力,防止服务器资源(如内存)被耗尽。
pm.start_servers 仅在 dynamic 模式下生效。设置 PHP-FPM 启动时初始创建的子进程数量。
pm.min_spare_servers 仅在 dynamic 模式下生效。保证系统中空闲子进程的最小数量。若低于此值,主进程会自动创建新子进程。
pm.max_spare_servers 仅在 dynamic 模式下生效。保证系统中空闲子进程的最大数量。若高于此值,主进程会自动清理多余的子进程。
pm.max_requests 设置每个子进程在被回收并重启之前所能处理的最大请求数。常用于防止第三方模块导致的内存泄漏问题,设为 0 表示不限制。
请求控制与安全参数
request_terminate_timeout 设置单个请求的最大执行时间(秒)。超时后该请求将被强制终止,常用于防止长时间运行的脚本阻塞进程或导致 502 错误。
request_slowlog_timeout 设置慢日志记录的超时阈值。当请求执行时间超过此值时,PHP-FPM 会将该请求的调用栈记录到慢日志中,用于排查性能瓶颈。
slowlog 指定慢请求日志文件的存放路径。需与 request_slowlog_timeout 配合使用。
security.limit_extensions 安全限制参数。限制 PHP-FPM 仅允许解析指定后缀的文件(如 .php),以防止恶意文件被当作 PHP 脚本执行。
catch_workers_output 设置是否捕获子进程的标准输出和错误输出。设为 yes 时,PHP 脚本中的 echo 或报错信息会被重定向到 PHP-FPM 的错误日志中,便于调试。
PHP 运行时覆盖参数
php_admin_value 为当前进程池设置 PHP 配置项(如 open_basedirsendmail_path)。此设置会强制覆盖全局 php.ini 中的对应值,且无法被 PHP 脚本中的 ini_set() 函数修改。
php_admin_flag php_admin_value 类似,但专门用于设置布尔类型的 PHP 配置项(如 log_errors = ondisplay_errors = off)。
相关推荐
withoutfear2 小时前
PHP验证是不是真实手机号
php·手机号真实性·验证手机号
草莓熊Lotso2 小时前
【Linux网络】深入理解 HTTP 协议(四):完善 C++ HTTP 服务器:从协议原理到生产级实现
linux·运维·服务器·c语言·网络·c++·http
sulikey2 小时前
个人Linux操作系统学习笔记7 - 进程理解
linux·笔记·学习·操作系统·进程·pid
在水一缸2 小时前
警惕供应链陷阱:从 Red Hat npm 恶意包事件看依赖安全防护
前端·安全·npm·供应链安全·red hat·恶意包·依赖安全
cq林志炫2 小时前
fastadmin 如何限制访问public\assets\libs目录下面的所有html文件
html·php·fastadmin
兔老大RabbitMQ2 小时前
涉及泛型的强制转换
linux·windows·microsoft
老约家的可汗2 小时前
Linux中yum、vim和gcc
linux·运维·vim
Anthony_2312 小时前
Linux 从基础操作到故障排查
linux·运维·服务器·网络·nginx·ubuntu·centos
chushiyunen2 小时前
thinkphp框架的使用
php