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

Docker网络下Nginx配置求助:路由转发至Laravel与React容器

Nginx配置修正方案(Docker多容器路由场景)

你的Nginx配置存在几个关键问题,导致路由规则无法按预期生效,以下是修正方案及问题说明:

配置中的核心问题

  • proxy_pass: http://web:3000 语法错误:Nginx指令与参数之间必须用空格分隔,不能用冒号,这会直接导致Nginx解析配置失败。
  • /api 路径未适配Laravel路由逻辑:Laravel所有请求都需要通过public/index.php入口处理,原配置直接使用$fastcgi_script_name会找不到对应PHP文件,无法正确传递路由参数。

修正后的完整配置

server {
    listen 80;
    server_name localhost;

    # React容器代理配置
    location / {
        proxy_pass http://web:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Laravel容器FastCGI配置
    location ^~ /api {
        # 重写/api下的所有请求到index.php,保留原始请求参数
        rewrite ^/api/(.*)$ /index.php?$1 last;
        
        fastcgi_pass webserver:9000;
        fastcgi_index index.php;
        # 指向Laravel的入口文件(假设webserver容器内Laravel根目录为/var/www/html)
        fastcgi_param SCRIPT_FILENAME /var/www/html/public/index.php;
        # 传递完整的请求URI给Laravel路由系统
        fastcgi_param REQUEST_URI $request_uri;
        include fastcgi_params;
    }
}

关键修正点说明

  1. 修正proxy_pass语法:把冒号改为空格,确保Nginx能正确识别代理指令。
  2. 优先匹配/api路径:用^~ /api确保Nginx优先处理/api开头的请求,不会被通用的/规则覆盖。
  3. Laravel路由重写:通过rewrite规则将/api/xxx转换为/index.php?xxx,让Laravel的路由系统能正确解析请求。
  4. 指定正确的入口文件:直接指向Laravel的public/index.php,避免因路径错误导致PHP文件找不到。
  5. 添加代理头部(可选):给React代理补充Host、X-Real-IP等头部,确保前端能正确获取请求上下文信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:52:34