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

Laravel5.5 Docker Nginx环境下Swagger静态资源缺端口导致页面空白求助

解决方案

问题根本原因

Laravel生成资源URL时未携带端口、协议匹配错误,由两处配置问题导致:

  1. Nginx传递给PHP的HTTP_HOST参数仅包含主机地址,未携带用户访问时的端口,Laravel生成绝对URL时默认使用80/443端口,导致资源地址端口丢失
  2. 访问地址使用HTTPS协议,但Nginx硬编码传递HTTPS off参数,Laravel识别为HTTP请求,生成的资源协议与访问协议不匹配,可能触发混合内容拦截

操作步骤

第一步:修改Nginx配置

编辑default.conf文件,找到location ~ \.php$配置块,修改两处参数:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_read_timeout        600;
    include                     fastcgi_params;
    fastcgi_index               index.php;
    fastcgi_param               SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    # 删掉原来硬编码的HTTPS off,替换为自动判断请求协议
    fastcgi_param               HTTPS $https if_not_empty;
    fastcgi_pass                php-upstream;
    # 把原来的$host改成$http_host,自动携带访问端口
    fastcgi_param               HTTP_HOST    $http_host;
}

修改完成后重启Nginx容器生效:

docker-compose restart nginx

第二步:Laravel侧适配(如第一步未生效可执行)

方案A:调整配置文件

  1. 编辑项目根目录.env文件,修正APP_URL为实际访问地址:
APP_URL=https://127.0.0.1:8080
  1. 发布Laravel-swagger配置文件(如未发布):
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"
  1. 编辑config/l5-swagger.php,将generate_absolute类配置设为false,使用相对路径加载资源,或者直接指定base_url为https://127.0.0.1:8080

方案B:强制全局URL规则

编辑app/Providers/AppServiceProvider.php,在boot方法中添加全局URL生成规则:

public function boot()
{
    // 强制使用.env中配置的APP_URL作为根地址
    $this->app['url']->forceRootUrl(config('app.url'));
    // 强制使用HTTPS协议
    $this->app['url']->forceScheme('https');
}

修改完成后清除配置缓存:

php artisan config:cache

验证

重新访问https://127.0.0.1:8080/api/documentation,检查资源加载地址已携带8080端口、协议为HTTPS即可正常显示页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:36:00