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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:02