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

ReactJS部署Nginx环境下直接访问特定URL路径出现404 Not Found问题求助

解决React SPA直接访问子路径返回404的问题

我之前部署React应用时也碰到过完全一样的问题,这其实是单页应用(SPA)的典型路由问题,咱们一步步来解决:

问题原因

你的React应用是单页应用,所有路由逻辑都在客户端浏览器里处理。从主页点击跳转时,是React的客户端路由在工作,不会向Nginx发起新的页面请求;但直接在地址栏输入example.com/admin/login或刷新页面时,浏览器会向Nginx发起请求,Nginx会去服务器的/home/ubuntu/app-deploy/build目录下找admin/login这个文件/文件夹——显然它不存在,所以返回404。而npm start用的React开发服务器会自动把所有路由请求转发到index.html,因此不会出现这个问题。

解决方案:修改Nginx配置

你只需要修改Nginx配置里的location /块,让Nginx在找不到对应文件时,自动把请求转发到index.html,交给React客户端路由处理。

修改后的完整配置如下:

server {
    server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 为示例IP
    root /home/ubuntu/app-deploy/build;
    index index.html; # React默认将构建文件生成在build目录

    location / {
        # 关键修改:找不到文件时转发到index.html
        try_files $uri $uri/ /index.html;
    }

    listen 443 ssl; # 由Certbot管理
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 由Certbot管理
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 由Certbot管理
    include /etc/letsencrypt/options-ssl-nginx.conf; # 由Certbot管理
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 由Certbot管理
}

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # 由Certbot管理

    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # 由Certbot管理

    listen 80;
    server_name 1.1.1.1 example.com www.example.com; # 1.1.1.1 为示例IP
    return 404; # 由Certbot管理
}

验证和重启

  1. 先测试修改后的配置是否合法:
sudo nginx -t

如果输出syntax is ok和test is successful就没问题。

  1. 重启Nginx让配置生效:
sudo systemctl restart nginx

现在再直接访问example.com/admin/login或任意子路径,就能正常加载页面,由React客户端路由处理了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:47:46