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

Laravel部署在应用网关后如何正确配置SSL URL?

解决Laravel 9部署在Azure App Gateway/WAF后的URL及POST 404问题

最优解决思路:配置Laravel信任代理,自动识别真实请求协议

硬编码forceScheme('https')的方式过于粗暴,会忽略网关传递的真实请求头信息,进而导致路由匹配异常出现404。正确的做法是让Laravel信任Azure App Gateway的代理,自动读取网关转发的请求头来识别协议和来源。

步骤1:修改信任代理中间件

打开app/Http/Middleware/TrustProxies.php文件,更新以下内容:

  • 将$proxies设置为Azure App Gateway的IP段(可从Azure官方文档获取精准CIDR范围,生产环境推荐配置具体IP;测试环境可临时用'*'信任所有代理)
  • 将$headers设置为Request::HEADER_X_FORWARDED_ALL,确保Laravel读取所有转发头信息

修改后的示例代码:

<?php

namespace App\Http\Middleware;

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

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array<int, string>|string|null
     */
    protected $proxies = [
        // 替换为Azure App Gateway的IP或CIDR,例如:
        // '13.107.6.152/31',
        // '13.107.18.10/31',
        // 测试环境可临时用 '*'
    ];

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

步骤2:移除硬编码的forceScheme代码

删除RouteServiceProvider中添加的resolve(\Illuminate\Routing\UrlGenerator::class)->forceScheme('https');代码。

步骤3:验证效果

完成配置后,Laravel会自动通过网关传递的X-Forwarded-Proto头识别真实请求协议(https),此时:

  • url()助手会自动生成https链接,无需全局替换为secure_url()
  • POST请求到https://..../signin时,Laravel能正确识别请求协议,匹配对应路由,解决404问题

额外排查方向

如果仍存在问题,可检查:

  • Azure App Gateway是否已配置传递X-Forwarded-Proto、X-Forwarded-For等请求头
  • Laravel路由是否存在scheme约束(例如Route::post('/signin')->scheme('https')),确保路由未强制要求特定协议

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:55:13