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

Docker+Symfony+PHP-FPM环境下Nginx下载index.php且根路径403

问题分析与解决方案

一、403 Forbidden 错误排查与修复

403错误通常是Nginx找不到默认首页或目录权限配置异常导致,按以下步骤处理:

  • 检查Nginx配置的index指令,确保包含index.php,示例:
    index index.php index.html index.htm;
    
  • 确认Nginx容器内网站根目录权限,保证Nginx进程(通常为www-data用户)拥有读取权限。可在Dockerfile中添加权限设置:
    RUN chown -R www-data:www-data /var/www/html
    
  • 核对Nginx配置的root指令,确保指向正确的项目根目录,比如项目挂载到/var/www/html,则配置应为:
    root /var/www/html;
    

二、PHP文件被下载而非执行的修复

核心原因是Nginx未配置将PHP请求转发给PHP-FPM处理,需在Nginx的server块中添加如下规则:

location ~ \.php$ {
    fastcgi_pass php:9000; # 此处名称需与docker-compose中PHP-FPM服务名一致
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

注意:fastcgi_pass后的服务名必须和docker-compose.yml里PHP服务的名称完全匹配,比如服务叫php-fpm,则改成fastcgi_pass php-fpm:9000;

三、Docker-compose配置校验

确保Nginx与PHP-FPM服务在同一网络,且项目目录挂载路径一致:

version: '3.8'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./your-project:/var/www/html
      - ./php.conf:/etc/nginx/conf.d/default.conf # 挂载自定义Nginx配置
    networks:
      - app-network

  php:
    image: php:fpm-alpine
    volumes:
      - ./your-project:/var/www/html
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
  • 两个服务必须挂载同一项目目录,路径要完全相同
  • Nginx配置中的fastcgi_pass必须使用PHP服务的名称,Docker会自动解析服务名到对应容器IP

四、验证操作

  1. 修改配置后重启容器:docker-compose down && docker-compose up -d
  2. 访问localhost:8000,检查首页是否正常加载
  3. 访问localhost:8000/index.php,确认PHP文件已被解析执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:20:49