在服务器运维领域,构建一个稳定、高效且安全的Web服务环境是基础,基于CentOS操作系统,结合高性能的Nginx作为Web服务器和广泛使用的PHP作为脚本语言,所组成的LNMP(Linux Nginx MySQL PHP)或LEMP(E’代表Nginx的发音)架构,是部署动态网站和Web应用的主流选择之一,本文将详细介绍如何在CentOS系统上,从零开始搭建一个干净、规范的Nginx与PHP环境。
环境准备与系统更新
在开始安装任何软件之前,确保您拥有一台纯净的CentOS服务器(推荐版本为7、8或9),并具备root权限或sudo权限,首要步骤是更新系统软件包到最新状态,这可以修复已知的安全漏洞并提升系统稳定性,执行以下命令:
sudo yum update -y
为了简化初期的配置过程,可以暂时关闭防火墙和SELinux,在生产环境中,正确的做法是配置防火墙规则和SELinux策略,而非直接禁用。
sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安装与配置Nginx
Nginx以其轻量级、高并发处理能力和低内存消耗而闻名,CentOS官方源通常提供了稳定版的Nginx。
安装Nginx
使用yum包管理器可以轻松完成安装:sudo yum install nginx -y
启动与设置开机自启
安装完成后,启动Nginx服务,并将其设置为开机自动启动:sudo systemctl start nginx sudo systemctl enable nginx
验证安装
您可以通过浏览器访问服务器的公网IP地址,如果看到Nginx的默认欢迎页面,则表示Nginx已成功运行,Nginx的默认网站根目录位于/usr/share/nginx/html
,主配置文件为/etc/nginx/nginx.conf
。
安装PHP及FPM
CentOS默认源中的PHP版本可能较为陈旧,无法满足新项目的需求,我们推荐使用Remi仓库来获取最新版本的PHP。
安装EPEL和Remi仓库
sudo yum install epel-release -y sudo yum install https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm -y
启用PHP模块
假设我们要安装PHP 8.1版本,需要启用对应的模块流:sudo yum module enable php:remi-8.1 -y
安装PHP及常用扩展
Nginx通过PHP-FPM(FastCGI Process Manager)与PHP进行通信,因此php-fpm
是必装组件,安装一些常用的扩展以支持数据库、图像处理等功能:sudo yum install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json -y
启动与设置PHP-FPM开机自启
sudo systemctl start php-fpm sudo systemctl enable php-fpm
配置Nginx支持PHP
这是整个搭建过程的核心环节,需要修改Nginx的配置文件,使其能够将.php
后缀的请求转发给PHP-FPM处理。
修改虚拟主机配置
编辑Nginx的默认配置文件(或创建一个新的配置文件在/etc/nginx/conf.d/
目录下):sudo vi /etc/nginx/conf.d/default.conf
添加PHP处理逻辑
找到location
块,并添加以下内容,确保Nginx能正确解析PHP文件:server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.php index.html index.htm; location / { } # 将PHP请求传递给PHP-FPM location ~ .php$ { fastcgi_pass 127.0.0.1:9000; # PHP-FPM默认监听的地址和端口 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
重启Nginx
保存配置文件后,重启Nginx使更改生效:sudo systemctl restart nginx
测试环境
为了验证Nginx和PHP是否协同工作,可以在网站根目录创建一个PHP信息文件。
创建info.php文件
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
访问测试页面
在浏览器中访问http://<您的服务器IP>/info.php
,如果页面显示出PHP的版本信息、配置详情等,恭喜您,CentOS Nginx PHP环境已成功搭建。
安全提示:phpinfo()
函数会暴露服务器的敏感信息,测试完成后务必立即删除该文件:
sudo rm /usr/share/nginx/html/info.php
核心组件信息速查表
组件 | 主要配置文件路径 | 服务管理命令 | 默认Web根目录 |
---|---|---|---|
Nginx | /etc/nginx/nginx.conf | systemctl start/stop/restart nginx | /usr/share/nginx/html |
PHP-FPM | /etc/php-fpm.d/www.conf | systemctl start/stop/restart php-fpm | 由Nginx配置决定 |
FAQs
问题1:Nginx和PHP-FPM是如何通信的?
解答:Nginx本身不具备解析PHP代码的能力,它只是一个Web服务器,当用户请求一个PHP文件时,Nginx会将这个请求通过网关接口(Gateway Interface)转发给能够处理PHP的程序,也就是PHP-FPM,它们之间主要有两种通信方式:
- TCP Socket(网络套接字):如本文配置的
0.0.1:9000
,Nginx通过网络端口将请求发送给PHP-FPM,这种方式灵活,允许Nginx和PHP-FPM部署在不同的服务器上。 - Unix Socket:通过一个文件系统中的套接字文件(如
/run/php-fpm/www.sock
)进行通信,由于省去了网络协议栈的开销,在同一台服务器上时,Unix Socket通常比TCP Socket性能稍好。
问题2:为什么访问PHP文件时浏览器显示“502 Bad Gateway”错误?
解答:“502 Bad Gateway”错误通常意味着Nginx作为网关,无法从上游服务(即PHP-FPM)获得有效的响应,最常见的原因有以下几点:
- PHP-FPM服务未运行:这是最首要的检查点,请使用
systemctl status php-fpm
确认服务是否正在运行,如果没有,请使用systemctl start php-fpm
启动它。 :检查Nginx配置文件中 fastcgi_pass
指令指定的IP地址和端口号(或Unix Socket路径),是否与PHP-FPM实际监听的地址完全一致,PHP-FPM的监听地址可以在其配置文件/etc/php-fpm.d/www.conf
中的listen
参数找到。- 权限问题:SELinux或文件系统权限可能阻止Nginx访问PHP-FPM的socket文件或PHP文件本身,可以临时关闭SELinux进行排查,或检查相关目录和文件的权限设置。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复