首页 > 解决方案 > 不安全的表格和代理服务器?

问题描述

我有一个用 Apache Tomcat 8.5 编写的 Web 应用程序,它在 NGINX 后面被代理。即我正在使用 NGINX 卸载 SSL 并提供静态图像等。该应用程序多年来一直可靠运行。

现在,Chrome 87 更新在每次提交表单时都会导致警告“您要提交的信息不安全”。我用细齿梳子浏览了代码,但我不知道是什么触发了它。

用户通过 https 访问 NGINX,并且证书有效。NGINX 将请求转发到端口 8080 上的 Tomcat。请参阅下面的配置。

表单在 tomcat 服务器上作为 HTTP 提交。但是 NGINX 应该阻止浏览器知道这一点。就浏览器所知,它是 https ......

所有标签都写为相对链接或暗示为相同的 URL。例如 <form action="/login/login.do" method="post"><form method="post">

谁能指出要寻找的东西?我是否缺少标题或其他内容?

提前致谢

来自 NGINX conf.d/site.conf:

location ~ \.(do|jsp)$ {
    proxy_pass              http://127.0.0.1:8080;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
}

标签: google-chromenginxtomcathttpsnginx-reverse-proxy

解决方案


有一个类似的问题,在我的情况下,我的应用服务器的响应是重定向到与客户端使用的方案(https)不同的方案(http)。

如果这也是您的情况,那么将其添加到您的location定义中应该可以解决问题。假设您的应用程序/应用程序服务器尊重此标头,那么它应该在Location标头上使用正确的方案 (https) 进行响应。

proxy_set_header X-Forwarded-Proto $scheme;

为了完整起见,摘自MDN 文档的 X-Forwarded-Proto

X-Forwarded-Proto (XFP) 标头是一个事实上的标准标头,用于标识客户端用于连接到您的代理或负载平衡器的协议(HTTP 或 HTTPS)。


推荐阅读