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,确保新增域名的访问范围严格受控
后续步骤:
- 用Certbot为新域名申请SSL证书:
sudo certbot --nginx -d new-domain.com -d www.new-domain.com(如果还没申请的话) - 检查Nginx配置语法:
sudo nginx -t,确保没有错误 - 重启Nginx生效:
sudo systemctl restart nginx - 验证新域名的访问:尝试访问
https://new-domain.com/confirm/token应该能正常打开React页面,访问其他路径会返回403
内容的提问来源于stack exchange,提问作者shachaf zilberman
相关产品推荐
相关产品推荐

