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

