当你在Nginx中配置React项目遇到404错误时,通常是由于路由或静态文件服务配置不当导致的。以下是几种常见原因及解决方案:
确保你的Nginx配置中已经正确指定了React项目的构建目录:
server {
listen 80;
server_name yourdomain.com;
root /path/to/your/react/build;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
关键点:
- root
指向React项目build后的目录
- try_files
确保所有路由都回退到index.html
React使用客户端路由(如React Router)时,需要确保Nginx将所有非静态资源请求重定向到index.html:
location / {
try_files $uri $uri/ /index.html;
}
如果静态资源(JS/CSS文件)报404,检查:
location /static/ {
alias /path/to/your/react/build/static/;
expires 1y;
access_log off;
add_header Cache-Control "public";
}
如果你的React应用需要访问后端API,需要配置代理:
location /api/ {
proxy_pass http://backend-server:port/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
server {
listen 80;
server_name yourdomain.com;
root /var/www/react-app/build;
index index.html;
# 处理主应用
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存
location /static/ {
alias /var/www/react-app/build/static/;
expires 1y;
access_log off;
add_header Cache-Control "public";
}
# API代理
location /api/ {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# 其他配置
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
npm run build
)/var/log/nginx/error.log
sudo nginx -t && sudo systemctl reload nginx
如果问题仍然存在,请提供更详细的错误信息和你的Nginx配置,我可以帮你进一步分析。