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; } }
关键修正点说明
- 修正proxy_pass语法:把冒号改为空格,确保Nginx能正确识别代理指令。
- 优先匹配/api路径:用
^~ /api确保Nginx优先处理/api开头的请求,不会被通用的/规则覆盖。 - Laravel路由重写:通过
rewrite规则将/api/xxx转换为/index.php?xxx,让Laravel的路由系统能正确解析请求。 - 指定正确的入口文件:直接指向Laravel的
public/index.php,避免因路径错误导致PHP文件找不到。 - 添加代理头部(可选):给React代理补充
Host、X-Real-IP等头部,确保前端能正确获取请求上下文信息。
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

