Nginx配置异常:/client路径无法访问React应用,仅跳转代理服务
问题分析与解决方案
你的问题出在两个核心点:Nginx配置的语法错误,以及/client路径的资源定位逻辑错误,导致请求被错误转发到代理服务。
1. 修复语法错误
你的SSL server块中server_name domain.com末尾缺少分号,这会导致Nginx无法正确解析整个server配置,进而使得location /client的规则无法生效,所有请求默认匹配到location /的代理规则。
修正后:
server_name domain.com;
2. 修正/client路径的资源定位
当前location /client使用root /app/build/时,Nginx会将请求路径直接拼接在root目录后。比如访问/client,Nginx会尝试查找/app/build/client/index.html,但你的React打包文件实际在/app/build/目录下,所以找不到资源,触发try_files最后一项/index.html,而这个路径又会匹配到location /的代理规则,最终跳转到PHP服务。
正确的做法是使用alias替代root,同时调整try_files的最终 fallback 路径(匹配React的basename配置):
location /client { alias /app/build/; index index.html index.htm; try_files $uri $uri/ /client/index.html; }
配置说明:
alias /app/build/:将/client开头的请求路径映射到/app/build/目录,比如/client/static/js/main.js会指向/app/build/static/js/main.js,完全匹配React打包后的文件结构。try_files $uri $uri/ /client/index.html:当请求的文件或目录不存在时, fallback 到/client/index.html,符合React单页应用的路由规则,同时匹配你设置的basename: "/client"。
验证与重载配置
- 先检查配置语法是否正确:
nginx -t
- 如果语法无错误,重载Nginx配置:
nginx -s reload
完成以上修改后,/client路径会正确加载本地React应用,根路径/则代理到内部PHP服务。
内容的提问来源于stack exchange,提问作者RaduGabor
相关产品推荐
相关产品推荐

