You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

验证与调试步骤

  1. 检查配置语法:执行nginx -t,确保无语法错误
  2. 重载Nginx服务:systemctl reload nginx(CentOS/RHEL)或service nginx reload(Ubuntu/Debian)
  3. 排查错误日志:执行tail -f /var/log/nginx/domain.error.log,查看是否有路径错误或PHP-FPM连接问题
  4. 验证PHP-FPM状态:执行systemctl status php7.2-fpm,确保服务正常运行
  5. 测试API请求:使用curl http://your-domain.com/v1/test-endpoint验证动态请求是否返回正确结果

内容的提问来源于stack exchange,提问作者Johann Muller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:01:12