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

Portainer反向代理访问报错:HTTP请求发送至HTTPS服务

问题原因

报错核心是反向代理与后端服务的协议不匹配,和浏览器到反向代理的HTTPS连接无关:

  • 你的Apache反向代理443虚拟主机配置中,转发目标写为http://192.168.178.69:9443/,意味着反向代理接收到浏览器的HTTPS请求后,会向后端Portainer发送明文HTTP请求
  • Portainer的9443端口是默认HTTPS监听端口,仅接受加密HTTPS请求,收到明文HTTP请求时就会返回Client sent an HTTP request to an HTTPS server的错误响应,最终透传给浏览器显示
  • 之前配置的webserver服务可正常访问,是因为其8080端口本身就是HTTP监听端口,和反向代理的转发协议匹配,不存在协议冲突。
修复方案

共有两种可行修复路径,其中容器内网转发是生产环境更推荐的方案:

方案1:保留现有网络结构,修正转发协议

如果不想调整Docker网络配置,直接修改Apache代理规则的协议类型,同时关闭对后端自签证书的校验即可:

<IfModule mod_ssl.c>
<VirtualHost *:443>
 ServerName portainer.my-domain.com
 ProxyPreserveHost On 
 DocumentRoot /var/www/html
 ProxyPass /.well-known !
 # 开启SSL代理,关闭后端证书校验
 SSLProxyEngine on
 SSLProxyVerify none
 SSLProxyCheckPeerCN off
 SSLProxyCheckPeerName off
 SSLProxyCheckPeerExpire off
 # 转发协议改为https
 ProxyPass / https://192.168.178.69:9443/
 ProxyPassReverse / https://192.168.178.69:9443/

SSLCertificateFile /etc/letsencrypt/live/my-domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my-domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

修改完成后重启Apache服务即可生效,该方案需要额外维护后端证书校验规则,走宿主机IP转发的性能略低于容器内网转发。

方案2:容器内网HTTP转发(已验证最优方案)

将反向代理与Portainer加入同一个Docker自定义网桥,直接通过容器名做DNS解析,走Portainer默认的9000 HTTP端口转发,无需处理证书校验问题,转发延迟更低:

  1. 编写docker-compose配置,将两个服务加入同一自定义网络:
version: "3.4"

services:
  apache:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /home/pi/reverse-proxy/:/etc/apache2
    networks:
      - homeserver

  portainer:
    image: portainer/portainer-ce:latest
    ports:
      - "8000:8000"
      - "9000:9000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - homeserver

networks:
  homeserver:

volumes:
  portainer_data:
  1. 修改Apache的Portainer代理规则,将目标地址改为Portainer容器名+9000 HTTP端口:
ProxyPass / http://reverse-proxy_portainer_1:9000/
ProxyPassReverse / http://reverse-proxy_portainer_1:9000/
  1. 重启Apache容器即可正常访问。

补充说明:Docker自定义网桥内置DNS解析能力,直接通过容器名访问不需要配置固定IP,容器重建后IP变化也不会影响转发规则有效性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:18