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

Coolify+Caddy代理下Ruby on Rails的CORS问题求助

问题求助:Coolify部署React+Rails应用的CORS及Caddy配置问题

我在Coolify上部署了React前端应用作为客户端,同时部署了搭载PostgreSQL和Redis的Ruby on Rails后端API应用。本地运行正常,但在Coolify的生产与UAT环境中无法正常工作,疑似存在CORS问题。

我尝试调整了CORS配置与Caddyfile代理设置,但始终无法解决,已卡壳一周,恳请技术帮助!

相关截图

  • 服务器CORS配置截图
  • 客户端Axios请求截图
  • 弹窗报错截图

代理日志报错(每5秒出现一次)

2024-11-24T14:00:25.043139001Z {"level":"info","ts":1732456825.0429814,"logger":"docker-proxy","msg":"Process Caddyfile","logs":"[ERROR]  Removing invalid block: parsing caddyfile tokens for 'handle_path': path matcher must begin with '/', got http://uat.api.meritbox.me*, at Caddyfile:4\n:// {\n\tencode zstd gzip\n\thandle_path http://uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\thandle_path http://www.uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\thandle_path https://www.uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\theader -Server\n\ttry_files {path} /index.html /index.php\n}\n\n"}
2024-11-24T14:00:30.045719445Z {"level":"info","ts":1732456830.045587,"logger":"docker-proxy","msg":"Process Caddyfile","logs":"[ERROR]  Removing invalid block: parsing caddyfile tokens for 'handle_path': path matcher must begin with '/', got http://uat.api.meritbox.me*, at Caddyfile:4\n:// {\n\tencode zstd gzip\n\thandle_path http://uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\thandle_path http://www.uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\thandle_path https://www.uat.api.meritbox.me* {\n\t\treverse_proxy 10.0.3.5\n\t}\n\theader -Server\n\ttry_files {path} /index.html /index.php\n}\n\n"}

当前调整后的Caddy配置

networks:
  coolify:
    external: true
services:
  caddy:
    container_name: coolify-proxy
    image: 'lucaslorentz/caddy-docker-proxy:2.8-alpine'
    restart: unless-stopped
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    environment:
      - CADDY_DOCKER_POLLING_INTERVAL=5s
      - CADDY_DOCKER_CADDYFILE_PATH=/dynamic/Caddyfile
    networks:
      - coolify
    ports:
      - '80:80'
      - '443:443'
      - '443:443/udp'
    labels:
      - coolify.managed=true
      - coolify.proxy=true
      - "caddy=
        # Production Environment
        api.meritbox.me {
            encode zstd gzip
            handle /* {
                reverse_proxy 10.0.3.2 {
                    header_up Host {upstream_hostport}
                    header_up X-Real-IP {remote_host}
                    header_up X-Forwarded-For {remote_host}
                    header_up X-Forwarded-Proto {scheme}
                }
            }
            header {
                Access-Control-Allow-Origin https://meritbox.me
                Access-Control-Allow-Methods 'GET, POST, PUT, PATCH, DELETE, OPTIONS'
                Access-Control-Allow-Headers 'Content-Type, Authorization, access-token, expiry, token-type'
                Access-Control-Allow-Credentials true
                Access-Control-Expose-Headers 'access-token, expiry, token-type, Authorization'
                -Server
            }
            try_files {path} /index.html /index.php
        }
        www.api.meritbox.me {
            redir https://api.meritbox.me{uri} permanent
        }
        # UAT Environment
        uat.api.meritbox.me {
            encode zstd gzip
            handle /* {
                reverse_proxy 10.0.3.5 {
                    header_up Host {upstream_hostport}
                    header_up X-Real-IP {remote_host}
                    header_up X-Forwarded-For {remote_host}
                    header_up X-Forwarded-Proto {scheme}
                }
            }
            header {
                Access-Control-Allow-Origin https://uat.meritbox.me
                Access-Control-Allow-Methods 'GET, POST, PUT, PATCH, DELETE, OPTIONS'
                Access-Control-Allow-Headers 'Content-Type, Authorization, access-token, expiry, token-type'
                Access-Control-Allow-Credentials true
                Access-Control-Expose-Headers 'access-token, expiry, token-type, Authorization'
                -Server
            }
            try_files {path} /index.html /index.php
        }
        www.uat.api.meritbox.me {
            redir https://uat.api.meritbox.me{uri} permanent
        }"
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/data/coolify/proxy/caddy/dynamic:/dynamic'
      - '/data/coolify/proxy/caddy/config:/config'
      - '/data/coolify/proxy/caddy/data:/data'

内容的提问来源于stack exchange,提问作者Htet Naing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:35:57