Docker部署PHP项目遇Nginx默认页面问题求助
解决Nginx与PHP项目文件映射的Docker配置问题
首先先回答你关心的结构问题:你的项目结构是合理的!根目录放Docker相关配置文件,application单独存业务代码,这种分离方式很清晰,后续维护Docker配置和业务代码都很方便。
接下来说说为什么会显示Nginx默认页——核心问题是Nginx没有指向你的application项目目录,而且PHP项目还需要Nginx和PHP-FPM容器联动才能解析PHP文件,光靠Nginx本身是跑不了PHP的。我给你一套完整的解决方案:
第一步:调整项目结构(新增Nginx配置目录)
先在项目根目录新建nginx/conf.d文件夹,用来存放自定义的Nginx站点配置,最终结构如下:
你的项目根目录/ ├── docker-compose.yml ├── application/(你的PHP代码) └── nginx/ └── conf.d/ └── default.conf
第二步:编写自定义Nginx配置
在nginx/conf.d/default.conf里写入以下内容,配置Nginx的根目录和PHP解析规则:
server { listen 80; server_name localhost; # 指向Nginx容器内的项目代码目录 root /usr/share/nginx/html; index index.php index.html index.htm; # 处理静态文件和路由重写 location / { try_files $uri $uri/ /index.php?$query_string; } # 配置PHP解析,转发请求到PHP-FPM容器 location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; # 这里的路径要和PHP容器内的项目映射路径一致 fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; include fastcgi_params; } }
第三步:完善docker-compose.yml配置
替换你现有的docker-compose.yml为以下内容,重点做好目录映射和服务联动:
version: '3.3' services: nginx: image: nginx:alpine ports: - "80:80" volumes: # 把本地的application目录映射到Nginx容器的站点根目录 - ./application:/usr/share/nginx/html # 用自定义配置覆盖Nginx默认的站点配置 - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf # 确保PHP服务先启动,Nginx才能正常转发请求 depends_on: - php php: # 选择和你的项目兼容的PHP-FPM版本,比如7.4-fpm-alpine(轻量镜像) image: php:7.4-fpm-alpine volumes: # 把本地application目录映射到PHP容器的工作目录 - ./application:/var/www/html
第四步:重新启动容器
先停止之前运行的容器(避免残留配置),再启动新容器:
docker-compose down docker-compose up -d
现在访问localhost应该就能看到你的PHP项目内容了!
为啥之前显示默认页?
你之前的配置大概率没做这两件事:
- 没有把
application目录正确映射到Nginx容器的站点根目录,导致Nginx还是用自带的默认欢迎页文件 - 没有覆盖Nginx的默认配置,默认配置里的根目录指向的是Nginx官方镜像自带的测试页面,而非你的项目代码
内容的提问来源于stack exchange,提问作者andershagbard
相关产品推荐
相关产品推荐

