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.comASSET_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
相关产品推荐
相关产品推荐

