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

Nginx配置React应用:仅允许单个路径可访问

实现新增域名仅访问React指定页面的Nginx配置方案

嘿,我刚好碰到过类似的需求,给你整理一个清晰的解决方案——核心思路是为新增域名单独创建一个Nginx Server块,精确放行允许的路径,拦截所有其他请求。

下面是具体的配置代码,你可以直接修改后使用:

server {
    server_name new-domain.com www.new-domain.com; # 替换成你的新增域名
    root /var/www/path/html; # 和现有React应用的根路径保持一致
    index index.html index.htm;

    # 仅允许访问 /confirm/token 及其子路径/带参数的请求
    location ~ ^/confirm/token(/.*)?$ {
        try_files $uri /index.html; # 交给React前端路由处理
    }

    # 拒绝所有其他路径的请求,返回403禁止访问
    location / {
        deny all;
        return 403;
    }

    # SSL证书配置,记得换成新域名的证书路径
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/new-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/new-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

# 可选:将HTTP请求自动重定向到HTTPS(和你现有配置风格一致)
server {
    if ($host = new-domain.com) {
        return 301 https://$host$request_uri;
    }

    if ($host = www.new-domain.com) {
        return 301 https://$host$request_uri;
    }

    server_name new-domain.com www.new-domain.com;
    listen 80;
    return 404;
}

关键配置解释:

  • server_name:明确指定这个配置块只作用于你的新增域名,避免和现有域名的配置冲突
  • location正则匹配:^/confirm/token(/.*)?$确保只有以/confirm/token开头的请求(包括带子路径、查询参数的情况,比如/confirm/token?user=123或/confirm/token/verify)会被放行
  • try_files指令:因为React是单页应用,所有路由都需要指向index.html,让前端路由来解析具体页面
  • 全局deny:除了允许的路径外,所有其他请求直接返回403,确保新增域名的访问范围严格受控

后续步骤:

  1. 用Certbot为新域名申请SSL证书:sudo certbot --nginx -d new-domain.com -d www.new-domain.com(如果还没申请的话)
  2. 检查Nginx配置语法:sudo nginx -t,确保没有错误
  3. 重启Nginx生效:sudo systemctl restart nginx
  4. 验证新域名的访问:尝试访问https://new-domain.com/confirm/token应该能正常打开React页面,访问其他路径会返回403

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:34