1. 概述
在使用 Nginx 搭建 PHP 应用服务器时,如果配置不当,访问 PHP 文件时浏览器会提示下载,而不是执行。这是因为 Nginx 默认不处理 PHP 请求。
本文将介绍如何配置 Nginx,使其能够正确执行 PHP 文件,从而顺利运行 PHP 应用。
2. 问题原理
PHP 是一个独立于 Nginx 的程序,它与 Nginx 或 Apache 等主流 Web 服务器之间没有开箱即用的集成机制。要解决 PHP 文件被下载的问题,我们需要安装并配置 PHP-FPM(FastCGI 进程管理器),并让 Nginx 将 PHP 请求转发给 PHP-FPM 处理。
否则,Nginx 会将 PHP 文件当作静态资源(如 HTML 或 CSS)返回给客户端,从而导致文件被下载而不是执行。
3. 前置条件
在开始配置之前,请确保以下组件已安装:
✅ 安装 Nginx
$ nginx -v
nginx version: nginx/1.24.0
✅ 安装 PHP-FPM(以 Debian/Ubuntu 为例)
$ sudo apt install php-fpm
确认安装完成后,我们就可以开始配置 Nginx 与 PHP-FPM 的联动了。
4. 配置 Nginx 执行 PHP 文件
4.1. 修改 Nginx Server Block
Nginx 的配置文件通常位于 /etc/nginx/sites-available/
目录下,主配置文件名为 default
。我们在这个文件的 server
块中添加对 PHP 的支持。
默认的 server
块可能如下所示:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# other configurations
}
4.2. 添加 PHP 处理配置
使用 nano
编辑配置文件:
$ sudo nano /etc/nginx/sites-available/default
修改 index
行,加入 index.php
:
index index.php index.html index.htm;
然后在 server
块中添加如下 location
配置,以处理 .php
文件:
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
✅ 配置说明:
location ~* \.php$
:匹配所有以.php
结尾的请求,~*
表示不区分大小写的正则匹配fastcgi_index index.php
:设置默认 PHP 入口文件fastcgi_pass
:将 PHP 请求通过 Unix 套接字转发给 PHP-FPM 处理include fastcgi_params
:包含 FastCGI 必要的参数fastcgi_param SCRIPT_FILENAME ...
:指定要执行的 PHP 脚本路径fastcgi_param SCRIPT_NAME ...
:设置请求的脚本路径
修改后的完整配置如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
保存并关闭文件。
4.3. 测试与重启 Nginx
✅ 检查配置语法是否正确
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
✅ 重启 Nginx 生效配置
$ sudo systemctl restart nginx
✅ 创建测试文件 index.php
在网站根目录下创建测试文件:
<?php
phpinfo();
?>
✅ 访问测试页面
打开浏览器访问 http://localhost
,如果看到 PHP 信息页面,说明配置已成功生效 ✅
5. 小结
通过本文,我们完成了以下关键配置:
- 安装了 PHP-FPM
- 修改了 Nginx 的 server block
- 添加了处理 PHP 的 location 块
- 验证了配置的正确性
现在你的 Nginx 已能正确执行 PHP 文件,避免了“下载 PHP 文件”这类常见问题。如果你在配置过程中遇到权限或路径问题,记得检查 php-fpm.sock
文件是否存在,以及 Nginx 用户是否具有相应读写权限。