Laravel使用Docker Compose部署搭配Nginx访问出现404错误求助
故障原因
- Nginx默认配置未加载自定义站点目录:Alpine版本的Nginx默认主配置仅引入
/etc/nginx/conf.d/*.conf目录下的配置,你同时将配置文件复制到conf.d和sites-enable目录,sites-enable目录的配置完全不会被加载,属于冗余配置,还可能引发同域名配置冲突。 - 默认配置拦截请求:Alpine的Nginx安装包默认会在
conf.d目录下生成default.conf配置,监听80端口、根目录指向/usr/share/nginx/html,优先级高于你自定义的配置,所有80端口的请求都会被默认配置拦截,返回404。 - 配置未同步生效:你本地编写的
zt.conf配置和容器内实际运行的配置不一致,说明修改本地配置后没有重新构建Nginx镜像,容器内运行的是旧版本配置。
修复方案
1. 修改Nginx Dockerfile
清理冗余配置、删除默认冲突配置,调整后内容如下:
# Use Alpine Linux FROM alpine:latest RUN apk add --update --no-cache nginx # Timezone ENV TIMEZONE Europe/Kiev # 删除默认冲突配置 RUN rm -rf /etc/nginx/conf.d/default.conf # 仅需复制到conf.d目录即可 COPY nginx/zt.conf /etc/nginx/conf.d/ RUN adduser -D -g '' -G www-data www-data RUN mkdir -p /run/nginx CMD [ "nginx", "-g", "daemon off;" ] EXPOSE 80 EXPOSE 443
2. 统一Nginx站点配置
修正docker/nginx/zt.conf的参数,确保Laravel路由规则正常生效:
server { server_name laratest.local.com; listen 80; root /var/www/public; index index.php index.html index.htm; location /storage/ { alias /var/www/storage/app/public/; autoindex off; } location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri =404; client_max_body_size 50m; fastcgi_pass php-laratest:9000; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_read_timeout 3600; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php-laratest_errors.log"; } access_log /var/log/nginx/php-laratest_service.access.log; error_log /var/log/nginx/php-laratest_service.error.log crit; location ~ /\.ht { deny all; } }
3. 重启服务生效配置
在docker-compose.yml所在目录执行以下命令,重新构建镜像并启动服务:
# 停止并删除旧容器 docker-compose down # 重新构建Nginx镜像 docker-compose build nginx-laratest # 后台启动所有服务 docker-compose up -d
4. 验证配置
进入Nginx容器确认配置正常:
# 进入Nginx容器 docker-compose exec nginx-laratest ash # 检查配置语法错误 nginx -t # 确认加载的配置符合预期 nginx -T
配置验证通过后,再次访问laratest.local.com即可正常打开站点。
内容的提问来源于stack exchange,提问作者shuba.ivan
相关产品推荐
相关产品推荐

