Nginx 1.14.2配置版本化PHP API及静态资源遇404错误求助
Nginx 1.14.2 PHP API配置修复方案
问题根源分析
你的配置核心问题在于root指令的使用逻辑错误:
- 当
location /v1搭配root /var/www/domain/v1/public时,Nginx会尝试在/var/www/domain/v1/public/v1/路径下查找文件,但实际前端控制器index.php存放在/var/www/domain/v1/public/,路径不匹配直接导致404 /media配置同理,会错误地去/var/www/domain/media/media/目录下查找静态文件,与实际存储路径不符
正确配置示例
以下是适配你目录结构的完整可运行配置:
server { listen 80; server_name your-domain.com; # 替换为你的实际域名 access_log /var/log/nginx/domain.access.log; error_log /var/log/nginx/domain.error.log; # 静态图片文件配置 location /media/ { alias /var/www/domain/media/; expires 30d; # 可选:设置静态文件缓存有效期,优化加载速度 try_files $uri =404; } # v1版本API配置 location /v1/ { alias /var/www/domain/v1/public/; try_files $uri $uri/ /v1/index.php?$query_string; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.2-fpm.sock; # 根据你的PHP版本调整套接字路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } # v2版本API配置 location /v2/ { alias /var/www/domain/v2/public/; try_files $uri $uri/ /v2/index.php?$query_string; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.2-fpm.sock; # 同上,匹配你的PHP-FPM配置 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } }
关键配置说明
- 使用
alias替代root:当location路径与实际物理目录路径不一致时,alias会直接将请求映射到指定目录,避免root自动拼接路径导致的错误 try_files规则调整:当请求的静态文件不存在时,自动转发到对应版本的前端控制器(如/v1/index.php),确保所有动态API请求都能被PHP处理- FastCGI参数校验:
SCRIPT_FILENAME必须指向真实的PHP文件路径,fastcgi_pass需匹配你的PHP-FPM运行方式(unix套接字或TCP端口,例如127.0.0.1:9000)
验证与调试步骤
- 检查配置语法:执行
nginx -t,确保无语法错误 - 重载Nginx服务:
systemctl reload nginx(CentOS/RHEL)或service nginx reload(Ubuntu/Debian) - 排查错误日志:执行
tail -f /var/log/nginx/domain.error.log,查看是否有路径错误或PHP-FPM连接问题 - 验证PHP-FPM状态:执行
systemctl status php7.2-fpm,确保服务正常运行 - 测试API请求:使用
curl http://your-domain.com/v1/test-endpoint验证动态请求是否返回正确结果
内容的提问来源于stack exchange,提问作者Johann Muller
相关产品推荐
相关产品推荐

