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

Traefik转发HTTPS到php-nginx容器运行Laravel出现400错误求助

核心问题定位

你日志中出现的\x16\x03\x01开头的乱码请求是TLS握手请求,Nginx返回400说明TLS握手失败,优先排查以下内容:

优先排查项(90%概率是该类问题)

  • 证书路径不匹配问题:你将宿主机SSL证书挂载到了容器的/etc/ssl目录,但从Nginx配置可以看到,SSL证书读取路径为/opt/docker/etc/nginx/ssl/server.crt和/opt/docker/etc/nginx/ssl/server.key,路径完全不匹配,Nginx无法读取有效证书导致握手失败。
    解决方法二选一:
    1. 修改docker-compose的volumes配置,将证书挂载到容器的/opt/docker/etc/nginx/ssl/路径
    2. 修改/opt/docker/etc/nginx/vhost.ssl.conf中的ssl_certificate和ssl_certificate_key配置,指向/etc/ssl下对应的证书文件
  • 端口监听校验:进入starapp容器执行ss -tulnp | grep 443,确认Nginx已经正常监听443端口

次要排查项

  • Traefik后端证书校验问题:如果你的证书是自签名证书,Traefik默认会校验后端证书有效性,校验失败也会导致握手错误。可以临时添加Traefik标签traefik.http.services.starapp.loadbalancer.server.insecureSkipVerify=true测试,生产环境建议将自签名根证书加入Traefik的信任根存储,不要长期开启跳过校验
  • 本地连通性测试:进入starapp容器执行curl -vk https://127.0.0.1,如果本地无法拿到正常响应,确认证书文件权限是否正确,证书和密钥是否匹配

Laravel混合内容问题优化建议

你当前的全链路HTTPS架构可以正常解决混合内容问题,也可以选择更轻量的架构,减少性能损耗:

  1. Traefik侧完成SSL卸载,将请求以HTTP协议转发到后端Nginx的80端口
  2. 在Nginx的fastcgi参数中添加fastcgi_param HTTP_X_FORWARDED_PROTO $http_x_forwarded_proto;,将Traefik传递的协议头透传给PHP
  3. 配置Laravel的TrustProxies中间件,信任Traefik所属的代理网段,或直接在AppServiceProvider的boot方法中添加\URL::forceScheme('https');,强制Laravel生成HTTPS链接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:42:01