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

Laravel部署在非标准端口反向代理下URL生成带错误端口求助

Laravel反向代理非标准端口导致URL生成异常的解决办法

方案1:配置反向代理传递正确的请求头

反向代理需要将外部真实端口(443)和协议信息传递给Laravel,以Nginx反向代理为例,在代理配置中添加以下请求头:

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $remote_addr;

通过这些请求头,Laravel能获取到外部访问的真实端口,而非反向代理的999端口。

方案2:调整TrustProxies中间件配置

在app/Http/Middleware/TrustProxies.php中,除了信任代理IP,还可以强制覆盖请求端口:

<?php

namespace App\Http\Middleware;

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

class TrustProxies extends Middleware
{
    protected $proxies = ['你的反向代理IP'];
    
    protected $headers = Request::HEADER_X_FORWARDED_ALL;

    public function handle($request, Closure $next)
    {
        // 针对可信代理的请求,强制设置端口为外部真实端口443
        if ($request->isFromTrustedProxy()) {
            $request->setPort(443);
        }
        
        return $next($request);
    }
}

通过setPort方法手动指定端口,确保Laravel生成URL时使用正确的端口值。

方案3:固定APP_URL配置

在项目根目录的.env文件中,明确设置外部访问的完整URL:

APP_URL=https://my.external.domain/mylaravelapp

Laravel生成URL时会优先使用该配置值,忽略请求头中的端口信息,适合单一外部域名的场景。

方案4:局部指定端口生成URL

如果仅需个别URL修正,可在生成路由时手动指定端口:

// 使用route助手
route('foo.bar', [], false, 443);

// 使用URL facade
URL::route('foo.bar', [], true, 443);

此方法适合不需要全局修改的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:42:11