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

Netlify重定向时的CORS问题排查求助

问题:Netlify SvelteKit项目反向代理Rails资源时的CORS脚本加载失败

场景与需求

  • 部署在Netlify上的SvelteKit项目,需要实现:用户访问mynetlifyproject.com/route时,渲染来自另一域名app.myrailsproject.com/route的内容。

已配置的Netlify重定向规则

在Netlify项目中创建_redirects文件,添加以下配置:

/route/*                  https://app.myrailsproject.com/route/:splat                                   200

遇到的问题

部署测试后,HTML和CSS内容可正常加载,但控制台出现脚本获取失败的CORS错误:

Access to script at 'https://app.myrailsproject.com/vite/assets/script.af31239f.js' from origin 'https://www.mynetlifyproject.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

已尝试的解决方案(均无效)

1. Rails应用CORS配置

添加了两种CORS规则(指定域名和允许所有来源):

allow do
  origins 'https://www.mynetlifyproject.com'

  resource '/vite/assets/*',
            headers: :any,
            methods: [:get, :options],
            expose: ['Access-Control-Allow-Origin']
end
allow do
  origins '*'
  resource '/public/vite/assets/*', headers: :any, methods: [:post, :get],
  expose: ['Access-Control-Allow-Origin']
end

2. NGINX CORS配置

在NGINX配置文件中添加了针对/vite/assets/目录及特定文件的CORS头:

cat myapp_production
upstream puma_myapp_production {
  server unix:/var/www/myapp/shared/tmp/sockets/myapp-puma.sock fail_timeout=0;
}

server {
  listen 80;
  server_name localhost myapp.local;
  root /var/www/myapp/current/public;
  try_files $uri/index.html $uri @puma_myapp_production;

  client_max_body_size 4G;
  keepalive_timeout 10;

more_set_headers 'X-Debug-CORS: $http_origin';

  error_page 500 502 504 /500.html;
  error_page 503 @503;

  location @puma_myapp_production {
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
proxy_read_timeout 300;
   proxy_connect_timeout 300;
   proxy_send_timeout 300;
      proxy_set_header X-Forwarded-Proto http;
      proxy_pass http://puma_myapp_production;
    # limit_req zone=one;
    access_log /var/www/myapp/shared/log/nginx.access.log;
    error_log /var/www/myapp/shared/log/nginx.error.log;
  }

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

location ~ ^/vite/assets/ {
    add_header 'Access-Control-Allow-Origin' '*' always;
}

location = /vite/assets/indica.f8da5aba.js {
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
}

location = /vite/assets/chart.9bbb5b62.js {
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
}

  location ^~ /packs/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  location = /50x.html {
    root html;
  }

  location = /404.html {
    root html;
  }

  location @503 {
    error_page 405 = /system/maintenance.html;
    if (-f $document_root/system/maintenance.html) {
      rewrite ^(.*)$ /system/maintenance.html break;
    }
    rewrite ^(.*)$ /503.html break;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    return 405;
  }

  if (-f $document_root/system/maintenance.html) {
    return 503;
  }
}

内容的提问来源于stack exchange,提问作者Thiago David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:33:12