
本文旨在指导开发者如何在 Nginx 环境下,通过 PHP-FPM 正确配置 Laravel 应用,使其能够解析 PHP 文件。文章将详细介绍配置 Nginx 的关键步骤,并提供示例代码,帮助开发者解决在 Nginx 中部署 Laravel 应用时遇到的 PHP 文件解析问题,确保应用能够正常运行。
在使用 Nginx 部署 Laravel 应用时,一个常见的需求是将特定路径(例如 /api)指向 Laravel 应用,而保持其他路径指向其他服务(例如 React 应用)。 当配置不正确时,可能会出现 Nginx 无法正确解析 PHP 文件,导致在浏览器中直接显示 PHP 代码而不是执行结果。以下是如何解决此问题的详细步骤。
确保已安装 PHP-FPM
PHP-FPM(FastCGI Process Manager)是用于处理 PHP 请求的进程管理器。 确保你的服务器上已经安装了 PHP-FPM,并且版本与你的 Laravel 应用兼容。你可以使用以下命令安装 PHP-FPM,具体版本号根据你的 PHP 版本进行调整:
sudo apt-get update sudo apt-get install php8.1-fpm # 示例:安装 PHP 8.1 的 PHP-FPM
安装完成后,启动 PHP-FPM 服务:
立即学习“PHP免费学习笔记(深入)”;
sudo systemctl start php8.1-fpm # 示例:启动 PHP 8.1 的 PHP-FPM sudo systemctl enable php8.1-fpm # 设置开机自启
配置 Nginx
接下来,需要配置 Nginx 以将特定路径的请求转发到 PHP-FPM。编辑 Nginx 的配置文件(通常位于 /etc/nginx/sites-available/ 目录下),找到与你的 Laravel 应用相关的 server 块。
假设你希望将 /api 路径指向 Laravel 应用,以下是一个示例配置:
乐彼多用户商城系统,采用ASP.NET分层技术和AJAX技术,运营于高速稳定的微软.NET+MSSQL 2005平台;完全具备搭建超大型网络购物多用户网上商城的整体技术框架和应用层次LBMall 秉承乐彼软件优秀品质,后台人性化设计,管理窗口识别客户端分辨率自动调整,独立配置的菜单操作锁,使管理操作简单便捷。待办事项1、新订单、支付、付款、短信提醒2、每5分钟自动读取3、新事项声音提醒 店铺管理1
server {
listen 80;
server_name domain.com;
root /var/www/app; # React 应用的根目录
index index.html;
location /api {
alias /var/www/api/public/; # Laravel 应用的 public 目录
try_files $uri $uri/ /api/index.php?$query_string;
location ~ \.php$ {
#root /var/www/api/public; # 注释掉,因为已经在 location /api 中定义了 alias
include snippets/fastcgi-php.conf; # 包含 PHP-FPM 的通用配置
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 指定 PHP-FPM 的 socket 文件路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location / {
# React 应用的配置
try_files $uri $uri/ =404;
}
}配置详解:
-
location /api: 定义了处理 /api 路径的规则。
- alias /var/www/api/public/:指定 Laravel 应用的 public 目录为 /api 的根目录。
- try_files $uri $uri/ /api/index.php?$query_string;:尝试查找请求的 URI 作为文件或目录。如果找不到,则将请求重定向到 Laravel 的入口文件 index.php,并传递查询字符串。
-
location ~ \.php$: 定义了处理 PHP 文件的规则。
- include snippets/fastcgi-php.conf;:包含 Nginx 提供的 PHP-FPM 通用配置,其中包含一些常用的 fastcgi_param 设置。
- fastcgi_pass unix:/run/php/php8.1-fpm.sock;:指定 PHP-FPM 的 socket 文件路径。请根据你的 PHP-FPM 版本和配置进行调整。可以使用 ps aux | grep php-fpm 查找 socket 文件路径。
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;:设置 SCRIPT_FILENAME 参数,告诉 PHP-FPM 要执行的 PHP 文件路径。 $document_root 是 Nginx 的根目录,$fastcgi_script_name 是请求的 PHP 文件名。
- location /: 定义了处理根目录的规则,此处配置为React应用。
注意事项:
- 确保 fastcgi_pass 指向正确的 PHP-FPM socket 文件路径。
- 根据你的 PHP 版本调整 PHP-FPM 的配置和 socket 文件路径。
- 检查文件和目录权限,确保 Nginx 和 PHP-FPM 进程有权访问 Laravel 应用的文件。
重启 Nginx 和 PHP-FPM
完成配置后,保存文件并重启 Nginx 和 PHP-FPM 服务:
sudo nginx -t # 测试配置是否正确 sudo systemctl restart nginx sudo systemctl restart php8.1-fpm # 示例:重启 PHP 8.1 的 PHP-FPM
测试配置
现在,你可以通过访问 domain.com/api 来测试 Laravel 应用是否能够正确解析 PHP 文件。 如果一切配置正确,你应该能够看到 Laravel 应用的页面。
总结
通过以上步骤,你应该能够成功配置 Nginx 和 PHP-FPM,使 Laravel 应用能够正确解析 PHP 文件,并与其他服务(例如 React 应用)共存。 请务必根据你的实际环境和 PHP 版本调整配置,并确保文件和目录权限正确。










