宿主机Nginx对接Docker Compose部署Laravel出现默认欢迎页问题求助
Laravel访问显示Nginx默认页问题修复方案
1. Nginx配置修正
- 补全
server_name标识,否则Nginx会将请求分发到默认欢迎页站点 - 修正root路径指向Laravel入口目录
public,避免暴露敏感文件同时保证路由正常 - 替换
fastcgi_pass地址,宿主机Nginx需要转发请求到Docker容器内的php-fpm服务,而非宿主机不存在的php-fpm套接字 - 补全SSL证书配置,否则443端口无法正常响应HTTPS请求,也可临时改为监听80端口测试
- 建立站点配置软链到启用目录,重载Nginx生效
修正后的Nginx配置参考
# 临时用80端口测试可把下面443相关换成 listen 80; server { listen 443 ssl http2; server_name dev.mycompany.com; # 补全你的SSL证书配置 ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; index index.php index.html; error_log /var/log/nginx/dev.mycompany.com-error.log; access_log /var/log/nginx/dev.mycompany.com-access.log; # 指向Laravel的public目录 root /var/www/dev.mycompany.com/public; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # 转发到容器映射到宿主机的php-fpm端口 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } }
配置生效命令
# 建立软链启用站点 ln -s /etc/nginx/sites-available/www/dev.mycompany.com /etc/nginx/sites-enabled/ # 验证配置语法 nginx -t # 重载Nginx systemctl reload nginx
2. Docker配置修正
docker-compose.yml调整
- 给app-backend服务添加9000端口映射,让宿主机Nginx可以访问到容器内的php-fpm
- 修正build上下文路径,避免构建时找不到代码文件
- 修正拼写错误的环境变量键名
修正后的app-backend配置参考
app-backend: build: # 上下文改为Laravel代码根目录 context: /var/www/dev.mycompany.com dockerfile: Dockerfile restart: unless-stopped container_name: web-backend tty: true ports: # 映射php-fpm端口到宿主机本地 - "127.0.0.1:9000:9000" environment: SERVICE_NAME: app # 修正原来的拼写错误SERICE_TAGS => SERVICE_TAGS SERVICE_TAGS: dev working_dir: /var/www/dev.mycompany.com volumes: - /var/www/dev.mycompany.com:/var/www/dev.mycompany.com - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network
Dockerfile路径修正
原来的Dockerfile中存在路径拼写错误,把/var/www/dev.mycompany.com误写为/var/www.dev.mycompany.com,统一修正路径:
FROM php:8.0-fpm # 修正路径拼写 COPY composer.lock composer.json /var/www/dev.mycompany.com WORKDIR /var/www/dev.mycompany.com # 原有依赖安装、扩展安装、composer安装步骤不变 # 修正COPY路径拼写,删除重复的冗余COPY . /var/www 步骤 COPY --chown=www:www . /var/www/dev.mycompany.com USER www EXPOSE 9000 CMD ["php-fpm"]
目录权限修正
Laravel需要storage和bootstrap/cache目录可写,执行宿主机命令赋予对应权限:
chown -R 1000:1000 /var/www/dev.mycompany.com/storage /var/www/dev.mycompany.com/bootstrap/cache chmod -R 775 /var/www/dev.mycompany.com/storage /var/www/dev.mycompany.com/bootstrap/cache
3. 生效验证步骤
# 进入docker-compose所在目录 cd /srv # 重新构建并启动Laravel容器 docker-compose up -d --build app-backend # 验证容器正常运行 docker ps | grep web-backend # 验证9000端口正常监听 ss -tunlp | grep 9000
配置全部生效后清理浏览器缓存访问站点即可,若仍有异常查看对应日志排查:
- Nginx错误日志:
/var/log/nginx/dev.mycompany.com-error.log - Laravel运行日志:
/var/www/dev.mycompany.com/storage/logs/laravel.log - 容器运行日志:
docker logs web-backend
内容的提问来源于stack exchange,提问作者NotGael
相关产品推荐
相关产品推荐

