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

Laravel9+Angular14部署Plesk Centos后CORS策略失效求助

CORS错误求助:OPTIONS请求失败但实际XHR请求正常

我的应用持续返回CORS错误,尝试了网上各类方案仍未解决。

控制台错误:

从源'https://domain.nl'访问XMLHttpRequest到'https://api.domain/api/v1/status'被CORS策略阻止:预检请求的响应未通过访问控制检查:请求的资源上不存在'Access-Control-Allow-Origin'头。

main.js控制台错误:

"https://api.domain/api/v1/status的Http失败响应:0 Unknown Error"

奇怪的是:数据已加载并在应用中显示,似乎OPTIONS请求失败但实际XHR请求正常。

服务器环境

基于Plesk的CentOS服务器,运行PHP8.1,采用专用FPM应用,由Nginx提供服务;pm.max_children设置为20。

已尝试的解决方案

  • 在Plesk>Apache&Nginx设置的HTTPS附加指令中添加头部:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "*"
Header set Access-Control-Allow-Headers "*"
  • 在Plesk>Apache&Nginx设置的附加Nginx指令中添加头部:
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
  • 在Laravel中为所有路由添加cors中间件:
// 修改前:
->middleware('api','auth:sanctum')
// 修改后:
->middleware('cors','api','auth:sanctum')
  • 在Laravel中安装fruitcake/laravel-cors包
  • 为所有response()返回添加头部:
return response()
    ->json(['Count'=>$result['count'], 'Result'=>$collection])
    ->withCallback($request->input('callback'))
    ->header("Access-Control-Allow-Origin",  "*");
  • 修改cors.php配置:
// 修改前:
'allowed_origins_patterns' => [],
// 修改后:
'allowed_origins_patterns' => ['*'],

// 修改前:
'supports_credentials' => false,
// 修改后:
'supports_credentials' => true,

以上方案均无效,请求帮助。

补充信息

  • 开发环境运行正常(本地Angular localhost:4200连接同一服务器上的域名);
  • 已多次执行composer dump-autoload、artisan optimize和artisan cache:clear;
  • 经phpnl Slack咨询后新增方案:在Kernel.php中添加Laravel Cors中间件:
\App\Http\Middleware\Cors::class,

服务器日志持续出现错误:

2785#0: *3791483 peer closed connection in SSL handshake (104: Connection reset by peer) while SSL handshaking to upstream

已添加并重新颁发Let's Encrypt免费证书,问题仍存在。

前端请求代码

getRequest(url: string, requestParams: any = {}): Observable<any> {
    const headerDict = {
      'Authorization': 'Bearer ' + environment.authData.plainTextToken,
      'X-UserId': environment.authData.curUser['UserId'].toString()
    };

    const requestOptions = {
      headers: new HttpHeaders(headerDict),
      params: requestParams
    };

    return this.http.get(environment.apiUrl + url, requestOptions);
}

相关截图说明

  • 控制台截图:显示CORS错误提示及HTTP 0未知错误信息
  • Plesk日志截图:展示SSL握手时上游连接重置的错误日志
  • 网络标签页截图:呈现OPTIONS请求失败的状态详情

内容的提问来源于stack exchange,提问作者Ruud van de Ven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:35:24