目录
到现在为止,我们已搭建完LEMP(Linux, Nginx, MySQL, PHP)堆栈,一个基本的网站服务器搭建完成。
使用需要的东西:
软件:Xshell。
自费购买:一台云服务器,一个域名。
系统环境:Windows 11 专业版 23H2。
Linux版本:CentOS 9
前景提要:在前文已进行了服务器购买,系统搭设,Xshell访问服务器,域名购买,域名解析,Nginx软件搭建运行,做好了域名直接访问。同时安装好MySQL。
提示:仅在CentOs 9 版本上进行过安装PHP,未验证其他版本是否安装会报错!从零搭建一个网站-云服务器Linux版——教程【带域名】————1:配置服务器环境,安装Nginx-CSDN博客
从零搭建一个网站-云服务器Linux版——2:安装服务器MySQL+报错-CSDN博客
提示:CentOs7使用yum,CentOs8可用dnf包管理。
一:进行PHP的安装配置
1:查看PHP是否安装
查询未安装,安装php需确保安装epel库,在前景中以安装,此次不再安装
2: 安装 EPEL 和 Remi 仓库
为了获取最新的 PHP 版本,建议安装 Remi 仓库。
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
3: 启用 Remi 仓库
查看可用的 PHP 模块,并启用所需版本的 Remi 仓库:
sudo dnf module list php
根据需要选择 PHP 版本,然后启用对应的模块。例如,如果你想安装 PHP 8.1,可以执行:
sudo dnf module enable php:remi-8.1
4: 安装 PHP
启用所需版本的模块后,可以安装 PHP 及常用扩展。例如,要安装 PHP 和常用扩展:
sudo dnf install php php-cli php-fpm php-mysqlnd php-pgsql php-xml php-mbstring php-curl -y
安装完验证一下
5: 启动和启用 PHP-FPM
如果你需要 PHP-FPM(FastCGI 进程管理器),可以启动并设置其开机自启:
sudo systemctl start php-fpm
启动后验证一下,然后添加到开机自启。
sudo systemctl enable php-fpm
二:进行PHP与Nginx的链接配置
首先,安装完Nginx是有一个默认html页面,但我们需要PHP后端处理访问,所以现在需要配置PHP和Nginx的链接。
配置完成后,可打开http://your_server_ip/info.php
(一):Nginx的默认的指定网站根目录。
安装完Nginx是有一个默认html页面的,在未进行更新配置前我们访问网址或者是公网ip是可以直接看到一个Nginx的欢迎页面, 介绍了你安装的Nginx的版本,但是我们可能需要更改默认目录和进行相关的配置,所以需要知道默认目录和配置文件所在。 Nginx 的默认网站目录通常位于 /usr/share/nginx/html
(二):Nginx 的配置文件
1:常见的 Nginx 配置文件
主配置文件:通常位于 /etc/nginx/nginx.conf
。
这是 Nginx 的主配置文件,其中包含全局配置和一些通用设置。
调整 server
块中的 root
指令。设置网站的根目录,配置网站访问权限等。
站点配置文件:通常位于 /etc/nginx/conf.d/
目录
或 /etc/nginx/sites-available/
和 /etc/nginx/sites-enabled/
(根据不同的 Linux 发行版和 Nginx 的安装方式可能有所不同)。这些文件用于配置特定的虚拟主机或网站。你可以在这些文件中设置每个网站的具体行为,比如根目录、日志路径和处理请求的方法。
然后打开主配置查看
可以看到默认网站根目录位于 /usr/share/nginx/html
这段配置是一个 Nginx 服务器块的示例,处理所有 HTTP 请求,指定了网站根目录和错误页面。它还包括了额外的配置文件和处理特定错误页面的方式。
Nginx 配置文件的结构通常包括以下部分:
全局设置:定义全局范围的设置,如工作进程数量和日志文件位置。
http 块:包含与 HTTP 相关的设置和配置,例如默认的 MIME 类型、日志格式和服务器块。
server 块:定义虚拟主机的配置,例如监听的端口、域名、根目录和日志路径。
location 块:定义如何处理特定路径的请求,例如静态文件、反向代理或 PHP 处理。
2:进行Nginx配置PHP
Nginx 中处理 PHP 文件需要配置 FastCGI,以便 Nginx 能够将 PHP 请求转发给 PHP-FPM(FastCGI Process Manager),添加以下配置来处理 PHP 文件,你可以在配置文件中添加 location
块。
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
或者是全段server更换为下面代码
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
其中文件意思是
location ~ \.php$
:匹配所有以 .php
结尾的请求。
fastcgi_pass 127.0.0.1:9000
:指定 FastCGI 服务器的地址和端口(PHP-FPM 通常运行在这个端口)。
include fastcgi_params
:包含 FastCGI 的参数配置文件。
完成后保存文件
3:测试和重新加载配置
在修改 Nginx 配置文件后,在重新加载 Nginx 之前,需要确保配置没有语法错误。使用以下命令测试配置文件,测试配置是否正确:
sudo nginx -t
如果测试通过,重新加载 Nginx 配置使更改生效:
sudo systemctl reload nginx
而后进行PHP文件解析
首先去默认目录/usr/share/nginx/html/下新建php文件
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
如果一切正确,在浏览器中访问 http://your_server_ip/info.php
,如果 PHP 安装正确,你将看到 PHP 的信息页面。
出现报错1:
当出现这个报错可能有两个原因,一个是你的Nginx未配置正确,第二个可能是PHP的安装或者是配置问题。需要编辑 PHP-FPM 配置文件以确保它在正确的地址和端口上监听。
先排查Nginx配置问题
通过观察Nginx主配置文件,可以发现
server_name
重复:server_name
被定义了两次。删除其中一个,确保它只定义一次。
server_name
是用来定义服务器块匹配的域名或 IP 地址的。
root
指令冲突:在 location /
和 location ~ \.php$
中都设置了 root
,可能导致问题。通常在 location ~ \.php$
中不需要 root
指令。
现在先进行修改,修改后进行测试和重新加载配置,然后再一次在网址上测试访问。
在做出任何更改后,确保重新加载或重启 Nginx 以应用新的配置:
sudo systemctl restart nginx
检查 Nginx 的日志文件
检查 Nginx 的日志文件可以提供有关配置问题的详细信息:Nginx 错误日志通常在 /var/log/nginx/error.log
可以根据日志文件判断问题所在 。
如:这次访问地址打错了就是未找到文件
[error] 701230#701230: *457 open() "/usr/share/nginx/html/infophp" failed (2: No such file or directory), client: 120.235.90.123, server: localhost, request: "GET /infophp HTTP/1.1", host:
如:报错信息显示
[error] 701230#701230: *461 connect() failed (111: Connection refused) while connecting to upstream, client: 220.196.160.117, server: localhost, request: "GET /inof.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host:
可判断是PHP未正确运行,将排查PHP-FPM 以确保它在正确的地址和端口上监听。
(三):PHP的配置文件
1: PHP 的配置文件
php的配置文件通常位于 /etc/php.ini
或 /etc/httpd/conf.d/
目录下。
运行以下命令来查看是否存在这些文件:
ls /etc/php.ini
ls /etc/httpd/conf.d/
PHP-FPM 的配置文件(通常在 /etc/php/8.x/fpm/pool.d/www.conf
,其中 7.x
是 PHP 的版本)或者是在/etc/php-fpm.d/www.conf(我的就是在这)
2:PHP-FPM 错误日志
通常在 /var/log/php8.x-fpm.log
或者是在/var/log/php-fpm/error.log (我的就是在这)
配置文件和日志文件的位置看版本,自行寻找
3:先确保PHP-fpm已安装且运行。
首先确保 PHP 和 PHP-FPM 已安装。你可以使用以下命令安装 PHP 和 PHP-FPM(以 CentOS 为例):
php -v
查看php版本
systemctl status php8.1-fpm
或者是
systemctl status php-fpm
systemctl list-units --type=service | grep php
查看PHP服务
如果都未找到PHP请进行PHP的安装
sudo yum install php php-fpm php-mysqlnd -y
4. 配置 PHP-FPM
编辑 PHP-FPM 配置文件以确保它在正确的地址和端口上监听(通常是 /etc/php-fpm.d/www.conf
)
确保www.conf文件中的listen = 127.0.0.1:9000
确保你的 Nginx 配置中的 fastcgi_pass
指令与你的 PHP-FPM 配置一致
与Nginx配置文件 /etc/nginx/nginx.conf
中的fastcgi_pass 127.0.0.1:9000相匹配。
找到www.conf文件,使用管道将其筛选出www.conf
文件中的 listen
配置
cat /etc/php-fpm.d/www.conf | grep listen
可以看到,listen=对应的是错误的。
现可通过vi工具直接替换,也可以通过sed或者是echo命令替换。
4.1使用 sed
命令替换
如果你希望使用命令行工具直接替换 listen
配置,可以使用 sed
命令
sudo sed -i 's/^listen = .*/listen = 127.0.0.1:9000/' /etc/php/8.1/fpm/pool.d/www.conf
这条命令会将 www.conf
文件中以 listen =
开头的行替换为 listen = 127.0.0.1:9000
。如果原文件中没有 listen =
行,则不会进行替换。
4.2. 使用 echo
命令添加配置
如果 www.conf
文件中没有 listen
行,可以使用 echo
命令将 listen
配置添加到文件末尾:
echo 'listen = 127.0.0.1:9000' | sudo tee -a /etc/php/8.1/fpm/pool.d/www.conf
这会将 listen = 127.0.0.1:9000
追加到文件的末尾。
确保 www.conf
文件中已正确设置 listen
行:
grep 'listen' /etc/php/8.1/fpm/pool.d/www.conf
修改配置文件后,重新加载 PHP-FPM 服务以应用更改:
sudo systemctl reload php-fpm
4.3:确保以下配置正确:
listen = 127.0.0.1:9000
listen.owner = nobody
listen.group = nobody
listen.mode = 0660
4.4启动并启用 PHP-FPM:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
(四):PHP的配置文件检查防火墙设置
如果 PHP-FPM 和 Nginx 在不同的容器或虚拟机上,确保防火墙规则允许通过端口 9000
的连接。
1. 检查当前防火墙状态
首先,检查防火墙状态和当前的规则。使用以下命令查看防火墙状态:
sudo firewall-cmd --state
如果防火墙正在运行,你将看到 running
状态。
2. 查看当前规则
查看当前防火墙规则以确定是否允许端口 9000 的连接:
sudo firewall-cmd --list-all
3. 开放端口 9000
如果端口 9000 未开放,你需要添加相应的规则。以下是如何允许端口 9000 的步骤:
对于 firewalld
(CentOS 7、8 和其他支持 firewalld
的系统)
-
开放端口 9000
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
这个命令将永久地在
public
区域中开放端口 9000。 -
重新加载防火墙配置
sudo firewall-cmd --reload
-
验证端口是否已开放
sudo firewall-cmd --list-ports
到现在为止,我们已搭建完LEMP(Linux, Nginx, MySQL, PHP)堆栈,一个基本的网站服务器搭建完成。