Docker部署Laravel应用遇HTTPS重定向及SSL协议错误问题
Laravel容器化后HTTPS重定向导致SSL错误的排查与解决
核心问题分析
你的Laravel应用强制将HTTP请求跳转到HTTPS,但Nginx容器并未配置SSL服务,也未提供有效的HTTPS端口映射,导致浏览器无法建立安全连接。
排查与修复步骤
1. 检查Laravel的HTTPS强制配置
Laravel有多处会触发HTTPS强制跳转,逐一排查:
- 打开项目根目录的
.env文件,确认APP_URL的值为http://localhost:8005,而非https://开头的地址,修改后保存。 - 查看
app/Providers/AppServiceProvider.php的boot方法,若存在如下代码,直接注释或删除:URL::forceScheme('https'); - 进入PHP容器执行缓存清理命令,确保配置生效:
php artisan config:clear php artisan cache:clear
2. 检查Nginx配置
若开发环境无需HTTPS,确保docker/nginx/default.conf无强制跳转HTTPS的规则,典型正确配置如下:
server { listen 80; server_name localhost; root /var/www/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; # 此处php对应docker-compose中的PHP服务名 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } }
若配置中有return 301 https://$server_name$request_uri;这类跳转规则,直接删除。
3. 检查Docker Compose端口映射
确认docker-compose.yml中Nginx服务仅映射80端口到8005,示例:
services: nginx: image: nginx:alpine ports: - "8005:80" # 其他配置
若之前错误映射443端口但未配置SSL,需移除无效的443端口映射。
(可选)开发环境启用HTTPS的配置
若必须使用HTTPS,需完成以下操作:
- 用
openssl生成自签名SSL证书,放入docker/nginx/ssl目录 - 修改Nginx配置,添加SSL监听与证书路径:
server { listen 443 ssl; server_name localhost; root /var/www/public; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; # 其余配置同HTTP版本 } # 可选:将HTTP请求跳转至HTTPS server { listen 80; server_name localhost; return 301 https://$server_name$request_uri; } - 在docker-compose.yml中添加443端口映射:
ports: - "8005:80" - "8443:443" - 修改Laravel的
.env中APP_URL为https://localhost:8443
内容的提问来源于stack exchange,提问作者Saani
相关产品推荐
相关产品推荐

