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

Laravel部署至DigitalOcean App后HTTP URL生成问题求助

Laravel 9 部署至DigitalOcean App服务后HTTP URL生成问题解决

问题背景

将Laravel 9 + Jetstream/Livewire应用通过GitHub部署至DigitalOcean App服务,CI/CD流程正常,但Blade模板中url()和route()生成的URL强制使用HTTP,导致混合内容问题。已尝试修改AppServiceProvider、TrustProxies中间件、env变量及清除缓存,但问题未解决。

适配DigitalOcean App服务的正确配置

1. 调整TrustProxies中间件

DigitalOcean App服务通过反向代理传递X-Forwarded-Proto等头部信息,需让Laravel正确识别这些头。修改app/Http/Middleware/TrustProxies.php:

<?php

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    // 信任所有代理(DigitalOcean App的代理IP动态变化,无需固定IP)
    protected $proxies = '*';

    // 指定需要信任的转发头部,包含协议头X-Forwarded-Proto
    protected $headers = Request::HEADER_X_FORWARDED_FOR | 
                        Request::HEADER_X_FORWARDED_HOST | 
                        Request::HEADER_X_FORWARDED_PORT | 
                        Request::HEADER_X_FORWARDED_PROTO;
}

2. 确认环境变量配置

在DigitalOcean App控制台的环境变量中设置以下值(不要仅依赖本地.env文件):

  • APP_URL=https://your-domain.com
  • ASSET_URL=https://your-domain.com

3. 优化部署缓存策略

在CI/CD部署脚本中添加缓存清理命令,确保配置生效:

php artisan optimize:clear
php artisan config:cache

4. 可选:强制HTTPS(兜底方案)

若上述配置仍不生效,可在AppServiceProvider.php的boot方法中添加生产环境强制HTTPS逻辑:

public function boot()
{
    if ($this->app->environment('production')) {
        \Illuminate\Support\Facades\URL::forceScheme('https');
    }
}

关键说明

DigitalOcean App服务基于类Heroku架构,代理IP动态变化,因此TrustProxies中设置$proxies = '*'是必要的,无需手动添加CloudFlare或DO的IP列表。核心是让Laravel识别X-Forwarded-Proto头,从而自动生成HTTPS URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:30:57